ICMP
- IP 프로토콜의 한계: IP는 자체적으로 오류를 보고하는 메커니즘이 없다.
- 패킷이 드롭되는 경우 (에러, TTL이 0이 됨, fragment 중 하나를 잃어버림), IP는 이를 감지하지 못한다.
- ICMP의 목적: Source에게 에러를 보고하여, 네트워크 문제를 진단하고 해결할 수 있게 하는 것
- ICMP는 Network layer 프로토콜이다.
- ICMP Format:

- ICMP의 기능
- Error reporting
- Query
ICMP: Error reporting

ICMP는 이러한 경우에 소스 IP 주소로 보고한다
- Destination unreachable: 목적지로 가기 위한 다음 노드를 찾을 수 없음
- Source quench: 라우터나 호스트의 큐가 가득 차서 드롭됨.
- Time exceeded: 패킷의 TTL이 0이 되어 버려짐
- Parameter problems: 헤더 필드 문제
- Redirection: 네트워크에 여러 개의 게이트웨이 라우터가 있는 경우 발생
- 호스트가 종종 최적의 경로를 계산하지 않고 기본 게이트웨이를 할당한다
- 라우터가 더 나은 경로를 찾으면, 소스노드에게 게이트웨이 라우터를 재할당하라고 알려준다.
- Redirection 예제

- 라우터 R1과 R2가 호스트 A와 동일한 네트워크에 있다.
- 호스트 A의 기본 게이트웨이는 R1이다 (수동으로 할당됨).
- 호스트 A에서 R1로 데이터를 전송할 때, 목적지 호스트 B로 가기 위해서는 패킷을 R2로 보내는 것이 더 낫다는 것이 발견된다
- R1은 데이터를 R2로 전송하고, 동시에 호스트 A에게 리다이렉션 보고를 보낸다
ICMP Rules
- ICMP 패킷은 ICMP 패킷에 대해서는 생성되지 않는다.
- fragmented 패킷의 경우, ICMP 패킷은 첫번째 fragment에 대해서만 생성된다.
(즉, IP헤더의 fragmentation offset이 0인 패킷)
- ICMP는 멀티캐스트 패킷에 대해서는 생성되지 않는다.
- ICMP는 특정 목적지 주소를 가진 패킷에 대해서는 생성되지 않는다. (127.0.0.1 or 0.0.0.0 등)
ICMP: Query

ICMP는 정보를 질의하기 위해 사용될 수도 있다.
- Echo request & reply
- ping
- 목적지가 사용 가능한지, 호스트가 목적지에 도달할 수 있는지를 확인
- Time stamp request & reply
- 목적지까지의 왕복 시간 (round-trip time)을 측정하기 위해 사용
- Address-mask request & reply
- 호스트가 자신의 IP는 알지만 서브넷 마스크는 모를 때 사용
- address-mask request를 브로드캐스트
- 아무 노드나 address-mask reply로 응답
- Router solicitation(탐색) and advertisement
- 호스트가 네트워크에 어떤 라우터가 있는지 확인하기 위해 Router solicitation을 보냄
- 라우터는 네트워크에 존재함을 알리기 위해 Router advertisement를 보냄
- ICMP를 디버깅 목적으로 사용
- ping
- traceroute
Ping
- 목적지 호스트가 사용 가능한지 알아내기 위해 ICMP 메시지를 보내는 애플리케이션
- ICMP echo request / reply를 사용
Traceroute (tracert)
- 출발지와 목적지 호스트 간의 라우터를 추적하기 위한 애플리케이션
- 동작

- A는 TTL=1로 설정해 B로 UDP 패킷을 보낸다.
- 패킷은 R1에서 드롭되고, ICMP가 A에게 전송된다 (time exceeded).
- 이 ICMP 패킷을 통해 A는 R1의 IP주소, R1까지의 왕복시간을 알게 된다.
- 평균 왕복시간을 알기 위해 여러 개의 UDP 패킷을 전송한다.
- 이 과정이 끝나면, TTL 값을 1씩 증가시키며 반복한다.
- 목적지 호스트에서는 ICMP(time exceeded)가 A에게 전송되지 않는다.
- 그러나, 목적지 호스트에는 traceroute 패킷을 받을 UDP 포트가 없다.
(목적지까지 갔지만, 목적지가 듣지 않고 있어 드롭된다)
- 따라서, ICMP (destination unreachable)이 생성되어 A로 전송된다.
- 이를 통해, 목적지까지의 경로를 추적할 수 있다.