ICMP
Internet Control Message Protocol Version 4
Network layer에는 IGMP, ICMP, IP, ARP가 존재한다. IP protocolD은 IP Header을 생성하거나 fragmentation을 진행하는데 error 감지 기능이 따로 없다. 그래서 만든 것이 ICMP이다.
Error가 발생할 경우 source에게 보고하는 기능을 한다.
| Type | Message | 설명 |
|---|
| error-repoting messages | | |
| 3 | Destination unreachable | |
| 4 | Source quench | 혼잡으로 인하여 packet이 버려진 경우 |
| 11 | Time-Exceeded | 0-ttl is zero, 1-fragmentation 조합불가 |
| 12 | parameter problem | header에서 문제 감지 |
| 5 | redirection message | 같은 network내에서 더 빠른 경로 재설정 |
| Query messages | | |
| 8or0 | echo-request, echo-reply | 네트워크 확인용 |
| 13or14 | timestamp-request, timestamp-reqly | round-trip time 계산 |
🏷️ ICMP 구조
위 두줄 8바이트가 ICMP 헤더이며 Data Section에는 IP 헤더와 TCP 헤더의 일부분이 들어있다.

- Error가 발생하면 해당 datagram은 ICMP header와 source로 가는 IP header가 더해져 source에게 전송된다.

- 네트워크 도달불가 : 목적지 주소가 라우팅 테이블에 없는 경우 및 디폴트 라우트가 없는 경우
- 포트 도달불가 : 목적지 호스트에서 특정 포트가 사용될 수 없는 경우
- 단편화가 필요하지만 DF bit가 설정되어 단편화하지 못하는 경우
🔈 Source-quench
- 혼잡으로 인하여 packet이 버려진 경우
- 혼잡제어와 흐름제어는 TCP에서 해결이 가능하다. IP에게는 혼잡으로 인하여 datagram이 버려졌다고 알리는 용도로 쓰인다.
🔈 Time-exceeded
- code 0 - Time-to-live 값이 0이 되어 datagram이 버려졌을 경우
- code 1 - destination에서 fragment가 다 도착하지 않아 조합할 수 없는 경우
🔈 parameter-problem
- header 값이 이상이 생긴 경우
- ICMP 헤더에 문제가 생긴 IP 헤더의 Pointer값을 담아 보낸다.
🔈 Redirection
- 같은 네트워크 내에서 IP packet 전송시 더 빠른 경로가 존재하면 RM(Redirection Message)를 전송하여 경로를 다시 설정하게끔 한다.
- 원래 라우팅 테이블는 점점 보강되는 것으로 redirection message를 통해서 완성된다.
- ICMP 헤더에 바꿔야할 target router의 IP 주소가 추가된다.
📑 Echo-request and echo-reply
- 상대 network 확인용 그리고 route set-up
- 주로 ping 명령어와 쓰인다.
- request는 타입8, reply는 타입0을 쓴다.
- 헤더에는 id와 sequence number가 optional data에는 request messages가 들어간다.
📑 Timestamp-request and time-stamp-reply message
-
RTT(Round Trip Time) 측정

-
출발시간, 받은 시간, 보낸 시간이 적힌다.
-
비동기화상태여도 상관 없다.
traceroute program
- 의도적으로 TTL 값을 작게 설정하여 time-exceed가 발생하도록 한다. 그러면 ICMP엔 어디서 TTL이 0이 되었는가를 알 수 있다.
$ tracerout <domain명>
- 도달하는 곳의 IP주소와 해당 IP까지 도달하는데 걸린 시간을 3번 적는다.