IPv4는 신뢰할 수 없고 연결이 없는 데이터그램 전송을 제공한다
IP 프로토콜은 source로부터 최종 destination까지 데이터그램을 전달하는 최상의 전송 서비스이다
그러나 오류 제어 부족과 지원 메커니즘 부족이라는 두 가지 결점이 있다
ICMPv4는 이러한 결점을 보완하도록 설계되었다.
IP 프로토콜에는 오류 보고 또는 오류 수정 메커니즘이 없다
뭔가 잘못되면 어떡해?
라우터가 최종 목적지에 라우터를 찾을 수 없거나
존속 가능 시간이 0이어서 라우터가 데이터그램을 폐기해야 한다면 어떡해?
만약 최종 destination 호스트가 미리 정해진 시간 내에 모든 조각들을 받지 못했기 때문에 데이터그램의 모든 조각들을 버려야 한다면 어떻게?
ICMP(Internet Control Message Protocol)는 위의 두 가지 결점을 보완하도록 설계되었다
ICMP 메시지
8바이트 헤더와 가변 크기 데이터 영역을 가지고 있다.
ICMP는 항상 에러 메시지를 원래 source에 보낸다
라우터가 데이터그램을 라우팅할 수 없거나 호스트가 데이터그램을 전달할 수 없는 경우, 데이터그램은 폐기되고 라우터 또는 호스트는 데이터그램을 보낸 source 호스트에게 에러 메시지를 보냄
코드가 2, 3 메시지는 destination 호스트만 만들 수 있다
다른 메시지는 라우터만 만들 수 있다
라우터는 패킷 전송을 방해하는 모든 문제를 탐지할 수는 없다
라우터가 이 에러 메시지를 보고하지 않더라도,반드시 데이터그램이 배달되었다는 것을 의미하지는 않는다
예를 들어, 데이터 그램이 이더넷 네트워크를 통해 이동한다면, 이더넷이 어떤 확인 메커니즘도 제공하지 않기 때문에 라우터가 데이터 그램이 목적지 호스트나 다음 라우터에 전달되었음을 알 수 있는 방법은 없다
flow control, congestion control 메커니즘이 IP 프로토콜에는 없다
IP 프로토콜은 무연결 프로토콜이다
데이터그램을 생성하는 source 호스트, 데이터그램을 포워딩하는 라우터 및 데이터그램을 처리하는 destination 호스트 간에는 통신이 없다
이러한 통신 부재의 결과 중 하나는 flow control 및 congestion control의 부재다
이 에러는 IP에 위에 문제 해결을 추가하기 위해 설계되었다
라우터나 호스트는 congestion으로 인해 데이터그램을 폐기할 때 데이터그램의 송신자에게 이 에러 메시지를 보낸다
이 메시지에는 두 가지 목적이 있다
첫째, 데이터그램이 폐기되었음을 소스에 알림
둘째, 경로의 어딘가에 congestion이 있고 source가 전송 프로세스를 quench해야 한다는 것을 경고
이 에러 메시지는 라우터 또는 destination 호스트의 혼잡으로 인해 데이터그램이 폐기되었음을 source에 알린다
congestion이 해소될 때까지 source는 데이터그램의 전송 속도를 늦춰야 한다
congestion으로 인해 폐기된 각 데이터그램에 대해 하나의 메시지가 전송됩니다.
라우터는 TTL 값이 0인 데이터그램을 폐기하고 source로 이 에러메시지를 보냄
설정된 시간 내에 모든 조각들을 수신하지 않는 경우, 수신된 조각들을 폐기하고 이 에러 메시지를 source로 보냄
라우터나 destination host에 의해 생성된다
데이터그램의 헤더 부분의 모호성은 데이터그램이 인터넷을 통해 이동할 때 심각한 문제를 일으킬 수 있다
만약 라우터나 destination 호스트가 데이터그램의 어떤 field에서 모호하거나 누락된 값을 발견한다면, 데이터그램을 폐기하고 파라미터 문제 메시지를 source로 다시 보낸다
코드 0
코드 1
호스트 A는 호스트 B에게 데이터그램을 보내고 싶어한다
라우터 R2는 분명히 가장 효율적인 라우팅 선택이지만, 호스트 A는 라우터 R2를 선택하지 않았다
데이터그램이 R1로 이동합니다
R1은 테이블을 참조한 후 패킷이 R2로 갔어야 했다고 한다
패킷을 R2로 보내고 동시에 호스트 A로 리디렉션 메시지를 보낸다
이제 호스트 A의 라우팅 테이블을 업데이트할 수 있다
redirection 메시지가 호스트의 테이블 수정, 갱신을 도와준다
ICMP는 일부 네트워크 문제를 진단
할 수 있다
이 작업은 쿼리 메시지를 통해 수행된다
ICMP 메시지에서 노드는 대상 노드에 의해 특정 형식으로 응답된 메시지를 보낸다
request 메시지는 호스트나 라우터로 보내진다
reply 메시지는 request를 받은 호스트나 라우터에서 보내진다
request 및 reply 메시지는 네트워크 관리자가 IP 프로토콜의 작동을 점검하는 데 사용할 수 있다.
ping 명령어를 통해 호스트에 도달하는지 확인할 수 있다
request, reply 메시지는 source와 destination사이 round trip time을 계산할 수 있다, 둘 사이 시간이 동기화 되지 않아도 가능하다
정확한 하나의 시간을 아는 경우 timestamp-request 및 timestamp-reply 메시지를 사용하여 두 컴퓨터의 두 시계를 동기화할 수 있다
디버깅을 위해 인터넷에서 사용할 수 있는 몇 가지 도구가 있다
호스트 또는 라우터가 활성 상태이고 실행 중인지 확인할 수 있다
패킷의 경로를 추적할 수 있다
디버깅에 ICMP를 사용하는 두 가지 도구, ping과 traceroute