본문 바로가기
네트워크

ICMP

by ahoy~ 2020. 6. 10.

네트워크 계층에서 중요한 3가지 중 IP와 라우팅과 더불어 ICMP를 알아보도록 하겠습니다.

ICMP의 목적

IP 전송 실패 report

네트워크 혼잡과 같은 상황 때문에 중간에 IP datagram의 전송이 실패할 수 있습니다.
이런 에러가 반복되지 않게 해야하기 때문에 source가 이 문제상황을 알아차려야 함으로 ICMP가 쓰입니다.

네트워크 진단

ping이나 tracert를 이용해 네트워크의 상태에 대한 정보를 얻고자 할 때 사용합니다.
이 기능은 IPv4에서는 중요하지 않지만 IPv6에서는 중요해집니다.
IPv6에서는 ARP나 IGMP가 없기 때문에 이 역할을 ICMPv6가 대신하게 됩니다.

ICMP message format

ICMP 메시지 모습을 확인해봅시다.


필드 설명

  • Type: 대분류
  • Code: 소분류
  • Checksum: 비트 에러 판단

기능 별로 구분한 ICMP Type

진단을 위한 Type

에러 report를 위한 Type

source가 에러 이유를 명확히 알기 위해서 하나하나의 Type안에서도 code에 따라 여러가지로 소분류가 됩니다.

ICMP 에러 메세지의 특징

IP datagram이 죽으면 source에게 죽은 datagram의 일부가 에러 메세지에 담겨 보내집니다.
datagram이 죽더라도 source의 문제가 아닌 경우에는 보내지지 않습니다.(받아봤자 해결이 불가능하기 때문입니다.)

보내지지 않는 경우

  1. checksum error
    네트워크 링크가 불안정하기 때문
  2. multicast/broadcast address
    너무 많은 라우터들이 error report를 하여 네트워크를 점유하게 됩니다.
  3. source가 0.0.0.0일 때
    error message의 목적지가 0.0.0.0이 불가능하기 때문
  4. IP fragment의 첫번째가 아닌 경우
    TCP, UDP의 정보가 첫번째 fragment에만 들어있기 때문에
  5. ICMP의 에러
    ICMP error report가 또 다시 error를 낼 경우, recursive문제로 다시 error report를 하지 않습니다.

ICMP의 대표적인 case

Time Exceeded

Fragments중 하나 이상이 TTL=0이 되어 중간에 잃어 버렸을 때입니다.
Fragments중 하나라도 없으면 resemble이 불가능 하기 때문에 ICMP error를 보냅니다.

Path MTU discovery

이 에러 report를 일부러 사용하는 경우도 있는데 대표적인 케이스가 MTU discovery입니다.
Don't Fragment Flag를 설정하여 보내 ICMP error report를 받아 목적지 호스트까지의 링크의 최소 MTU를 구합니다.

IPv6에서의 ICMP

IPv6에서는 라우터가 Fragmentation을 하지 않는 것을 가정합니다.(라우터는 비싸고 바쁜 장비이기 때문)
그래서 Don't Fragment Flag가 애초에 존재하지 않으므로 ICMPv6의 PMTU Discovery가 필수가 됩니다.
IPv6에서는 멀티캐스트에도 ICMP error report를 하게 됩니다.
ARP를 대신해 주변 노드의 mac주소를 찾아내는 Neighbor Discovery기능도 하게됩니다.
IGMP의 역할도 대신합니다.

'네트워크' 카테고리의 다른 글

UDP  (0) 2020.06.10
OSPF  (0) 2020.06.09
BGP  (2) 2020.06.09

댓글