ICMP 프로토콜 설명
ICMP(Internet Control Message Protocol)는 IP 프로토콜의 오류 보고와 수정 및 호스트나 라우터의 동작 여부를 확인하기 위한 프로토콜이다. IP 패킷이 만기되어(TTL 필드가 0) 목적지에 도착하지 못할 때 라우터는 발신지에게 ICMP를 보낸다. 또한 단편화 패킷이 주어진 시간안에 도착하지 못하면 목적지에서는 발신지에게 ICMP를 보낸다. 이 외에도 목적지의 호스트의 동작 여부나 경로를 확인할 때도 ICMP를 이용한다.
참고: RFC 792, http://tools.ietf.org/html/rfc792
프로토콜 스택
참고: 위키백과, http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol
- 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바이트