ICMP
Internet Control Message Protocol 의 줄임말이다.
trace route를 하는 과정을 통해 ICMP 동작을 살펴본다.
원래 ICMP의 목적은 호스트나 라우터에서 error reporting 목적으로 사용되는 프로토콜이다.
(호스트나 라우터에 도달할 수 없다든가, 프로토콜이 존재하지 않는다거나)
또는 ping 프로그램에서 요청/응답을 echo 하는데 사용한다.
이 프로토콜은 3계층 프로토콜이지만, 마치 TCP 처럼 IP 위에 존재하는 프로토콜이라, ICMP 메세지는 IP 데이터그램의 데이터로 들어간다. 그래서 이때는 IP 헤더에 프로토콜을 가리키는 부분에 ICMP 정보가 들어간다.
ICMP 메세지는 다음과 같은 구조를 가진다.
Type, Code 로 구성된다.
(0, 0) 이면 ping 을 위해 사용되는 것이고, 나머지는 모두 에러 reporting 과 관련되어 사용된다.
trace route로 사용되는 예시를 볼 때는 TTL expired 와 dest port unreachable 에러를 사용한다.
그리고 ICMP 메세지에는 에러를 유발한 IP 데이터그램의 첫 8byte 데이터도 같이 보낸다.
그래서 어떤 패킷으로부터 에러가 발생했는지를 같이 알려준다.
너가 보낸 패킷 중에서 첫 8byte가 이거인 패킷이 문제를 일으켰다고 알려주는 것이다.
IPv4 기준으로는 헤더의 두번째 줄까지 정보를 보내주는 것과 같은데, 두번째 줄에 Identifier가 있었다.
소스가 지정한 Identifier를 보고 소스는 어떤 패킷이었는지 확인할 수 있다.
Traceroute
source 는 목적지로 UDP 세그먼트를 보낸다.
이때 처음에는 TTL을 1로 설정하고, 그 다음에는 TTL을 2로 설정하는식으로, TTL을 1씩 늘려가면서 보낸다.
라우터는 자신이 패킷을 받은 뒤, TTL을 1 감소시키고, TTL이 남아있다면 목적지를 향해 패킷을 포워딩해서 보낸다.
만약 TTL이 이때 0이라면 ICMP 메세지에 (type 11, code 0) 을 담아서 소스로 보낸다.
이 에러가 TTL Expired 에러다.
이때 이 ICMP 메세지에는 이를 보내는 라우터의 정보가 담겨 있어서 source 에서는 어떤 라우터를 거쳐갔는지 알 수 있다.
만약 목적지에 패킷이 도착하면 TTL = 0 일 때 에러를 내지 않는다.
그래서 애초에 요청을 보낼 때 목적지가 사용하지 않을 것 같은 포트번호로 요청을 보내고, 이때는 포트에러에 대한 에러를 받게 된다. ( dest port unreachable ) 그래서 이 정보로 source 의 정보까지 확인할 수 있다.
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
[컴퓨터 네트워크] 37. Network Layer (13) : SDN control plane (1) | 2024.06.14 |
---|---|
[컴퓨터 네트워크] 36. Network Layer (12) : inter-AS routing protocol (BGP) (0) | 2024.06.14 |
[컴퓨터 네트워크] 35. Network Layer (11) : intra-ISP routing protocol (OSPF) (0) | 2024.06.14 |
[컴퓨터 네트워크] 34. Network Layer (10) : Distance Vector (0) | 2024.06.08 |
[컴퓨터 네트워크] 33. Network Layer (9) : Link State (0) | 2024.06.08 |