Internet Control Message Protocol (ICMPv4 프로토콜)

ICMP 프로토콜 설명

ICMP(Internet Control Message Protocol)는 IP 프로토콜의 오류 보고와 수정 및 호스트나 라우터의 동작 여부를 확인하기 위한 프로토콜이다. IP 패킷이 만기되어(TTL 필드가 0) 목적지에 도착하지 못할 때 라우터는 발신지에게 ICMP를 보낸다. 또한 단편화 패킷이 주어진 시간안에 도착하지 못하면 목적지에서는 발신지에게 ICMP를 보낸다. 이 외에도 목적지의 호스트의 동작 여부나 경로를 확인할 때도 ICMP를 이용한다.

참고: RFC 792, http://tools.ietf.org/html/rfc792

프로토콜 스택

0~7 8~15 16~23 24~31
Type(8) Code(8) Checksum(16)
Rest of header(가변)
Data(가변)

참고: 위키백과, http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol

Type Code 설명
0 0 Echo reply(Type 8, Echo request)
1,2   Reserved
3 0 Destination network unreachable
1 Destination host unreachable
2 Destination protocol unreachable
3 Destination port unreachable
4 Fragmentation required
5 Source route failed
6 Destination network unknown
7 Destination host unknown
8 Source host isolated
9 Network administratively prohibited
10 Host administratively prohibited
11 Network unreachable for TOS
12 Host unreachable for TOS
13 Communication administratively prohibited
14 Host Precedence Violation
15 Precedence cutoff in effect
4 0 Source quench(혼잡 제어)
5 0 Redirect Datagram for the Network
1 Redirect Datagram for the Host
2 Redirect Datagram for the TOS and Network
3 Redirect Datagram for the TOS and Host
6   Alternate Host Address
7   Reserved
8 0 Echo request(Type 0, Echo reply)
9 0 Router Advertisement
10 0 Router discovery/selection/solicitation
11 0 TTL expired in transmit
1 Fragment reassembly time exceeded
12 0 Parameter Problem(Pointer indicates the error)
1 Parameter Problem(Missing a required option)
2 Parameter Problem(Bad length)
13 0 Timestamp
14 0 Timestamp reply
15 0 Information request
16 0 Information reply
17 0 Address Mask request
18 0 Address Mask reply
19   Reserved for security
20~29   Reserved for robustness experiment
30 0 Traceroute(Information request)
31   Datagram Conversion Error
32   Mobile Host Redirect
33   Where are you(IPv6)
34   Here I Am(IPv6)
35   Mobile Registration request
36   Mobile Registration reply
37   Domain Name request
38   Domain Name reply
39   SKIP Alogorithm Discovery Protocol
40   Photuris, Security failures
41   ICMP for experimental mobility protocols such as Seamoby
42~255   Reserved
  • Echo request(Type 8)/ reply(Type 0)

code는 항상 0이어야 함

Rest of the header에 id(16), seq(16)

id는 한 쌍의 request와 reply에 값이 같음

Data Section에는 추가적인 데이터(메시지)

  • Timestamp(Type 13), Timestamp reply(Type 14)

code는 항상 0이어야 함

Rest of the header에 id(16), seq(16)

Data Section에는 요청 시간(32), 수신 시간(32), 전송 시간(32)

Timestamp에는 요청 시간을 설정하여 보낸다.

Timestamp reply에는 수신한 시간을 채운다. 응답 메시지 출발 시점을 전송시간에 채운다.

  • Destination unreacable(Type 3)

code는 0~15를 사용한다.

0 – 하드웨어 고장 등의 이유

1 – 호스트에 도달할 수 없음(하드웨어 고장일 수 있다.)

2 – 프로토콜에 도달할 수 없음(목적지 호스트가 생성)

3 – 포트에 도달할 수 없음(목적지 호스트가 생성)

4 – 단편화가 필요하지만 datagram에 DF 필드가 설정되어 있을 때

5 – 발신지 라우팅을 수행할 수 없음

6 – 목적지 네트워크가 알려져 있지 않음(라우터의 정보 부재)

7 – 목적지 호스트가 알려져 있지 않다.(존재하지만 라우터가 목적지호스트를 모름)

8 – 발신지 호스트가 고립

9 – 목적지 네트워크와 통신이 관리상의 이유로 금지

10 – 목적지 호스트와 통신이 관리상의 이유로 금지

11 – 명시한 서비스 유형에 대해 네트워크에 도달할 수 없음

12 – 명시한 서비스 유형에 대해 호스트에 도달할 수 없음

13 – 관리자가 필터를 설치하여 호스트에 도달할 수 없음

14 – 호스트 우선순위를 위반하여 호스트에 도달할 수 없음

15 – 우선순위에 밀려 호스트에 도달할 수 없음

Rest of the header는 모두 0

Data Section에는 받은 IP 헤더와 datagram의 8바이트

  • Source quench(Type 4)

code는 항상 0

Rest of the header는 모두 0

Data Section에는 받은 IP 헤더와 datagram의 8바이트

  • Redirection(Type 5)

code는 0~3

0 – 네트워크 지정 경로를 위한 재지정

1 – 호스트 지정 경로를 위한 재지정

2 – 특정한 서비스 유형에 기초한 네트워크 지정 경로를 위한 재지정

3 – 특정한 서비스 유형에 기초한 호스트 지정 경로를 위한 재지정

Rest of the header는 타겟 라우터 IP 주소

Data Section에는 받은 IP 헤더와 datagram의 8바이트

  • Router Advertisement(Type 9)  , 자신이 라우터라고 알리는 것

Rest of the header는 Advertisement count(8), Address Entry size(8), Lifetime(16)

Advertisement count – Router 정보 개수

Address Entry size – 각 라우터 주소의 정보 개수(단위 4바이트), 일반적으로 2

Lifetime – 유효 시간

Data Section에는 Router 주소 구조체(라우터 주소 4바이트, 우선순위 레벨 4바이트)

  • Router Solicitation(Type 10) , 누가 라우터인지 묻는 것

code는 항상 0,

Rest of the header는 모두 0으로 채움

  • Time exceeded(Type 11)

code 0 – TTL이 0이 되었음

code 1 – 단편화의 일부가 도착하지 않음

Rest of the header는 항상 0

Data Section에는 받은 IP 헤더와 datagram의 8바이트

  • Parameter Problem(Type 12)

code 0~2

0 – 헤더 필더 중에서 명확하지 않은 것이 있거나 빠진 것이 있다.

Rest of the header의 첫 번째 바이트는 해당 필드(바이트 오프셋)를 가리킴

1 – 옵션의 일부가 필요하지만 빠졌다. 이 때는 어디가 잘못 되었는지 알려주지 않음

2 – Length가 이상함

나머지 Rest of the header는 항상 0

Data Section에는 받은 IP 헤더와 datagram의 8바이트