IP 프로토콜이 비신뢰성, 비연결형 데이터그램으로 패킷을 전달하고, 목적지까지의 빠른 전송에 중점을 두고 있어, 종단 간의 신뢰성 있는 서비스를 보장 받지 못한다. 왜냐하면 IP 프로토콜은 오류 보고와 오류 수정 기능이 없으며, 호스트와 관리 질의를 위한 메커니즘이 없다.
이러한 IP 프로토콜의 단점을 보완하기 위해 사용하는 것 중 하나가 ICMP 프로토콜(인터넷 제어 메세지 프로토콜)이다. ICMP(Internet Control Message Protocol)은 네트워크 계층 내에서 IP보다 상위의 프로토콜이다.
ICMP 메세지의 기능을 크게 오류 보고와 질의 기능으로 나눌 수 있다.
오류 보고 메세지는 라우터나 목적지 호스트가 IP 패킷을 처리하는 도중 찾아내는 문제를 보고 한다. 오류 수정은 상위 계층 프로토콜에게 맡긴다.
질의 메세지는 쌍으로 발생되는데 호스트나 네트워크 관리자가 라우터나 다른 호스트로부터 특정 정보를 획득하기 위해 사용된다.
ICMP의 헤더는 TYPE, CODE, Checksum, Rest of the header(기타 헤더 정보), Data Section으로 나누어져 있는데, 각각 8비트, 8비트, 16비트, 32비트, 32비트로 이루어져 있다.
TYPE은 ICMP이 어떠한 용도로 사용되는 지를 알려 준다. CODE는 ICMP TYPE의 세부 내용을 나타내며, 목적과 용도를 보여준다. Checksum은 검사합으로 ICMP 메세지의 이상 유무를 판단한다.
오류 보고 메세지의 유형으로는 1) 목적지 도달 불가, 2) 발신지 억제, 3) 시간 경과, 4) 매개변수 문제, 5) 재지정 이 있으며, 질의 메세지의 유형으로는 1) 에코 요청과 응답, 2) 타임스탬프 요청과 응답, 3) 주소 마스크 요청과 응답, 4) 라우터 간청과 광고 가 있다.
<오류 보고 메세지>
● 목적지 도달 불가(Destination Unreachable) TYPE = 3
라우터나 호스트가 데이터그램을 전달할 수 없을 때 데이터그램을 폐기한다. 이때 라우터나 호스트는 발신지 호스트에게 목적지 도달 불가(Destination Unreachable) 메세지를 보낸다. 유형의 코드 필드는 데이터 그램을 폐기하는 이유를 나타낸다. 단 목적지 도달 불가 메세지가 오지 않았다고, 데이터그램이 성공적으로 전송되었다는 보장은 없다. (라우터가 폐기하지 않아도 전달이 안되는 경우도 있다.)
● 발신지 억제(Source quench) TYPE = 4
혼잡으로 인해 데이터그램이 폐기되면, 라투어나 호스트는 데이터그램의 송신자에게로 발신지 억제 메시지를 보낸다. 이 발신지 억제 메세지는 흐름제어 역할을 하며, 오버플로우를 방지한다.
● 시간 경과(Time Exceeded) TYPE = 11
시간경과 메세지는 다음과 같은 두 가지 경우에 생성된다.
첫번째로, 모든 데이터그램은 수명(time-to live / TTL)필드를 가지고 있으며, 해당 수명 필드는 라우터를 지날 때 마다, 필드의 값이 1씩 감소된다. TTL 필드의 값이 0이된 데이터그램을 라우터가 받으면, 라우터는 이 데이터그램을 폐기한다. 폐기 할 때 라우터는 ICMP 메세지 중 시간경과 메세지를 원발신지에 발송하는데, 이러한 메세지가 시간 경과 메세지로 유형 코드값은 0이다.
두번째로, 모든 단편이 지정된 시간내에 도착하지 않았을 경우 유형 코드 값 1의 시간 경과 메세지를 전송한다.
정리하자면, 라우터는 수명 필드의 값이 0인 데이터그램을 폐기 할경우 코드 값 0의 시간 경과 메세지를, 목적지 호스트에서 모든 단편이 지정된 시간내에 도착하지 않았을 경우 코드 값 1의 시간 경과 메세지를 발송한다.
● 매개변수 문제(Parameter Problem) TYPE = 12
라우터나 목적지 호스트가 데이터그램의 필드에서 불명확하거나 빠진 값을 발견하면 데이터그램을 폐기하고 매개변수 문제 메세지를 발신지에게 보낸다. 유형 코드 0은 헤더 필드 중에서 불명로하게 빠진 것이 있을 때, 유형 코드 1은 헤더 필드 중 옵션의 요구되는 부분이 빠졌을 경우
● 재지정 TYPE = 5
송신 측 호스트나 라우터가 다른 네트워크로 패킷을 전송 할 경우 적절한 다음 라우터의 IP주소를 알아야 한다. 이를 위해 라우터는 라우터 테이블에 적절한 다음 라우터 IP주소를 기록하는데, 이 라우터 테이블은 어떤 알고리즘에 의해 동적으로 갱신된다. 하지만 호스트는 라우터보다 수가 많아 동적으로 갱신 시에 네트워크 트래픽이 지나치게 많아진다. 그러므로 호스트는 정적 라우팅을 사용한다.
네트워크는 변화 할 수 있기 때문에, 정적 라우팅을 사용하는 호스트는 잘못된 경로의 라우터에게 패킷을 보낼 수 있다. 즉 네트워크의 변화로 기존의 가장 효율적인 경로가 변경되는 경우이다. 이 떄 라우터는 호스트의 라우팅 테이블을 갱신하기 위해 호스트에게 재지정 메세지를 전송한다. 이때 호스트에게 전달받은 패킷은 해당 라우터의 테이블을 사용하여 목적지 호스트에게 전송한다.
<질의 메세지>
● 에코 요청과 응답 TYPE = 8, 9
이 메세지는 고장 진단의 목적으로 설계되어 호스트나 라우터들이 서로 통신할 수 있는지 결정할 수 있다.
대표적인 예로 ping 명령어가 있다.
● 타임스탬프 여청과 응답 TYPE = 13, 14
호스트나 라우터 둘 사이의 IP 데이터그램이 지나가는데 필요한 왕복 시간을 결정하거나 두장치의 시계를 동기화하기 위해 타임스탬프 요청과 응답 메세지를 사용할 수 있다.
● 주소 마스크 요청과 응답 TYPE = 17, 18
호스트가 자신의 IP 주소는 알고 있지만 마스크는 모를 수 있다 이 때 마스크 값을 얻기 위해 호스트는 LAN 상의 라우터에게 주소 마스크 요청 메세지를 보낸다.
● 라우터 간청과 광고 TYPE = 10, 9
라우터가 정상적으로 동작하는 지 알기 위해 사용하는 질의 메세지이다.
호스트는 라우터 간청 메세지를 브로드 캐스트 할 수 있다. 이 요청 메세지를 라우터가 받고 브로드캐스트로 라우터 광고 메세지를 호스트들에게 전송할 수 있으며, 간청 메세지를 받지 않아도 라우터는 광고 메세지를 브로드캐스트로 전송할 수 있다.