Jerry's Log

ICMP

contents

IP(Internet Protocol)가 편지를 배달하는 "우체부" 라면, ICMP는 배달 사고나 오류를 처리하고 알려주는 "고객센터" 라고 보시면 됩니다.


1. 핵심 개념: ICMP란 무엇인가?

ICMP는 인터넷 제어 메시지 프로토콜(Internet Control Message Protocol) 의 약자입니다.

IP와 마찬가지로 네트워크 계층(Layer 3) 프로토콜입니다. 하지만 HTML, JSON, 이미지 같은 '데이터'를 실어 나르는 것이 아니라, 네트워크 자체에 대한 상태 메시지를 실어 나릅니다.

비유: 트럭(IP 패킷)이 다리를 건너다 강으로 추락했습니다. 트럭은 스스로 날아오르지 못합니다. 대신 이를 목격한 경찰관(ICMP)이 트럭 회사(출발지 IP)에 "당신의 트럭이 이 위치에서 파괴되었습니다"라는 사고 경위서를 써서 보냅니다. 이것이 ICMP입니다.


2. 구조: 어디에 위치하는가?

개발자들이 자주 헷갈리는 부분입니다. ICMP는 TCP나 UDP처럼 IP 패킷 안(Inside) 에 들어 있습니다. 하지만 계층상으로는 IP의 하위가 아니라 IP의 형제(Sibling)로 취급됩니다.

패킷 계층 구조:

[ 이더넷 헤더 | IP 헤더 | ICMP 헤더 | ICMP 데이터 ]

이것이 왜 중요한가요?


3. 주요 메시지 타입 (Type과 Code)

ICMP 헤더는 매우 단순합니다. 주로 Type(대분류)Code(상세 이유) 두 가지 필드에 의존합니다.

가장 자주 마주칠 타입들은 다음과 같습니다.

A. Type 0 & 8: Echo Request / Reply ("핑")

가장 유명한 ICMP의 용도입니다.

B. Type 3: Destination Unreachable ("반송됨")

연결에 실패했을 때 돌아오는 메시지입니다. Code를 보면 실패했는지 알 수 있습니다.

C. Type 11: Time Exceeded ("TTL 만료")

이것이 바로 Traceroute(경로 추적) 가 작동하는 비밀입니다.


4. Traceroute의 작동 원리 (개발자의 마법)

"도대체 traceroute는 거쳐 가는 모든 라우터의 IP를 어떻게 알아내는 걸까?" 궁금하셨죠? 바로 ICMP Type 11을 악용(?)하는 것입니다.

  1. 1단계: 내 컴퓨터가 TTL = 1인 패킷을 보냅니다.
    • 첫 번째 라우터가 받자마자 TTL을 0으로 만들고 패킷을 죽인 뒤, ICMP Type 11을 나에게 보냅니다.
    • 내 컴퓨터는 그 에러를 보고 기록합니다: "1번 경유지는 라우터 A구나."
  2. 2단계: 내 컴퓨터가 TTL = 2인 패킷을 보냅니다.
    • 라우터 A는 통과시킵니다(TTL=1).
    • 두 번째 라우터가 받아서 TTL을 0으로 만들고 죽인 뒤, 에러를 보냅니다.
    • 내 컴퓨터 기록: "2번 경유지는 라우터 B구나."
  3. 반복: 목적지에 도착할 때까지 숫자를 늘려가며 반복합니다.

자바 개발자를 위한 요약

references