[Network] ICMP

박상혁·2022년 10월 16일
0

CS

목록 보기
9/10

Internet Control Message Protocol
인터넷 제어 메세지 프로토콜

등장 배경

Source에서 Destination까지 데이터를 전송할 때 중간 라우터에서 문제가 발생하여 다음 hop으로 전송하지 못하는 경우가 있습니다.
IP는 자체적으로 오류 보고와 오류 수정기능이 없어서
수신자와 송신자 모두 해당 데이터가 잘 보내졌는지 알 수 없습니다.
Network layer 내에서 이런 기능을 지원하고자
ICMP라는 프로토콜이 등장하였습니다.


ICMP의 주요 역할

오류를 보고하기 위한 프로토콜입니다. 오류를 수정하진 않으며 단지 보고만 할 수 있습니다. 수정의 경우 상위 프로토콜에 맡기는 방식입니다.

구조

TCP/IP layer에서 Network Layer에 위치하고 있습니다.

ICMP 내부 구조


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 총 두번의 캡슐화가 진행됩니다.


Type별 세부적인 역할

크게 2가지 메세지 유형으로 나눠집니다.
각 유형마다 밑의 그림과 같이 세부적인 메세지로 나눠집니다.
8bits로 표현할 수 있어 총 256가지의 메세지 유형을 가지고 있습니다.


Error-reporting message 오류 보고 메세지

라우터 혹은 목적지 호스트가 IP 패킷을 처리하는 도중 발견하는 문제를 보고할 때 사용합니다.
Error message는 항상 최초 발신지로 전송됩니다.
또한 출발지나 도착지 입장에서 굳이 오류 보고를 받지 않아도 되기 때문에 TCP가 아닌 UDP를 통하여 전달합니다.

  • 목적지 도달 불가능
  • 발신지 억제
  • 시간 경과
  • 매개변수 문제
  • 재지정

Type 3 - Destination unreachable 목적지 도달 불가능

일반적인 오류 보고 타입이라 생각하면 됩니다.
IP 패킷이 목적지에 제대로 전달되지 않은 경우 일반적으로 라우터에게 탐지되는데, 이 때 해당 라우터가 출발지 호스트에게 보낼 때 사용합니다.
해당 타입에 대한 code도 여러가지 있습니다.

Type 4 - Source quench 발신지 억제

라우터에서 받는 패킷의 전송속도가 보내는 전송속도보다 클 경우 임시로 패킷을 버퍼에 저장하게 되는데 만일 버퍼가 다 찰 경우 그 이후에 받는 패킷은 버립니다.
이를 방지하기 위해 호스트에게 패킷을 천천히 보낼 것을 요청하는 타입입니다.

Type 5 - Redirection 재지정

좀 더 최적에 가까운 경로가 탐지되었을 경우 호스트에게 이를 알림으로써 패킷을 좀 더 최적에 가까운 경로로 보내질 수 있도록 요청, 유도하는 타입입니다.

Type 11 - Time exceeded 시간 경과

TTL이란 Time to Leave의 약자로 IP packet에 대한 생존 시간으로써 인터넷에서 IP Packet이 Rouing되며 앞으로 거쳐야 할 Router의 갯수를 표현하는 수입니다.
그림과 같이 TTL이 0이 되었을 때 해당 타입으로 message를 보내게 됩니다.
TTL 값이 0이 되어 패킷을 폐기해야 하는 상황
혹은 단편화된 패킷이 모두 도달하지 않아 재조립이 불가능한 상황일 때
출발지 호스트에게 이를 알려주는 타입입니다.

Type 12 - Parameter problem 매개변수 문제

파라미터 문제 발생 시 사용합니다.


Query message 조회 메세지

호스트, 네트워크 관리자가 라우터나 다른 호스트로부터 특정 정보 획득 시 사용합니다.

  • Echo request와 reply
  • Timestamp request와 reply
  • Address-mask request와 reply
  • Router solicitation와 advertisement

Type 0 or 8 - Echo reply or Echo request

IP노드와 네트워크 간의 통신이 가능한지를 확인하기 위해 사용합니다.
ping 프로그램이 이를 활용합니다.
ping 명령 중 하나인 tracent를 이용하여 현재 있는 위치에서 google까지의 라우터 경로를 추적해보았습니다.
이때, 이 Type 0과 8이 사용됩니다.
제 자신의 hop부터 시작해서
총 3번을 시도하여 ICMP를 보내서 몇초만에 응답하는지를 보여줍니다.
이를 Round Trip Delay라고 합니다.

Type 9 - Router advertisement

라우터에서 동적으로 생성되어 있는 라우터를 탐지하기 위해 사용됩니다.
이 경우 Data section을 사용하여 전달합니다.

Type 10 - Router solicitation

호스트에서 해당 지역에 존재하는 라우터 IP 주소를 획득하기 위해서 사용합니다.


참조

https://melonicedlatte.com/2020/12/21/215100.html
http://www.ktword.co.kr/test/view/view.php?m_temp1=1115

profile
개발 노트

0개의 댓글