[네트워크]ICMP

공부기록·2023년 12월 4일
0
post-thumbnail

ICMP

Internet Control Message Protocol Version 4

Network layer에는 IGMP, ICMP, IP, ARP가 존재한다. IP protocolD은 IP Header을 생성하거나 fragmentation을 진행하는데 error 감지 기능이 따로 없다. 그래서 만든 것이 ICMP이다.
Error가 발생할 경우 source에게 보고하는 기능을 한다.

TypeMessage설명
error-repoting messages
3Destination unreachable
4Source quench혼잡으로 인하여 packet이 버려진 경우
11Time-Exceeded0-ttl is zero, 1-fragmentation 조합불가
12parameter problemheader에서 문제 감지
5redirection message같은 network내에서 더 빠른 경로 재설정
Query messages
8or0echo-request, echo-reply네트워크 확인용
13or14timestamp-request, timestamp-reqlyround-trip time 계산



🏷️ ICMP 구조

위 두줄 8바이트가 ICMP 헤더이며 Data Section에는 IP 헤더와 TCP 헤더의 일부분이 들어있다.


  • Error가 발생하면 해당 datagram은 ICMP header와 source로 가는 IP header가 더해져 source에게 전송된다.

  • Sent IP datagram에 들어있는 정보는

    • IP header : 어디서 error가 발생했는가
    • ICMP header : 어떤 에러가 발생했는가
    • IP header : 원래 어디로 가려했는가
    • 8byte : 어떤 port와 seq를 가지고 있는가

    이다.


🔈 Destination-unreachable format

  • 네트워크 도달불가 : 목적지 주소가 라우팅 테이블에 없는 경우 및 디폴트 라우트가 없는 경우
  • 포트 도달불가 : 목적지 호스트에서 특정 포트가 사용될 수 없는 경우
  • 단편화가 필요하지만 DF bit가 설정되어 단편화하지 못하는 경우

🔈 Source-quench

  • 혼잡으로 인하여 packet이 버려진 경우
  • 혼잡제어와 흐름제어는 TCP에서 해결이 가능하다. IP에게는 혼잡으로 인하여 datagram이 버려졌다고 알리는 용도로 쓰인다.

🔈 Time-exceeded

  • code 0 - Time-to-live 값이 0이 되어 datagram이 버려졌을 경우
  • code 1 - destination에서 fragment가 다 도착하지 않아 조합할 수 없는 경우

🔈 parameter-problem

  • header 값이 이상이 생긴 경우
  • ICMP 헤더에 문제가 생긴 IP 헤더의 Pointer값을 담아 보낸다.

🔈 Redirection

  • 같은 네트워크 내에서 IP packet 전송시 더 빠른 경로가 존재하면 RM(Redirection Message)를 전송하여 경로를 다시 설정하게끔 한다.
  • 원래 라우팅 테이블는 점점 보강되는 것으로 redirection message를 통해서 완성된다.
  • ICMP 헤더에 바꿔야할 target router의 IP 주소가 추가된다.



📑 Echo-request and echo-reply

  • 상대 network 확인용 그리고 route set-up
  • 주로 ping 명령어와 쓰인다.
  • request는 타입8, reply는 타입0을 쓴다.
  • 헤더에는 id와 sequence number가 optional data에는 request messages가 들어간다.

📑 Timestamp-request and time-stamp-reply message

  • RTT(Round Trip Time) 측정

  • 출발시간, 받은 시간, 보낸 시간이 적힌다.

  • 비동기화상태여도 상관 없다.



traceroute program

  • 의도적으로 TTL 값을 작게 설정하여 time-exceed가 발생하도록 한다. 그러면 ICMP엔 어디서 TTL이 0이 되었는가를 알 수 있다.
$ tracerout <domain명>
  • 도달하는 곳의 IP주소와 해당 IP까지 도달하는데 걸린 시간을 3번 적는다.

0개의 댓글

관련 채용 정보