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

== 상세 기술 정보 ==
인터넷 제어 메시지 프로토콜은 [[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|트레이스라우트]](traceroute) 명령어는 특별하게 만들어진 IP TTL 헤더 필드들을 가진 IP 데이터그램을 전송하고, 응답에서 [[ICMP TTL 초과]] 메시지와 "목적지에 닿을 수 없음(Destination unreachable)" 메시지가 생성되었는지 찾는다. 이와 유사한 [[핑]](ping) 유틸리티는 ICMP "에코 요청(Echo request)"과 "에코 응답(Echo reply)" 메시지를 사용해 구현할 수 있다.

ICMP는 [[네트워크 계층]] 프로토콜이다. 포트 번호는 [[전송 계층]]과 연계되어 있기 때문에 ICMP 패킷과 연계되는 TCP 또는 UDP 포트 번호는 존재하지 않는다.<ref>{{웹 인용| title = The OSI Model's Seven Layers Defined and Functions Explained | work = Microsoft Support | access-date = 2014-12-28 | url = https://support.microsoft.com/kb/103884}}</ref>

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

{| class="wikitable" style="margin: 0 auto; text-align: center;"
|+ICMP 헤더 형식
|-
! style="border-bottom:none; border-right:none;"| ''옵셋''
! style="border-left:none;"| [[옥텟 (컴퓨팅)|옥텟]]
! colspan="8" | 0
! colspan="8" | 1
! colspan="8" | 2
! colspan="8" | 3
|-
! style="border-top: none" | [[옥텟 (컴퓨팅)|옥텟]]
! [[비트 (단위)|비트]]
! style="width:2.6%;"| 0
! style="width:2.6%;"| 1
! style="width:2.6%;"| 2
! style="width:2.6%;"| 3
! style="width:2.6%;"| 4
! style="width:2.6%;"| 5
! style="width:2.6%;"| 6
! style="width:2.6%;"| 7
! style="width:2.6%;"| 8
! style="width:2.6%;"| 9
! style="width:2.6%;"| 10
! style="width:2.6%;"| 11
! style="width:2.6%;"| 12
! style="width:2.6%;"| 13
! style="width:2.6%;"| 14
! style="width:2.6%;"| 15
! style="width:2.6%;"| 16
! style="width:2.6%;"| 17
! style="width:2.6%;"| 18
! style="width:2.6%;"| 19
! style="width:2.6%;"| 20
! style="width:2.6%;"| 21
! style="width:2.6%;"| 22
! style="width:2.6%;"| 23
! style="width:2.6%;"| 24
! style="width:2.6%;"| 25
! style="width:2.6%;"| 26
! style="width:2.6%;"| 27
! style="width:2.6%;"| 28
! style="width:2.6%;"| 29
! style="width:2.6%;"| 30
! style="width:2.6%;"| 31
|-
! 0
! 0
| colspan="8"|[[#header_type|타입]]
| colspan="8"|[[#header_code|코드]]
| colspan="16"|[[#header_checksum|검사 합계]]
|-
! 4
! 32
| colspan="32"|[[#header_rest|나머지 헤더]]
|-
|}

; 타입 {{앵커|header_type}}: ICMP 타입, [[#Control_messages|제어 메시지]] 참조.
; 코드 {{앵커|header_code}}: ICMP 서브 타입, [[#Control_messages|제어 메시지]] 참조.
; 검사 합계 {{앵커|header_checksum}}: ICMP 헤더와 데이터로부터 계산되는 오류 검사 데이터, 이 필드는 0으로 대치됨. 인터넷 검사 합계는 RFC 1071에 규정된 방식으로 사용된다.
; 나머지 헤더 {{앵커|header_rest}}: 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''

== 같이 보기 ==
* [[경로 MTU 탐색]]
* [[스머프 공격]]
== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키공용분류}}
* [http://www.iana.org/assignments/icmp-parameters IANA ICMP parameters]
* [http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml IANA protocol numbers]
* [http://support.microsoft.com/kb/195686 Explanation of ICMP Redirect Behavior]

{{전거 통제}}

[[분류:인터넷 프로토콜]]
[[분류:인터넷 표준]]
[[분류:네트워크 계층 프로토콜]]
[[분류:인터넷 계층 프로토콜]]