ICMP(Internet Control Message Protocol)는 게이트웨이나 목적지 호스트가 데이터그램 처리 중 발생한 오류나 통신 상태를 출발지 호스트에게 보고하는 데 쓰는 프로토콜이다. IP와 같은 네트워크 계층에 속하지만 별도의 상위 프로토콜처럼 IP 데이터그램에 실려 전달된다[1]Ethernet 프레임 안에 IP 헤더, 그 안에 ICMP 메시지가 담기는 구조다.

메시지 형식

모든 ICMP 메시지는 메시지 종류를 나타내는 Type(8비트), Type 안에서 세부 상황을 구분하는 Code(8비트), 메시지 손상 여부를 검사하는 Checksum(16비트)으로 시작하고, 이어서 Type·Code에 따라 달라지는 내용이 붙는다[1].

0 8 31 Type Code Checksum Type·Code별 내용(가변)

대표 메시지 종류

Echo Request(Type 8)와 Echo Reply(Type 0)는 상대 호스트가 살아있는지, 응답까지 걸리는 시간이 얼마인지 확인하는 데 쓰이며, 이 둘을 이용한 대표적인 진단 도구가 ping이다. Destination Unreachable(Type 3)은 데이터그램을 목적지까지 전달할 수 없을 때 보고되며, Code 값으로 네트워크를 찾을 수 없는 경우(0)·호스트를 찾을 수 없는 경우(1)·목적 포트가 없는 경우(3) 등 구체적인 원인을 구분한다[1].

Tip

ping은 Echo Request를 보내고 돌아오는 Echo Reply까지 걸린 시간을 측정해 왕복 지연(RTT)을 보고한다. 오류가 아니라 정상 응답 확인에 ICMP를 쓰는 대표적인 예다.

IP와의 관계

ICMP는 IP의 신뢰성 없는 전달을 보완하는 재전송·확인응답 메커니즘이 아니다 — 문제가 생겼음을 출발지에 알릴 뿐, 그 자체로 오류를 정정하지 않는다. 오류를 유발한 데이터그램 자체에 대해서도 ICMP 메시지가 또 다른 유실 가능성을 안은 채 전달되므로, 도착이 보장되지는 않는다.

참고문헌

[1]
J. Postel, “RFC 792 — Internet Control Message Protocol”. 1981. [Online]. Available at: https://www.rfc-editor.org/rfc/rfc792