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

프로토콜 스택

ICMPv4 프로토콜 스택

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

ICMPv4 Type과 Code
  • 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바이트