인터넷 제어 프로토콜(ICMP, Internet Control Message Protocol)은 네트워킹 세계에서 진가를 인정받지 못하는 '일꾼' 중의 하나다.
원래 몇 가지 에러 상황을 보고하기 위해 설계된 ICMP 메시지는 이제 다양한 영역의 에러 보고, 피드백, 테스팅 기능을 구현하는 데 쓰인다.
ICMP 개요, 역사, 버전, 표준
- TCP/IP에서 인터네트워크 계층의 진단, 테스트, 에러 보고 기능은 인터넷 제어 메시지 프로토콜(ICMP)에 의해 수행된다.
- ICMP는 IP의 비서 역할을 한다.
- 최초 ICMP 버전인 ICMPv4는 IPv4에 쓰였고 새 버전인 ICMPv6는 IPv6에 쓰인다.
ICMP 메시지를 정의하는 ICMP 이외의 인터넷 표준
정의한 메시지 유형의 ICMP 버전 |
RFC 번호 |
이름 |
정의한 ICMP 메시지 유형 |
ICMPv4 |
950 |
Internet Standard Subnetting Procedure |
주소 마스크 요청, 주소 마스크 응답 |
|
1256 |
ICMP Router Discovery Messages |
라우터 광고, 라우터 정보 요청 |
|
1393 |
Traceroute Using an IP Option |
경로 추적 |
|
1812 |
Requirements for IP Version 4 Routers |
목적지 접근 불가 메시지의 세 가지 새로운 코드(하위 유형)을 정의함 |
ICMPv6 |
2461 |
Neighbor Discovery for IP Version 6(IPv6) |
라우터 광고, 라우터 정보 요청, 주변 정보 광고, 주변 정보 요청, 리다이렉트 |
|
2894 |
Router Renumbering for IPv6 |
라우터 주소 재지정 |
ICMP 일반 동작
- ICMP 메시지 전달 서비스
- ICMP는 다른 TCP/IP 프로토콜과는 달리 특정한 작업을 수행하지 않는다
- ICMP는 다양한 기능을 구현하는 데 쓰이는 다양한 제어 메시지를 송수신하는 방법을 정의한다
- ICMP는 일반적으로 IP 메시지 전송에 대한 피드백을 제공하는 데 쓰인다
- ICMP 에러 보고는 데이터그램 원본으로만 송신 가능
- IP 데이터그램의 문제로 인해 발생한 ICMP 에러 보고 메시지는 오직 최초 송신 장비에게만 전달될 수 있다
- IP 데이터그램의 헤더에는 오직 최초 송신 장비의 주소만 들어 있기 때문에 중간 장비는 ICMP 메시지의 수신자가 될 수 없다
ICMP 메시지 클래스, 유형, 코드
- ICMP 메시지 클래스
- 오류 메시지
- 이들 메시지는 어떤 에러가 발생했다는 것을 출발지 장비에게 알릴 때 쓰인다
- 이것은 일반적으로 어떤 행위에 의한 응답으로 생성된다
- 에러는 보통 데이터그램의 구조나 컨텐츠, 또는 데이터그램 라우팅 도중 발생한 인터네트워크상의 문제와 연관돼 있다
- 정보 제공 (또는 요청) 메시지
- 이들 메시지는 장비가 정보를 교환하고, 특정 IP 관련 기능을 구현하고, 테스트를 수행하도록 하는 데 쓰인다
- 정보 제공 메시지는 애플리케이션에 의해, 또는 다른 장비에게 정보를 주기 위해 주기적으로 생성된다
- ICMP 메시지는 문제 상황을 보고하는데 쓰이는 오류 메시지와 진단, 테스트, 기타 목적에 쓰이는 정보 제공 메시지로 나뉜다
- ICMP 메시지 유형
- ICMPv4와 ICMPv6는 각각 최대 256개의 메시지 유형이 정의될 수 있다
- 각 메시지의 헤더에 포함된 유형 필드는 ICMP 메시지의 종류를 지정한다
- ICMPv4에서 유형값과 메시지 유형에는 아무 연관 관계가 없다
- 반면 ICMPv6에서는 오류 메시지의 유형값이 0에서 127까지고, 정보 제공 메시지는 1에서 255까지의 값을 갖는다
- ICMP 메시지 코드
- ICMP는 8비트로 된 코드 필드를 통해 각 메시지 유형 내에서 좀더 세부적으로 메시지를 분류한다
- ICMP 메시지 클래스와 유형 요약
메시지 클래스 |
유형값 |
메시지 이름 |
메시지 유형 설명 요약 |
RFC 번호 |
ICMPv4 오류 메시지 |
3 |
목적지 접근 불가 |
데이터그램을 목적지로 전달할 수 없다는 것을 나타낸다. 코드값은 에러의 원인에 대한 좀더 구체적인 정보를 제공한다. |
792 |
|
4 |
송신 속도 낮춤 |
데이터그램을 너무 많이 수신하는 IP 장비가 송신 장비에게 송신율을 낮추라고 요구할 때 쓰인다. |
792 |
|
5 |
리다이렉트 |
라우터가 호스트에게 데이터그램 송신을 위한 더 좋은 경로를 알릴 수 있도록 한다. |
792 |
|
11 |
시간 초과 |
TTL 필드가 만료하여 데이터그램이 전송 중 버려질 때 송신된다. |
792 |
|
12 |
인자 문제 |
데이터그램을 전달하는 도중 사소한 문제를 나타낸다. |
792 |
ICMPv4 정보 제공 메시지(1/2) |
0 |
에코 응답 |
에코 요청 메시지에 대한 응답으로 전송된다. 연결을 테스트 하는 데 쓰인다. |
792 |
|
8 |
에코 요청 |
장비가 인터네트워크의 다른 장비와 연결성을 테스트하는 데 쓰인다. |
792 |
|
9 |
라우터 광고 |
라우터가 호스트에게 자신의 존재와 기능을 알리는 데 쓰인다. |
1256 |
|
10 |
라우터 정보 요청 |
호스트가 다른 라우터에게 라우터 광고를 요청할 때 쓰인다. |
1256 |
|
13 |
타임스탬프 요청 |
장비가 다른 장비에게 전파 시간 계산과 클럭 동기화를 위해 타임스탬프 정보를 요청할 때 쓰인다. |
792 |
|
14 |
타임스탬프 응답 |
타임스탬프 요청에 대한 응답으로 송신되며 시간 계산과 클럭 동기화 정보를 제공한다. |
792 |
|
15 |
정보 요청 |
원래 다른 장비에게 설정 정보를 요청할 때 쓰였다. 지금은 쓰이지 않는다. |
792 |
ICMPv4 정보 제공 메시지(2/2) |
16 |
정보 응답 |
정보 요청 메시지에 대한 응답으로, 설정 정보를 제공할 때 쓰였다. 지금은 쓰이지 않는다. |
792 |
|
17 |
주소 마스크 요청 |
장비에게 주소 마스크 송신을 요청할 때 쓰인다. |
950 |
|
18 |
주소 마스크 응답 |
주소 마스크 요청에 대한 응답으로, 서브넷 마스크를 담고 있다. |
950 |
|
30 |
경로 추적 |
향상된 기능의 경로 추적 유틸리티를 실험하는 데 쓰인다. |
1393 |
ICMPv6 오류 메시지 |
1 |
목적지 접근 불가 |
데이터그램을 목적지로 전달할 수 없다는 것을 나타낸다. 코드값은 그 이유에 대한 좀더 자세한 정보를 제공한다. |
2463 |
|
2 |
패킷 크기 초과 |
데이터그램이 경로의 다음 홉의 최대 전송 단위(MTU)보다 커서 더 이상 데이터그램을 전달할 수 없을 때 송신된다. 이 메시지는 IPv4가 아닌 IPv6에서만 필요하다. 왜냐하면 IPv4에서는 라우터가 크기가 큰 메시지를 단편화할 수 있지만 IPv6는 그렇게 할 수 없기 때문이다. |
2463 |
|
3 |
시간 초과 |
Hop Limit 필드가 0으로 감소되어서 데이터그램을 전달할 수 없다는 것을 나타낸다. |
2463 |
|
4 |
인자 문제 |
데이터그램을 전달하는 도중 발생한 사소한 문제를 나타낸다. |
2463 |
ICMPv6정보 제공 메시지 |
128 |
에코 요청 |
장비가 인터네트워크의 다른 장비와 연결성을 테스트하는 데 쓰인다. |
2463 |
|
129 |
에코응답 |
에코 요청 메시지에 대한 응답으로 전송된다. 연결을 테스트하는 데 쓰인다. |
2463 |
|
133 |
라우터 정보 요청 |
호스트가 다른 라우터에게 라우터 광고를 요청할 때 쓰인다. |
2461 |
|
134 |
라우터 광고 |
라우터가 로컬 네트워크의 호스트에게 자신의 존재와 기능을 알리는 데 쓰인다. |
2461 |
|
135 |
주변 정보 요청 |
장비가 다른 장비의 2계층 주소를 요청하고, 자신의 주소를 알리는 데 쓰인다. |
2461 |
|
136 |
주변 정보 광고 |
호스트에 관한 정보를 네트워크의 다른 장비에게 알리는 데 쓰인다. |
2461 |
|
137 |
리다이렉트 |
호스트가 데이터그램의 전달 방향을 네트워크의 바로 옆에 있는 호스트나 라우터로 변경하도록 한다. |
2461 |
|
138 |
라우터 주소 재지정 |
라우터 주소 재지정에 쓰이는 정보를 전달한다. |
2894 |
ICMP 메시지 생성과 처리 관습, 규칙
- ICMP 메시지 응답의 한계
- 과다한 ICMP 메시지를 네트워크로 송신하는 것을 막기 위해 언제, 어떻게 ICMP를 생성하는지에 대한 규칙이 존재한다.
- 이들 대부분은 특정 상황에 의하여 대량의 ICMP 오류 메시지가 생성되는 것을 막도록 설계됐다.
- ICMP 메시지 처리 관습
- ICMP 메시지를 수신한 장비는 그 메시지 유형이 특정한 응답을 필수적으로 요구하지 않는 한 별다른 행동을 취할 필요가 없다.
- 특히, 장비는 ICMP 오류 메시지를 수신했을 경우 특정한 작업을 반드시 할 필요는 없다.
필드이름 |
크기(바이트) |
설명 |
유형 |
1 |
ICMP 메시지 유형을 식별한다. ICMPv6의 경우 0에서 127까지의 값은 오류 메시지를, 128에서 255까지의 값은 정보 제공 메시지를 나타낸다. |
코드 |
1 |
각 ICMP 메시지 유형 내에서의 하위 유형을 식별한다. 이 필드는 크기가 1바이트이기 때문에 각 메시지 유형별로 256개의 하위 유형을 정의할 수 있다. |
체크섬 |
2 |
16비트 체크섬 필드로 IPv4의 IP 헤더 체크섬과 유사한 방법으로 계산된다. 이 필드는 전체 ICMP 멧지를 위한 에러 탐지 기능을 제공한다. ICMPv6에서는 체크섬 계산을 위해 가상의 IPv6 헤더 필드가 앞에 붙는다는 사실을 알아두자. 이것은 TCP에서의 체크섬 계산법과 유사하다. |
메시지본문/데이터 |
가변적 |
각 메시지 유형을 구현하는 데 쓰이는 구체적인 필드를 포함한다. 이것은 메시지의 유일부분이다. |
- ICMP 오류 메시지에 포함된 원본 데이터그램
- ICMPv4 오류 메시지
- 각 오류 메시지는 IP 헤더 전체와 페이로드의 처음 8 바이트를 포함한다.
- ICMPv6 오류 메시지
- 각 오류 메시지는 크기(IP 헤더 캡슐화 포함)가 최소 IPv6 MTU인 1,280바이트를 초과하지 않는 범위에서 가능한 한 많은 양의 IPv6 데이터그램을 포함한다.
- 각 ICMP 메시지는 그 메시지 유형에 유일한 데이터를 포함하지만, 모든 메시지는 일반 ICMP 메시지 포맷 구조를 갖는다. ICMP 오류 메시지는 항상 에러를 유발시킨 원본 IP 데이터그램의 일부를 메시지 본문에 포함시킨다.
- ICMP 데이터 캡슐화
- ICMP 메시지는 포매팅된 다음, 다른 여느 IP 메시지와 같이 IP 데이터그램으로 캡슐화된다.