Internet Control Message Protocol
인터넷 제어 메세지 프로토콜
Source에서 Destination까지 데이터를 전송할 때 중간 라우터에서 문제가 발생하여 다음 hop으로 전송하지 못하는 경우가 있습니다.
IP는 자체적으로 오류 보고와 오류 수정기능이 없어서
수신자와 송신자 모두 해당 데이터가 잘 보내졌는지 알 수 없습니다.
Network layer 내에서 이런 기능을 지원하고자
ICMP라는 프로토콜이 등장하였습니다.
TCP/IP layer에서 Network Layer에 위치하고 있습니다.
Type은 8bits로 이루어져 있어 256개의 type을 정의할 수 있습니다.
Code도 8bits로 이루어져 있으며 Type에 대한 추가 메세지를 담고 있습니다.
Checksum은 ICMP header 자체가 잘못된것이 있는지 나타내고 16bits로 이루어져있습니다.
이렇게 맨 위의 3가지 정보를 담은 공간은 4bytes로 공통 부분입니다.
헤더의 나머지 부분은 각 메세지 마다 있는것도 있고 없는것도 있습니다.
Type 9의 패킷 예시를 보면 알 수 있습니다.
Data section은 해당 Type의 추가적인 정보 전달을 할 때 사용합니다.
이는 가변길이입니다.
ICMP는 자체 내부에서는 발신지의 IP 주소를 가지고 있지 않기 때문에
IP Header의 발신자 주소 정보를 빌려야합니다.
이 때문에 ICMP는 자체 header와 IP Header 총 두번의 캡슐화가 진행됩니다.
크게 2가지 메세지 유형으로 나눠집니다.
각 유형마다 밑의 그림과 같이 세부적인 메세지로 나눠집니다.
8bits로 표현할 수 있어 총 256가지의 메세지 유형을 가지고 있습니다.
라우터 혹은 목적지 호스트가 IP 패킷을 처리하는 도중 발견하는 문제를 보고할 때 사용합니다.
Error message는 항상 최초 발신지로 전송됩니다.
또한 출발지나 도착지 입장에서 굳이 오류 보고를 받지 않아도 되기 때문에 TCP가 아닌 UDP를 통하여 전달합니다.
일반적인 오류 보고 타입이라 생각하면 됩니다.
IP 패킷이 목적지에 제대로 전달되지 않은 경우 일반적으로 라우터에게 탐지되는데, 이 때 해당 라우터가 출발지 호스트에게 보낼 때 사용합니다.
해당 타입에 대한 code도 여러가지 있습니다.
라우터에서 받는 패킷의 전송속도가 보내는 전송속도보다 클 경우 임시로 패킷을 버퍼에 저장하게 되는데 만일 버퍼가 다 찰 경우 그 이후에 받는 패킷은 버립니다.
이를 방지하기 위해 호스트에게 패킷을 천천히 보낼 것을 요청하는 타입입니다.
좀 더 최적에 가까운 경로가 탐지되었을 경우 호스트에게 이를 알림으로써 패킷을 좀 더 최적에 가까운 경로로 보내질 수 있도록 요청, 유도하는 타입입니다.
TTL
이란 Time to Leave의 약자로 IP packet에 대한 생존 시간으로써 인터넷에서 IP Packet이 Rouing되며 앞으로 거쳐야 할 Router의 갯수를 표현하는 수입니다.
그림과 같이 TTL이 0이 되었을 때 해당 타입으로 message를 보내게 됩니다.
TTL 값이 0이 되어 패킷을 폐기해야 하는 상황
혹은 단편화된 패킷이 모두 도달하지 않아 재조립이 불가능한 상황일 때
출발지 호스트에게 이를 알려주는 타입입니다.
파라미터 문제 발생 시 사용합니다.
호스트, 네트워크 관리자가 라우터나 다른 호스트로부터 특정 정보 획득 시 사용합니다.
IP노드와 네트워크 간의 통신이 가능한지를 확인하기 위해 사용합니다.
ping 프로그램이 이를 활용합니다.
ping 명령 중 하나인 tracent를 이용하여 현재 있는 위치에서 google까지의 라우터 경로를 추적해보았습니다.
이때, 이 Type 0과 8이 사용됩니다.
제 자신의 hop부터 시작해서
총 3번을 시도하여 ICMP를 보내서 몇초만에 응답하는지를 보여줍니다.
이를 Round Trip Delay
라고 합니다.
라우터에서 동적으로 생성되어 있는 라우터를 탐지하기 위해 사용됩니다.
이 경우 Data section을 사용하여 전달합니다.
호스트에서 해당 지역에 존재하는 라우터 IP 주소를 획득하기 위해서 사용합니다.
https://melonicedlatte.com/2020/12/21/215100.html
http://www.ktword.co.kr/test/view/view.php?m_temp1=1115