Computer Science/네트워크

[컴퓨터네트워크] 03. Network Layer Protocols(2) - ICMPv4

lumana 2024. 4. 10. 23:24

Network Layer Protocols(2) - ICMPv4


ICMPv4

  • 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 필드에 넣는다. (올림값은 무시)