인터넷 제어 메시지 프로토콜

ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)는 인터넷 프로토콜 스위트에 기록된 주요 프로토콜 가운데 하나이다. 네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지(Requested service is not available 등)를 전송받는 데 주로 쓰이며 인터넷 프로토콜의 주요 구성원 중 하나로 인터넷 프로토콜에 의존하여 작업을 수행한다. 프로토콜 번호 1로 할당되고 시스템 사이에 데이터를 교환하지 않거나 최종 사용자에 적용되지 않는다는 점에서 TCP와 UDP와는 다르다.(ping 이나 traceroute 같은 몇몇 진단 프로그램 제외)
인터넷 프로토콜 버전 4(IPv4) 용 ICMP는 ICMPv4로 알려져 있고, 유사하게 IPv6은 ICMPv6이다.

상세 기술 정보 
인터넷 제어 메시지 프로토콜은 RFC 792에서 정의한 인터넷 프로토콜 모음 중의 하나이다. ICMP 메시지들은 일반적으로 IP 동작(RFC 1122에 규정)에서 진단이나 제어로 사용되거나 오류에 대한 응답으로 만들어진다. ICMP 오류들은 원래 패킷의 소스 IP 주소로 보내지게 된다.

예를 들어, IP 데이터그램을 전달하는 모든 기기(중간 라우터 같은)는 맨 처음 IP 헤더에서 타임 투 리브(Time to Live, TTL)을 '1'만큼 감소시킨다. 만약 TTL이 '0'이면 패킷은 버려지고, ICMP TTL 초과 메시지가 데이터그램의 원래 IP 주소로 보내진다.

비록 ICMP 메시지는 표준 IP 패킷에 포함되지만, 일반적인 IP 처리와는 구분되어 특별한 경우로 처리된다. 많은 경우, ICMP 메시지의 내용을 검사하고 ICMP 메시지 전송을 유발하는 IP 패킷을 만들어내는 응용 프로그램으로 적당한 오류 메시지를 전달하는 것이 필요하다.

일반적으로 네트워크 유틸리티에서 사용되는 많은 것들이 ICMP 메시지에 기반을 두고있다. 트레이스라우트(traceroute) 명령어는 특별하게 만들어진 IP TTL 헤더 필드들을 가진 IP 데이터그램을 전송하고, 응답에서 ICMP TTL 초과 메시지와 "목적지에 닿을 수 없음(Destination unreachable)" 메시지가 생성되었는지 찾는다. 이와 유사한 핑(ping) 유틸리티는 ICMP "에코 요청(Echo request)"과 "에코 응답(Echo reply)" 메시지를 사용해 구현할 수 있다.

ICMP는 네트워크 계층 프로토콜이다. 포트 번호는 전송 계층과 연계되어 있기 때문에 ICMP 패킷과 연계되는 TCP 또는 UDP 포트 번호는 존재하지 않는다.

ICMP 부분 구조 
ICMP 헤더는 IPv4 헤더 뒤에서 시작되고 IP 프로토콜 번호 '1'로 분류된다. 모든 ICMP 패킷은 8 바이트 헤더와 가변 데이터 구역을 가지고 있다. 마지막 4 바이트는 ICMP 패킷의 타입과 코드에 의존하지만, 처음 4 바이트는 고정된 형식을 가진다.

 타입  ICMP 타입, 제어 메시지 참조.
 코드  ICMP 서브 타입, 제어 메시지 참조.
 검사 합계  ICMP 헤더와 데이터로부터 계산되는 오류 검사 데이터, 이 필드는 0으로 대치됨. 인터넷 검사 합계는 RFC 1071에 규정된 방식으로 사용된다.
 나머지 헤더  ICMP 타입과 코드에 따라 내용이 변경되는 네 바이트 필드

RFC 
 RFC 792, Internet Control Message Protocol
 RFC 950, Internet Standard Subnetting Procedure
 RFC 1016, Something a Host Could Do with Source Quench: The Source Quench Introduced Delay (SQuID)
 RFC 1122, Requirements for Internet Hosts – Communication Layers
 RFC 1716, Towards Requirements for IP Routers
 RFC 1812, Requirements for IP Version 4 Routers

각주

외부 링크 

 IANA ICMP parameters
 IANA protocol numbers
 Explanation of ICMP Redirect Behavior

인터넷 프로토콜
인터넷 표준
네트워크 계층 프로토콜
인터넷 계층 프로토콜