ICMP는 간단히 말해 IP의 부족함을 어느정도 매꿔 주는 프로토콜이라 할 수 있다.
IP의 문제점
1. 신뢰성이 없는 비연결형 데이터그램 방식 (Best Effort)
2. 오류제어 메커니즘의 부재. 오로지 폐기만 할 뿐 다른 대응을 하지 않는다.
- 목적지를 찾지 못하면 폐기
- 타임아웃(TTL==0)이 될 경우 폐기
- 재조합 타이머가 만료되면 모든 fragment 폐기
3. 라우터나 다른 호스트의 상태정보 수집 불가
ICMP의 기능
1. 오류보고 : IP가 데이터그램을 폐기할 경우 최초 발신지에게 통보 (수정은 안함)
2. 질의 : 라우터나 다른 호스트로부터 간단한 상태 정보 획득
ICMP Message Format
Type (8bit) 메세지 종류 |
Code (8bit) 오류 원인 코드 |
Checksum (16bit) 자기 자신에 대한 오류 검출 Checksum |
Rest of the header |
||
Data section |
Capsulation of ICMP Message
ICMP는 일반적으로 오류를 보고하기 위한 메시지이므로 어디서 어디로 가는 패킷에서 오류가 났는지 식별이 필요하다. 그런 정보를 새로 전달받아 구성하는 것이 아니라 폐기되는 데이터그램을 그대로 이용한다. 그 데이터그램의 head부분만 잘라서 사용하면 딱 필요한 정보만 발췌 할 수 있는것이다.
기존 IP데이터
IP header |
IP data |
앞부분만 발췌
IP header | 8 bytes | rest of IP data |
* IP data의 앞 8byte는 TCP의 포트넘버가 들어가 있는 부분이므로 이까지 같이 발췌하고 나머지는 버린다.
이게 ICMP 의 데이터 파트가 된다.
IP header | 8 bytes |
여기 ICMP의 헤더를 붙이면 완성된 ICMP 패킷이다.
ICMP header | IP header ICMP Data | 8 bytes |
Message Type
ICMP Error Report Message
메세지 이름 |
주요목적 |
Type |
Destination unreachable |
목적지 도달 불가 |
3 |
Source quench |
혼잡으로 인한 데이터그램 폐기 |
4 |
Time exceeded |
Timeout 또는 TTL == 0 |
11 |
Parameter problem |
IP 패킷이나 헤더 오류 |
12 |
Redirection |
경로 재지정 필요 |
5 |
Destination unreachable message
코드 필드엔 데이터그램을 전달 할 수 없었던 이유를 명시한다.
ex) 0 : 하드웨어 고장, 2 : 상위 프로토콜 도달 불가, 4 : 단편화 불가 (Don't fragment)
Type : 3 | Code : 0 to 15 | Checksum |
Unused (All 0) | ||
IP header and front 8 bytes of datagram data |
Source Quench Message
IP는 흐름제어 기능이 없기 때문에 발신자 쪽에서 데이터를 너무 빨리 보내면 오버플로우가 발생할 수도 있고, 이럴 경우 데이터그램을 그냥 폐기해 버린다.
ICMP는 이를 발신자에게 통보하여 송신을 억제시킨다.
ICMP의 한계)
- 어느 발신자가 혼잡을 유발하는지 알 수 없다. 따라서 엉뚱한 발신자가 희생될 수도 있다.
- 혼잡이 해결된 후 속도를 회복시키는 메커니즘이 없다
Source quench 메세지는 딱 한번만 보내진다.
=> 그 뒤로 데이터그램이 계속 날아오더라도 다시 보내지 않고 그냥 데이터그램을 폐기시켜 버린다.
Time Exceeded Message
두가지 경우가 있다.
Code = '0' 인 경우, Time to live필드가 0이 되어 데이터그램이 폐기 된 경우이다
Code = '1' 인 경우, 단편이 지정된 시간내에 도착하지 않아 재조립에 실패한 경우
Parameter Problem Message
데이터그램의 헤드에 에러가 있거나 부족한 부분이 있을 경우
Code = '0' 인 경우, 필드 중에 불명료하거나 빠진 것이 있는 경우이다.
Code = '1' 인 경우, 옵션의 요구사항이 빠져 있는 경우이다.
=> 아래 Pointer 필드에 문제가 있는 바이트의 위치가 들어간다.
Type : 12 | Code : 0 or 1 | Checksum |
Pointer | Unused (All 0) | |
IP header and front 8 bytes of datagram data |
Redirection Message
라우터가 봤을때 자신이 아닌 다른 라우터를 경유 하는게 최종 목적지로 가는데 유리 할 경우 올바른 경로를 알려 준다.
ICMP가 전달하는 메세지 중 특별한 경우이다. IP 데이터그램을 폐기시키지 않고 그냥 메세지만 전달한다.
Type : 5 | Code : 0 to 3 | Checksum |
IP address of the target router | ||
IP header and front 8 bytes of datagram data |
ICMP Query Message
Type |
메세지 이름 |
주요목적 |
8 / 0 |
Echo request / reply |
IP 프로토콜 점검, 호스트의 도달 가능성 검사 |
13 / 14 |
Timestamp request / reply |
두 호스트간 IP 데이터그램의 왕복시간 측정 |
17 / 18 |
Address mask request / reply |
네트워크 마스크를 모를 경우 라우터에 신청 (거의 안씀) |
10 / 9 |
Router solicitation / advertise |
라우터 주소와 동작 상태 체크 |
Echo Request / Reply
Type : 8 / 0 | Code : 0 | Checksum |
Identifier 어떤 Request 인지 어떤 Request 에 대한 reply 인지 | Sequence number 몇 번째 Request 인지 몇 번째 Request 에 대한 reply 인지 | |
Optional data 메시지를 포함시켜 보낼 경우 똑같은 메세지가 돌아오게 된다. |
Address Mask Request / Reply
디스크가 없는 호스트가 구동될 때 사용되는 것으로, 현재는 거의 안쓰인다
Timestamp Request / Reply
Type : 13 / 14 | Code : 0 | Checksum |
Identifier 어떤 Request 인지 어떤 Request 에 대한 reply 인지 | Sequence number 몇 번째 Request 인지 몇 번째 Request 에 대한 reply 인지 | |
Original timestamp (보내는 시간) | ||
Receive timestamp (응답 메시지에만 기록된다. 발신 메시지에선 그냥 여백) | ||
Transmit timestamp (응답 메시지에만 기록된다. 발신 메시지에선 그냥 여백) |
'IT 이론 > 네트워크&무선통신' 카테고리의 다른 글
User Datagram Protocol (UDP) (0) | 2014.05.01 |
---|---|
ICMP Structure (0) | 2014.04.25 |
Address Resolution Protocol (ARP) (0) | 2014.04.24 |
IP Protocol Structure (0) | 2014.04.24 |
IP header options (0) | 2014.04.23 |
댓글