The Internet Control Message Protocol version 4 (ICMPv4)
IPv4는 error-reporting, error-correcting 장치 없음
IP 프로토콜은 호스트와 관리 질의를 위한 장치가 부족
ICMPv4는 위의 부족을 보완하는 프로토콜
GPT : IPv4와 함께 사용되는 네트워크 계층의 보조 프로토콜로서, 주로 에러 보고와 네트워크 관련 쿼리를 처리하는 데 사용
GPT : IP(인터넷 프로토콜) 위에서 작동하는 제어 메시지 프로토콜
ICMPv4 Messages
ICMP 메시지의 종류
error-reporting 메시지
query 메시지
Error-reporting 메시지
목적지 호스트나 라우터가 IP 패킷을 처리하다 발생한 문제를 보고
GPT : IP패킷 처리 과정에서 발생하는 문제를 송신자에게 알리는 데 사용됩니다.
ex) 데이터그램이 목적지에 도달하지 못할 때 발생하는 "Destination Unreachable" 메시지나,
ex) 라우터가 데이터그램을 더 이상 전달할 수 없을 때 사용하는 "Time Exceeded" 메시지가 이에 해당합니다.
Query 메시지
쌍으로 존재(Pairs) : Request/Reply (요정/응답)
GPT : 쿼리 메시지는 주로 네트워크의 상태를 확인하거나, 특정 정보를 요청하는 데 사용됩니다
호스트나 네트워크 매니저가 라우터나 다른 호스트의 특정 정보 얻도록 해줌
노드가 인접 노드(neighbor)를 찾을 때
호스트가 자신이 있는 네트워크의 라우터를 찾을 때
라우터가 노드의 메시지를 리다이렉트(redirect) 시킬 때
ICMP(Internet Control Message Protocol) 메시지의 일반적인 형식 (Figure 19.8)
ICMP 메시지는 기본적으로 두 부분으로 구성됩니다:
메시지 헤더: 이 부분은 모든 ICMP 메시지에 공통적으로 존재하며, 다음 세 가지 필드를 포함합니다:
Type (8 bits): 메시지의 종류를 정의합니다.
예를 들어 에러를 보고하는 메시지인지, 아니면 쿼리를 요청하는 메시지인지 등을 나타냅니다.
Code (8 bits): 메시지 타입 내에서 세부적인 구분을 제공합니다.
예를 들어 'Destination Unreachable' 메시지에 대한 다양한 이유를 나타내는데 사용됩니다.
Checksum (16 bits): 메시지의 무결성을 검증하기 위한 체크섬입니다.
데이터 섹션: 메시지에 따라 다양한 정보를 담을 수 있는 섹션으로, 에러를 보고하는 메시지의 경우 추가적인 헤더 정보를 포함할 수 있으며, 쿼리 메시지의 경우에는 식별자와 시퀀스 번호와 같은 정보를 포함할 수 있습니다.
ICMP 메시지의 타입과 코드는 다양한 네트워크 상황을 나타내기 위해 사용됩니다. 일반적인 타입 및 코드 값의 예는 다음과 같습니다:
Error-reporting messages (오류 보고 메시지):
03: Destination Unreachable (목적지에 도달할 수 없음, 코드 0에서 15)
04: Source Quench (흐름 제어, 코드 0)
05: Redirection (경로 재지정, 코드 0에서 3)
11: Time Exceeded (시간 초과, 코드 0과 1)
12: Parameter Problem (파라미터 문제, 코드 0과 1)
Query messages (쿼리 메시지):
08: Echo Request and Reply (에코 요청 및 응답, 코드 0)
13, 14: Timestamp Request and Reply (타임스탬프 요청 및 응답, 코드 0)
ICMP Message
Destination Unreachable : host down
GPT : 목적지에 도달할 수 없음을 알리는 메시지입니다.
ex)호스트가 다운되었거나, 네트워크에 연결할 수 없는 경우에 전송됩니다.
Source Quench : congestion으로 packet drop
GPT : 네트워크 혼잡으로 인해 패킷이 드랍되었음을 알리는 메시지입니다.
Redirection Message : 다른 올바른 라우터의 주소 알려줌
GPT : 패킷을 보내는 데 더 적절한 라우터 주소를 소스에 알려줍니다.
Parameter Problem : 필요한 옵션이 없거나, 해석불가
GPT : 필요한 옵션이 없거나, 데이터그램이 잘못된 옵션을 포함하고 있어 해석할 수 없음을 나타냅니다
Query Message : echo/timestamp request/reply
GPT : 에코 요청/응답 또는 타임스탬프 요청/응답과 같은 쿼리 메시지입니다.
Deprecated message
GPT : 현재 사용되지 않고 ARP, DHCP 등 다른 프로토콜로 대체된 메시지입니다
Information request/reply -> ARP
Address mask request/reply -> DHCP
Router solicitation and advertisement(라우터 광고 / 탐색) -> DHCP
ICMP 오류 메시지의 데이터 필드 구성
Received Datagram
원본 IP header + 8 바이트 데이터 + Rest of IP data
오류를 발생시킨 원본 IP 데이터그램의 첫 부분을 포함하고 있으며, 여기에는 원본 IP 헤더와 그 헤더 다음의 처음 8 바이트의 데이터가 포함됩니다. 이 정보는 오류 메시지의 원인이 된 원본 패킷을 송신자가 인식하게 하기 위해 사용됩니다.
ICMP Packet
ICMP Header + 원본 IP header + 8 바이트 데이터
ICMP Header: ICMP 메시지의 헤더입니다.
Sent IP Datagram
IP Header + ICMP Packet
원본 IP 데이터그램의 첫 부분을 포함하는 ICMP 메시지가 전송됩니다. (source에게 보내야 하기 때문에 IP header가 붙는다)
Debugging Tools
인터넷에서 사용 가능한 디버깅 툴
상대 호스트나 라우터가 살아있는지 점검
패킷의 전달 경로를 추적
ICMP를 활용하는 디버깅 툴
Ping
해당 host 컴퓨터가 살아있는 지 확인
Ping 프로그램은 혹은 ICMP Echo Request 메시지를 목적지로 보내고, 메시지가 잘 돌아오면 목적지 컴퓨터가 잘 동작하고, 목적지까지의 연결에 이상이 없음을 알 수 있게 하는 프로그램이다.
Traceroute(unix/linux), tracert(win)
used to trace the route of a packet from the source to the destination
Traceroute 프로그램은 UDP(Unix family) 혹은 ICMP Echo Request(Windows, tracert.exe) 메시지를 활용하여 소스에서 목적지까지의 네트워크 구간의 상태를 검사한다. 소스는 패킷에 TTL=1로 설정하여 보낸다. 메시지를 받은 라우터는 바로 TTL을 1 감소시켜 0이 되므로 Time Exceed의 Echo Reply 메시지를 소스로 보낸다. 이 응답 메시지를 통해 첫 라우터까지의 네트워크 상태를 알 수 있다. 소스는 다시 TTL을 1 증가한 다음 두 번째 라우터로부터의 응답을 통해 두번째 라우터까지의 상태를 보고, 목적지까지 도달할 때까지 이 과정을 반복한다.
예제(1)
ping 메시지를 auniversity.edu 사이트에 보낼 때의 응답결과.
Echo 요청 메시지의 identifier 필드 값이 0부터 시작하여, 새 메시지를 보낼 때마다 하나씩 증가한다.
응답메시지는 같은 id 번호로 되돌려지고, 보낸 호스트는 왕복시간(round-trip time)을 계산한다.
요청 메시지 안에 보낼 때의 시간 정보를 넣고,
응답 메시지 수신 시, 수신시간에서 메시지에 있는 시간 정보를 빼서, 왕복시간(rtt)을 계산한다.
Figure 19.10: Example of traceroute program
TTL(Time to Live)값이 초반엔 작은 값으로 시작하여 error report(Time exceeded)가 오도록 하여 TTL 값을 점점 늘려나간다.
그러다가 나중에 목적지에 제대로 도착했다면, tracert에서는 port number를 조작하여, 없는 unknown UDP port를 보냄으로써 destination unreachable을 보낸다.
최종적으로 위 과정을 거치면서 source로부터 destination까지 어느 router들을 거치는지 파악하는 것이 가능한 것이다.
ICMP 체크섬
ICMP checksum은 전체 메시지(header and data)를 가지고 계산
예제(1)
그림 19.11은 간간한 ICMP Echo-request 메시지의 체크섬 계산 예제.
identifier 값을 1, sequence number를 9로 한 예제임.
초기 체크섬의 값을 0으로 하여, 메시지를 16비트 (2바이트)로 짤라서, 모두 더한 다음,
보수를 취하고, 이 값을 checksum 필드에 넣는다. (올림값은 무시)