DongDD's IT

ICMP - ICMP message, error reporting, query message 본문

네트워크

ICMP - ICMP message, error reporting, query message

DongDD 2017. 9. 6. 16:32

ICMP


ICMP


- Network Layer에 있는 protocol 중 하나

- error reporting, query message에 사용되는 protocol

- Router가 packet을 버리는 경우나 error로 인해 제대로 전송되지 않았을 때 Sender에게 알려주기 위해 사용


다른 프로토콜과 같은 형태로 IP data부분에 ICMP message가 들어가고 header가 붙으면서 encapsulation됨


ICMP Message


ICMP도 다른 Protocol과 비슷한 형태로 구성되어 있음


error가 발생했을 때 report하기 위해 이러한 형태로 ICMP packet을 구성한다.


1) 왼쪽 IP header : source address를 통해 어디서 error가 발생한지 알 수 있음

2) ICMP Type : error의 종류를 알 수 있음

3) IP header : 원래 보내려던 곳의 IP address를 알 수있음 (어떤 IP에 보내려한 것이 error가 났는 지 알 수 있음)

4) 8 bytes : TCP header부분의 8bytes를 의미

-> 어떤 application(port)에 보내려했는지 알 수 있음

-> sequence number를 보고 몇 번째 packet이 전송 실패했는지 알 수 있음


1. Error-reporting message

1) Destination-unreachable (Type 3)

- 여러가지 원인에 의해 error가 발생할 때 reporting 해줌

 -> strcit-source 옵션 사용 시 기재된 route를 갈 수 없을 때 packet을 버리고 ICMP 전송

 -> no fragmentation 옵션 사용 시 MTU로 인해 더 이상 분할 없이 갈 수 없을 때 버리고 ICMP 전송

 -> link가 깨져서 더 이상 전송할 수 없을 때 ICMP 전송

 -> destination의 port가 열리지 않았을 경우 ICMP 전송

-> 이러한 종류를 Code number를 통해 알 수 있음

2) Source-quench (Type 4)

- 네트워크가 Congestion(혼잡)인 경우 packet을 버리고 ICMP를 전송

 -> TCP에서는 혼잡 제어를 하고 Layer 3에서는 ICMP를 통해 보고만 함

3) Time-exceeded (Type 11)

- Router가 TTL을 감소시킨 후 0이 됐을 때 packet을 버리고 ICMP 전송

- destination에서 모든 fragment가 도착하지 않은 채로 time-out 됐을 때 모든 fragment를 버리고 ICMP 전송

4) Parameter-problem (Type 12)

- IP헤더에 문제가 있을 때 packet을 버리고 ICMP 전송

5) Redirection message

- 위와 같이 A->B로 전송할 때 R2를 거치면 빠르지만 R1을 거쳐서 packet을 돌아가는 경우 ICMP를 이용해 rediection이 가능함

- R1으로 packet이 온 경우 R1 router가 source에게 R2로 가라는 경로를 알려줌

-> ICMP를 통해 routing table 수정

- 같은 local network에서의 잘못된 경로만 detect 가능


2. Query message

1) echo-request message (Type 8 : request, Type 0 : reply)

- host나 router가 보낼 수 있음

- 상대방 network를 확인할 때 사용(Network Layer 작동 여부)

- 흔히 알고 있는 ping이라는 프로그램이 이 원리를 사용함(echo request, echo reply)

2) Timestamp message (Type 13 : request, Type 14 : reply)

- Network Layer에서 RTT를 측정할 때 사용함

- Original timestamp, Receive timestamp, Transmit timestamp가 들어 있음

- Receive - Original을 통해 Network에서 걸린 시간 측정 가능

- timestamp message를 통해 두 개의 다른 기기의 클락을 동기화시킬 수 있음


ICMP Debugging tool


1. ping

- timestamp를 이용해 RTT측정을 할 수 있게 해주는 툴

2. traceroute

- TTL을 하나씩 늘려가며 해당 경로에 있는 router들의 주소를 알 수 있음

- TTL = 1 -> 첫 번째 hop에서 ICMP 전송, TTL = 2 -> 두 번재 hop에서 ICMP 전송


-> ICMP를 이용한 공격이 많아 현재는 막아놓은 곳이 많아서 ICMP 사용이 어려울 수 있음






Comments