✔ ICMP는 TCP/IP에서 IP 패킷을 처리할 때 발생되는 문제를 알려주는 프로토콜이다. IP에는 오로지 패킷을 목적지에 도달시키기 위한 내용들로만 구성되어 있다. 따라서 정상적으로 목적지 호스트에 도달하는 경우에는 IP에서 통신이 성공하고 종료되므로 아무런 문제가 없다. 그러나, 만일 전달해야 할 호스트가 꺼져 있거나, 선이 단절된 경우와 같은 비정상적인 경우에 이 패킷 전달을 의뢰한 출발지 호스트에 이러한 사실을 알려야하지만, IP에는 그러한 에러에 대한 처리 방법이 명시되어있지 않다. 이러한 IP의 부족한 점을 메꾸기 위하여 사용되는 것이 바로 ICMP 프로토콜이다. IP 프로토콜의 동반자라고 볼 수 있다.
-> 💡 모든 IP 라우터들은 수신된 IP 패킷을 다음 라우터로 전달하기 전에, IP 패킷 헤더를 조사하여 TTL 값을 1 만큼 뺀 후 0 이 되는지 확인한다. 만일 감소된 TTL 값이 0 이라면, 이 패킷을 버리고 송신측에게 Time Exceeded Error 라는 ICMP 에러메세지를 보내게 된다.
traceroute 명령은 time-exceed를 사용해서 구한다. 처음에 TTL를 1부터 시작해서 목적지까지 도달하도록 1씩 증가시켜서 보낸다.(1,2,3 등으로) 그렇게 했을때 TTL 1로 보낸 패킷은 다음 라우터에서 TTL이 0이 된다. 라우터는 더이상 보낼 수 없기 때문에 source에 ICMP에러 메세지를 보낸다. 이를 통해 source는 ICMP에러메세지를 보낸 라우터의 IP를 알아낸다. 같은 방법으로 다음 라우터의 IP도 알아낼 수 있고 목적지까지 가는 경로의 모든 IP를 찾을 수 있는 것이다.
💡 Error-reporting message
1.Destination unreachable
라우터가 데이터그램의 경로를 찾지 못하거나 데이터그램을 배달할 호스트를 찾지 못할 때 사용한다.
네트워크의 경우, 라우팅 테이블에 defalut gate의 대한 것이 없어 길을 찾지 못할때, 혹은 목적지의 주소가 라우팅 테이블에 없을때 보낸다.
호스트의 경우, 마지막에 있는 장치가 direct로 보내자고해서 MAC주소를 알고자 ARP를 보냈는데 일정시간동안 돌아오지 않았을때 데이터그램이 최종 목적지 시스템에 전달되지 않았다는 것을 나타낸다. 즉 최종 목적지 호스트에게 도달할 수 없을때 보낸다.2. Source quench
송신 시스템이 목적지 호스트에서 처리하기에 너무 많은 데이터를 전송하면, 목적지 시스템은 송신 시스템에 ICMP Source Quench 에러 메시지를 전송하여 전송 속도를 줄일 것을 요구한다. 송신 시스템이 전송 속도를 늦추지 않으면 일부 패킷이 혼잡으로 인하여 분실될 가능성이 높다. 이것은 송신측에 통보하는 일종의 congestion control과 flow control를 해주는 역할을 한다.
3. Time exceeded
포워딩이나 재배열 작업이 너무 오래 걸려 보고하는 장비가 데이터를 소멸시킨다는 것을 나타낸다.
- Time-to-Live Exceeded in Transit
이 에러 메시지는 IP 데이터그램이 최종 목적지에 전달되기 이전에 데이터그램의 활성화 시간 (Time-to-Live) 값이 0에 도달하였을 때 사용된다.- Fragment Reassembly Time Exceeded
이 에러 메시지는 데이터그램이 분열되었으나 목적지 시스템이 주어진 시간(Unix에서는 대부분 60초로 설정되는)안에 모든 조각을 수신하지 못했을 때 사용된다. 일반적으로 이 메시지는 어떤 조각이 전송 과정에서 분실되었으며, 목적지 시스템은 현재가지 수신한 모든조각을 소멸시킨다는 의미를 갖는다.4. Parameter problem
IP 헤더 부분에서 매개변수 등에 오류를 발견했을 경우에 송신측에 통보하는 에러메세지이다.
5. Redirection
송신측으로부터 패킷을 수신 받은 라우터가 특정 목적지로 가는 더 짧은 경로가 있음을 알리고자할 때 사용하는 에러메세지이다. 이는 동일 서브넷에 여러 라우터가 존재하고 디폴트 라우터가 잘못 설정된 경우에 사용된다.
라우터 측에서는 비효율적인 디폴트 라우터 주소를 갖는 해당 호스트에게 직접 유니캐스트(1:1) 전송을 하며 디폴트 라우터 주소를 바로 잡아준다.
💡 query message
- ICMP 에러메세지 처럼 송신측에 에러를 보고하는 역할과는 달리, 송수신 간에 양방향으로 질의-응답의 형태를 띠며, 네트워크의 상태를 요청하고 응답 받는 메세지이다.
1.Echo request(type: 8) and reply(type: 0)
에코요청과 에코응답은 고장진단의 목적으로 설계되었다. 특정 IP와 통신이 가능한지 확인하기 위함이며 네트워크 관리자와 사용자들은 이걸 이용하여 네트워크의 문제를 발견하고 서로 통신할 수 있도록 해준다. 대표적으로 ping command(TCP/IP 환경에서 상대쪽 호스트의 작동여부 및 응답시간을 측정하는 유틸리티 프로그램)가 있다.
2. Timestamp request(type: 13) and reply(type: 14)
ICMP 질의메세지가 두 시스템간에 왕복하는데 소요된 시간 또는 시간차를 파악하기 위함이다.
3. Address Mask Request(type: 17) and Reply(type: 18)
서브넷 마스크를 알기위해 사용한다.
4. ICMP Router Solicitation(type: 10) and Advertisement(type: 9)
인접 라우터 탐색하기 위해 사용한다.