개발 · 컴퓨터공학 / / 2021. 11. 25. 08:57

네트워크 프로그래밍 - ICMP(Error reporting messages, Query messages)

728x90
반응형

ICMP (Internet Control Message Protocol)

ICMP는 네트워크에 문제가 생길 경우 보고하는 프로토콜이다. 

 

출발지에서 패킷을 전송하다가 더 이상 진행할 수 없는 오류가 발생하였을 때 출발지로 돌려보낸다.

IP header에는 출발지의 주소가 담겨져 있으므로 출발지로 전송할 수 있도록 설정하여 보낸다. 

ICMP message에는 error종류가 들어간다.

 

Messages

ICMP message는 종류가 다음과 같은 것들이 있다.

 

각각의 message들은 Code를 값을 통해 에러가 발생하는 경우를 분리한다. 

에러가 발생한 패킷은 original source 즉 출발지로 돌아간다. 

 

Error-reporting messages

 

Contents of data field for the error message

ICMP packet은 header와 data(IP header + bytes)부분으로 구성된다. 

ICMP data에는 datagram으로 받은 데이터의 일부가 들어간다. 패킷의 IP header와 TCP header의 8bytes즉 TCP header의 source port, destination port, sequence number 정보를 가져온다. 

 

IP header에는 발송주소와와 수신주소가 들어있고, 8bytes(TCP header 일부)에는 port number, sequence number가 들어간다. 

Sent IP datagram에서 새로히 붙는 IP header에는 어디로부터 발송주소로 보내는지 정보가 적혀있으므로 어디에서 error가 발생하였는지 알 수 있다. 

8 bytes(TCP header 일부)에는 sequence number 정보가 있으므로 몇 번째 패킷이었는지 알 수 있다.

 

즉 Sent IP datagram 전체에는 어디에서, 어떤 종류의 에러가 발생했는지, 목적지가 어디였는지, 몇 번째 패킷이었는지에 대한 정보들을 알 수 있다.

 

Destination-unreachable

destination unreachable의 code에 따른 에러 상황은 다음과 같다.

 

  • 네트워크 도달불가(Network Unreachable) : code 0 - 목적지 네트워크로 가는 경로 없음 . 
    목적지 주소가 라우팅 테이블에 없을 경우 및 디폴트 라우트가 없을 경우 
  • 호스트 도달불가(Host Unreachable) : code 1 - 최종 목적지 호스트에 도달할 수 없을 때,
     - 호스트 또는 라우터에서 생성됨 
  • 프로토콜 도달불가(Protocol Unreachable) : code 2 - 목적지 시스템에서 
    특정 프로토콜을 사용할 수 없다는 사실을 통보 
  • 포트 도달불가(Port Ureachable) : code 3 - 목적지 호스트에서 특정 포트번호가 
    사용될 수 없음을 알림 
  • 단편화 필요하지만 DF(do not fragmentation) 설정됨(Fragmentation Required but DF bit is set) : code 4 –
     IP 데이터그램이 MTU가 작은 네트워크를 통과하려면 단편화되야 하는데, 라우터는 DF 비트가 셋팅된 것을 확인하고 그냥 폐기하고 송신측에 이를 통보 
  • 목적지와의 통신이 관리적으로 금지됨 : code 13 - 어떤 이유든지 목적지가 통신을 
    원하지 않을 경우 - 예를들면, 방화벽은 운용 정책에 위배되는 데이터그램을 
    의도적으로 폐기함 . 이때, 이 오류메세지를 원천지에 보낼수도 아닐수도 있음 

위와 같은 상황들을 만나면 

위와 같이 type을 3으로 설정하고 해당하는 code를 적고 data에 IP header와 datagram에서 가져온 8 bytes를 포함하여 발송주소로 message를 보낸다.

 

Source-quench

혼잡이 생겨 패킷을 버릴 때 source(발송주소)로 알려주는 역할을 한다. 

 

Time-exceeded message

router는 패킷을 받을 때 마다 TTL(Time-To-Live)를 하나씩 감소시킨다. TTL값이 0이되면 패킷을 버린다. 여기서도 time-exceeded message로 original source(발송주소)로 message를 보낸 후 패킷을 버린다. 

code 0인 경우는 TTL이 0이 되어 패킷을 버리는 경우 보내는 message이고,

code 1인 경우는 fragmentation들이 모두 도착하지 못하고 Time-out되어 패킷을 버리는 경우 보내는 message이다. 

 

Parameter-problem message

header의 값이 허용되지 않는 값으로 변경된 경우에 detect하는 역할을 한다.

Pointer를 통해 IP header의 어느 부분이 잘못되었는지를 알려주는 message를 전송한다. 

 

Redirection concept

위 그림에서 같은 네트워크 안에서 A에서 R1을 거쳐 R2로 가는 경로가 있을 때, Redirection Message (RM)을 통해 A에게 R2로의 패킷을 R1에게 보내지 않고 바로 R2로 보내도록 경로를 변경하라고 신호를 보낸다. 

신호를 받고 A의 table에 B로 가기위한 경로가 R1에서 R2로 수정된다. 

 

Redirection message는 위와 같은 구조로 data에 포함된 기존 경로를 target router의 IP address로 변경한다.

Redirection message는 router가 host에게 보내며, 같은 네트워크 안에 있는 경우에 가능하다.

 

Query messages

이번에는 Query messages 2개에 대해서 알아보자.

 

 

Echo request or reply

host나 router에 의해서 echo-request message를 보낸다. 

echo-request message는 상대방 컴퓨터에 IP layer가 살아있고, IP 주소할당, 연결이 잘 되어있는지 갔다오며 확인하는 역할을 한다. 

 

위와 같은 echo request를 상대방에게 보낸다.

 

Timestamp request or reply

timestamp request message는 RTT를 확인하기 위해서 주로 사용한다. 

 

The traceroute program operation

taceroute는 처음에 TTL이 1인 패킷을 보내서 router를 R1까지 한 번 이동하고 TTL이 0이 되므로 그 정보를 host에게 보낸다.

다음에는 TTL이 2인 패킷을 보내서 router를 R2까지 두 번 이동하고 TTL이 0이 되어 정보를 host에게 보낸다.

이러한 방식으로 router를 통해 전달되는 경로의 정보를 모두 받아오는 방식이 traceroute이다.

 

보통은 방화벽에서 ping이나 ICMP 패킷이 나가는 것은 허용하지만 들어오는 것은 막는다. 

728x90
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유