IP는 확실한 전달 서비스를 제공하도록 설계되지는 않았다. ICMP메세지의 주된 기능은 통신환경에서 발생되는 다양한 문제들에 대한 피드백을 제공하는 것이다.
ICMP메세지는 IP데이타그램의 부분 자료로 보호된다. 결과적으로, 메세지는 일반 사용자 데이타를 수반하는 다른 모든 IP 데이타그램처럼 발송된다. 왜냐하면 ICMP메세지는 IP데이타그램으로 발송되기 때문이며 ICMP메세지의 송신자는 궁극적 목적지에 도달되는 것을 보증하는 것은 아니기 때문이다.
ICMP메세지가 사용되는 동안 정확성이 고려되지 않는다. 즉, 잃어버리거나 버려지지 않는다는 보증은 없는 것이다. 메세지에 관한 tracking메세지의 복합적 문제를 막기 위한, 즉 잃어버린 ICMP메세지를 보내는 ICMP메세지는 없다. 또한, ICMP들은 프레그먼트로 되지 않은 자료처리나 프레그먼트된 자료의 첫번째 프레그먼트의 처리에서 오류가 생길 때만 보내진다.
▶ ICMP 오류 메시지
가장 일반적인 ICMP의 용도는 다양한 형태의 오류 상태를 통보하는 것이다. IP 데이터그램의 전달 도중 혹은 전달 시도중에 오류나 예외적인 상태가 발생하였다고 판단하면 호스트나 라우터는 ICMP 오류 메시지를 반환한다. ICMP오류 메시지를 유발하는 몇가지 상이한 유형의 상태는 다음과 같다.
▷반향 : IP노드의 진단도구
▷목적지 미도달 : 목적지 IP 노드에 도달하지 않았다는 것을 나타내기위해 사용
▷출발지 억제 : 출발지 집중문제를 나타내기 위해 사용
▷재지정 : 대체 경로를 알리기 위해 라우터에 사용
▷시간 초과 : IP header TTL field 값의 만료를 나타내기 위해 사용
▷매개변수 문제 : IP datagram문제를 나타내기 위해 사용
▷타임 스템프 : 인터넷에서 시간을 재기 위해 사용
▷주소 마스크 : 네트워크의 서브넷 마스크 정보를 입수하기 위해 사용
인터넷이 과중한 트래픽을 겪게 되기 시작하면 전송되는 ICMP메시지의 양은 일반적으로 증가한다. ICMP 메시지가 오류 메시지 트래픽으로 인터넷을 가중시킬 가능성을 줄이기 위하여 ICMP는 오류 메시지 생성에 대하여 다음과 같은 제약을 엄수한다. 다른 ICMP 메시지의 경로배정이나 전달에 대하여는 어떠한 ICMP 메시지도 생성하지 않는다.
○멀티캐스트 프레임에 포함된 IP 데이터그램의 경로배정이나 전달상의 통보에는 어떠한 ICMP 메시지도 생성하지
않는다.
○일련의 세그먼트에 있어서 첫번째가 아닌 IP 데이터그램 세그먼트의 통보에는 어떠한 ICMP 메시지도 보내지 않는다.
▶ ICMP ENCAPSULATION
ICMP는 TCP/IP 프로토콜 체계의 인터넷 계층 중 하나이다. 그럼에도 불구하고 실제 ICMP는 IP의 사용자이다.
각 ICMP메세지는 IP데이타그램의 자료 부분으로써 캡슐화 된다.
ICMP가 구성되면 로컬 IP처리로 이동된다. IP는 IP헤더를 갖고 있는 메세지를 encapsulate하고 호스트나 라우터의 목적지까지 물리적 통신망을 통해 데이타 그램의 결과를 전송한다. IP가 ICMP메세지를 전송하기 위해 선택되는 이유는 메세지가 여러 라우터와 네트웍을 통과하고 마지막 목적지에 도달할 때 필요하기 때문이다. 그러므로 간단한 데이타 링크 레이어 프로토콜 캡슐화는 라우터를 가로질러 메세지를 전송하는데 충분하지 않다.
ICMP Encapsulation
·IP 프로토콜 헤더
문제가 발생한 IP 데이터그램과 메시지의 8바이트에 해당하는 앞 부분이 담겨집니다. 문제가 TCP나 UDP 메시지에서 시작되었다면 대응 TCP나 UDP 프로토콜 헤더 부분과 에러 메시지의 8바이트에 해당하는 앞부분이 담겨지게 됩니다. 에코의 요청이 있을 경우에는 테스트 데이터가 담겨질 수도 있습니다. ICMP 메시지는 IP, TCP 및 UDP에 의해서만 발생되며, 이미 발생한 ICMP메세지에 대한 응답으로 또다른 ICMP 메시지가 발생될 수 없습니다.
※ The Internet Control Message Protocol (ICMP)
IP는, 아직은 얘기되지 않은 'Companion Protocol(동반자규약)'을 갖는다. 이 동반자규약이 바로 ICMP(Internet Control Message Protocol)이다.
ICMP는 error메세지를 주고 받거나 다른 Host와 의사소통을 하기 위해 Kernel Networking Code에 의해 사용된다.
예로, "현재 erdos 상에 있고, telnet으로 quark 의 12345 Port에 연결하고자 하는데, quark상에는 12345 Port에 귀를 귀울이는 프로세스가 없다"고 가정해보자. 이 Port에 보내는 첫번째 TCP Packet이 quark에 도착했을 때, Network 계층은 그 Port를 관리하는 프로세스가 없음을 인식하고, "Port Unreachable(포트에도달할수없음)"이라는 ICMP Message를 즉시 erdos에 보낼 것이다.
ICMP가 이해하는 Message수는 꽤 많다. 이 Message들은 수많은 Error Condition(에러상황)을 다루는 것들인데, 그 중에 'Redirect Message(방향재설정 메세지)'라 불리는 아주 흥미로운 메세지가 하나 있다. 이 메세지는 경로배정모듈에 의해 생성된다. 즉, 어떤 Host가 더 짧은 경로가 많이 있음에도 불구하고 Gateway로서 자신을 사용하고 있는지를 탐지할 때, 경로배정모듈은 'Redirect Message'를 생성한다. 예로, 수학과 Gateway인 sophus에서 시스템 Booting 이후의 경로배정표는 불충분하기 짝이 없는 상태이다. 즉 < 수학과 Network > 및 < FDDI Backbone >에 대한 경로, 그리고 < gcc1 >( Groucho Computing Center's Gateway )을 가리키는 기본적 경로만을 포함한다. 그러므로 이러한 초기상태에서라면, 수학과 Network에서 quark로 가는 어떤 Packet들은 물리학과 Gateway인 niels가 아니라 gcc1으로 보내질 것이다. Gateway gcc1은 그러한(경로를 잘못선택한) Datagram이 도착했을 때, 이 놈이 험한 길로 접어 들었음을 알아차리고 그 Packet이 물리학과 Gateway인 niels로 향하도록 해 줄 것이다. 그와 동시에 gcc1은 sophus에 ICMP "Redirect Message"를 반환하여, gcc1보다는 niels가 보다 나은 경로임을 알려준다.
그런데, 이 방법이 꼭, 손으로 작성되는 가장 기본적경로들 외의 ' 다른 경로들을 설정해야만 하는 번거로운 작업 '을 모면하기에 아주 영리한 방법인 것처럼 보인다. 그러나 RIP 또는 ICMP Redirect Message등의 'Dynamic Routing(동적경로배정)' 개념에 의존하는 방법은 경계되고 있다. 왜냐하면, 그것이 항상 좋은 생각인 것만은 아니기 때문이다.
예로, ICMP Redirect 또는 RIP은 어떤 경로배정정보가 확실히 믿을만한 것인지를 검증하는 데 있어서 선택사항을 거의 제공하지 않는다. 이는 심술궂은 어떤 쓸모없는 놈이 전체 Network교통을 혼란상태에 빠뜨린다거나, 더 나쁜사태를 초래할 수 있도록 방치하는 것이다.
이런 이유로, Linux Networking Code의 어떤 버전은 Redirect Message를 마치 'Host경로들에 대한 유일한 Redirect인양 Network경로에 영향을 미치는 것'으로 다루기도 한다.