본문 바로가기
네트워크

5.6 인터넷 제어 메시지 프로토콜(ICMP)

by 학식러 2023. 4. 8.

 

인터넷 제어 메시지 프로토콜(Internet Control Message Protocol, ICMP)은 호스트와 라우터가 서로 간에 네트워크 계층 정보를 주고받기 위해 사용된다.
가장 전형적인 사용 형태는 오류 보고다.

 

ICMP는 종종 IP의 한 부분으로 간주되지만, ICMP 메시지가 IP 데이터그램에 담겨 전송되므로 구조적으로는 IP 바로 위에 있다.

즉, ICMP 메시지도 IP 페이로드로 전송되며, 호스트가 상위 계층 프로토콜이 ICMP라고 표시된(상위 계층 프로토콜 번호가 1번인) IP 데이터그램을 받으면 ICMP로 내용을 역다중화한다.

 

ICMP 메시지는 타입(type)과 코드(code) 필드가 있고,
ICMP 메시지의 발생 원인이 된 IP 데이터그램의 헤더와 첫 8바이트를 갖는다.

(송신자가 오류를 발생시킨 패킷을 알 수 있도록 하기 위해서)

 

중요한 ICMP 메시지 타입들은 다음과 같다

 

-ping 프로그램

 

타입 8, 코드 0인 ICMP 메시지를 특정 호스트에 보낸다.

목적지 호스트는 에코 요청을 보고 나서 타입 0, 코드 0인 ICMP 에코 응답을 보낸다.

 

대부분의 TCP/IP 구현은 ping 서버를 운영체제에서 직접 지원한다.

즉, ping 서버는 별도의 프로세스가 아니다.

 

 

-출발지 억제 메시지

 

이 메시지의 원래 목적은 혼잡 제어를 수행하기 위한 것이다.

즉, 혼잡이 발생한 라우터가 호스트의 전송 속도를 늦추도록 ICMP 출발지 억제 메시지를 해당 호스트에 보낸다.

 

하지만 3장에서는 TCP가 ICMP 출발지 억제 메시지와 같은 네트워크 계층의 피드백 없이도
전달 계층에서 동작하는 자신만의 혼잡 제어 메커니즘을 갖고 있음을 알 수 있고, 이에 이 메시지는 실제로는 잘 사용되지 않는다.

 

 

-Traceroute 프로그램

 

1) 출발지와 목적지 사이의 라우터 이름과 주소를 알아내기 위해 출발지의 Traceroute는 일련의 IP 데이터그램을 목적지에 보낸다.

각각의 데이터그램은 UDP 포트 번호를 가진 UDP 세그먼트를 운반한다.

TTL 값은 첫 번째 데이터그램이 1, 두 번째는 2, 세 번째는 3, 이런 식이다.

 

2) 출발지는 각 데이터그램에 대해 타이머를 작동시킨다.

n번째 데이터그램이 n번째 라우터에 도착하면 해당 라우터는 데이터그램의 TTL이 방금 만료되었음을 알게 된다.

 

3) IP 프로토콜 규칙에 따라 라우터는 데이터그램을 폐기하고 ICMP 경고 메시지(타입 11, 코드 0)를 출발지에 보낸다.

이 경고 메시지는 라우터의 이름과 IP 주소를 포함한다.

 

4) 이 ICMP 메시지가 출발지에 도착하면, 출발지는 타이머로부터 왕복 시간(round-trip time, RTT), ICMP 메시지로부터 n번째 라우터의 주소와 이름을 획득한다.

 

 

-Traceroute 출발지는 UDP 세그먼트 전송을 언제 멈춰야 하는지 어떻게 알까?

 

1) 출발지가 자신이 보내는 각 데이터그램마다 차례로 TTL을 1씩 증가시키기 때문에
이들 데이터그램 중 하나는 결국 목적지 호스트에 도착하게 될 것이다.

 

2) 이 데이터그램은 없을 것 같은 UDP 포트 번호를 가진 UDP 세그먼트를 포함하고 있으므로,
목적지 호스트는 포트 도달 불가능 ICMP 메시지(타입 3, 코드 3)를 출발지에 보낸다.

 

3) 출발지 호스트가 이 ICMP 메시지를 받게 되면 추가적인 탐색 패킷을 보낼 필요가 없음을 알게 된다.

댓글