ICMP(Internet Control Message Protocol)

 

ICMP

 

ICMP(Internet Control Message Protocol)은 IP 프로토콜 계층에서 동작하는 보조 프로토콜로, IP 자체가 갖지 못한 오류 보고나 진단 기능을 제공한다.

 

즉, IP 패킷 전송 과정에서 발생하는 문제를 원래 송신자에게 알리거나, 네트워크 상태를 점검하는 데 사용되는 프로토콜이다.

 

 

또한 단순히 에러만 전달하는 게 아니라, 호스트나 라우터가 살아있는지(ping), 경로상 어떤 라우터를 거치는지(traceroute) 등을 확인하는 데도 활용된다.

예를 들어 관리자나 다른 호스트가 네트워크상의 특정 장비(라우터나 다른 호스트)가 현재 동작 중인지, 응답 가능한지 등을 파악할 수 있다.

 

 

 

 

 

 

 

IP 중심의 네트워크 계층에서 ICMP와 IGMP는 IP를 보완·지원하는 프로토콜로 같은 층에 위치하며

ARP와 RARP는 IP 주소와 물리 주소를 연결하는 “경계” 역할을 하는 프로토콜이다.

 

 

 

IP 

네트워크 계층에서 핵심 역할을 하는 프로토콜로, 패킷을 목적지까지 라우팅하는 기능을 담당

 

ICMP (Internet Control Message Protocol)

IP 프로토콜을 보조하는 역할을 하는 프로토콜로, 오류 보고나 네트워크 상태 정보를 전달하는 데 사용.

 

IGMP (Internet Group Management Protocol)

멀티캐스트 그룹 관리에 사용되며, 호스트와 인접 라우터 사이의 멀티캐스트 그룹 가입/탈퇴를 알려주는 프로토콜. 

 

ARP (Address Resolution Protocol)와 RARP (Reverse ARP) 

IP 주소와 MAC 주소를 서로 매핑해주는 역할을 하는 프로토콜.

이들은 IP 패킷을 실제 LAN 상에서 전달하기 위해 필수적이며, 네트워크 계층과 데이터링크 계층 사이에 걸쳐서 동작하는 것으로 간주할 수 있다.

 

 

 

 

 

 ICMP 메시지가 IP 계층을 통해 캡슐화되고, 최종적으로 링크 계층 프레임 형태로 전송되는 과정이다.

 

그림을 보면 ICMP는 IP 위에서 동작한다.

ICMP는 독립적인 전달 프로토콜이 아니라 IP 프로토콜의 한 부분으로 취급된다.

즉, ICMP 메시지는 IP 데이터그램 안에 “데이터(payload)”로 실려 전송되며, IP 헤더의 Protocol 필드 값이 1로 설정되어 있으면 해당 IP 데이터그램은 ICMP 메시지를 담고 있음을 의미한다.

 

 

 

캡슐화를 위해서 우선 ICMP 메시지를 IP 헤더로 감싼 뒤 IP 패킷을 형성한다.

여기서 IP 헤더에는 상위 프로토콜 식별을 위해 Protocol 필드에 1(ICMP)이 들어간다.

 

IP 패킷은 다시 이더넷(또는 다른 링크 계층 프로토콜) 헤더와 트레일러로 감싸져 전송된다.

이더넷 헤더에는 목적지 MAC, 출발지 MAC와 CRC(오류 검출용) 등이 포함된다.

 

 

 

 

 

 

 

 

ICMP 메시지는 크게 오류 보고용(Error Reporting) 메시지와 질의(Query) 메시지로 나눌 수 있다.

 

오류 보고 메시지는 패킷 전달 과정에서 발생한 문제를 송신자에게 알리는 데 쓰이고,

질의 메시지는 네트워크 상태 파악이나 주소·시간 정보 요청처럼 관리 및 진단 목적에 사용된다.

 

 

 

 

 

ICMP 메시지는 기본적으로 8바이트의 고정 헤더와 그 뒤에 이어지는 가변 길이의 데이터 부분으로 이루어져 있다.

 

헤더의 상위 4바이트는 Type, Code, Checksum으로 채워지고, 나머지 4바이트는 상황에 따라 다른 용도로 사용된다.

 

 

 

Type 필드(1바이트)는 어떤 종류의 ICMP 메시지인지 식별한다.
예를 들어, 에러 보고 메시지인지, Echo Request/Reply인지 등을 Type 값으로 구분한다.

 

Code 필드(1바이트)는 같은 Type 내에서 보다 구체적인 상황을 나타낸다.
예를 들어, "Network unreachable", "Host unreachable" 등 세부 이유를 설명한다.

 

Checksum 필드(2바이트)는 메시지의 헤더와 데이터에 대해 오류 검사를 수행하는 값이다.
이 값을 통해 메시지가 전송 중 손상되지 않았는지 확인한다.

 

 

 

 

데이터 부분(가변 길이)은 두 경우로 나눠진다.

 

에러 보고 메시지인 경우, 문제를 일으킨 원래 IP 패킷의 헤더 일부(일반적으로 IP 헤더와 그 뒤 일부 데이터)를 포함한다. 이를 통해 수신자는 어떤 패킷 때문에 오류가 발생했는지 추적 가능하다.

 

질의(Query) 메시지인 경우, 해당 메시지 종류에 따른 추가 정보를 담는다.

 

 

 

 

 

 

에러 보고 메시지

 

 

이것은 ICMP 오류 메시지가 원본 패킷에 대한 식별 정보를 어떻게 담는지 보여주는 것이다.

 

ICMP 오류 메시지의 데이터 부분에는 문제를 일으킨 원래 IP 패킷의 IP 헤더와 그 뒤 최소 8바이트의 데이터가 포함된다.

이를 통해 오류가 발생한 패킷을 보낸 호스트는 어느 패킷에 문제가 생겼는지 파악할 수 있다.

 

즉, ICMP 오류 메시지를 받는 쪽은 이 정보(원래 IP 헤더와 일부 데이터)를 이용해 문제의 원인을 찾고, 패킷 전송 방식을 수정하거나 재전송 여부를 판단하게 된다.

 

 

 

 

 

 

ICMP 오류 메시지에 대해 알아둬야 할 몇 가지 중요한 규칙과 특징이 있다.

이 규칙들은 네트워크 혼란을 줄이고, 적절한 오류 보고를 보장하기 위해 정해진 것이다.

 

 

ICMP 오류 메시지의 데이터 부분은 원래 문제를 일으킨 IP 패킷의 헤더와 그 뒤 최소 8바이트의 데이터를 포함한다.

 

이 8바이트의 데이터는 TCP나 UDP 포트 번호, TCP 시퀀스 번호 등을 포함할 수 있다.

이 정보를 통해 상위 계층 프로토콜(TCP/UDP)은 어떤 연결이나 어떤 세션에서 오류가 발생했는지 식별하고, 적절한 대처(재전송, 연결 종료 등)를 할 수 있다.

 

 

 

 

 

 

 

오류 보고 메시지(Error Reporting Messages)에는 다음과 같은 정보들이 있다.

  • Destination Unreachable (type 3): 목적지에 도달할 수 없을 때 송신자에게 알려주는 메시지
  • Source Quench (type 4): 네트워크 혼잡 등으로 송신 속도를 줄여야 할 때 송신자에게 알리던 메시지 (현재는 잘 사용하지 않음)
  • Time Exceeded (type 11): 패킷이 라우팅 도중 TTL(Time to Live)이 소진되어 더 이상 전송할 수 없을 때, 또는 패킷 수신 실패 시 송신자에게 알려주는 메시지
  • Parameter Problem (type 12): IP 헤더 자체에 문제가 있어 패킷 처리가 불가능할 때 송신자에게 보고
  • Redirection (type 5): 더 적합한 라우터로 패킷을 보내도록 송신자에게 라우팅 경로 변경을 권유

 

 

 

 

 

 

 

 

 

 

질의 메시지(Query Messages)

 

 

네트워크 문제 진단이나 관리에 사용되는 특별한 요청/응답 형태의 메시지다.

 

  • Echo Request/Reply (type 8/0): ping 명령에 사용되는 메시지 쌍으로, 상대 호스트가 응답 가능한지 확인
    ( 특정 호스트나 라우터가 접근 가능한지(응답 가능한지)를 확인 )
  • Timestamp Request/Reply (type 13/14): 상대 호스트의 시각 정보를 요청하거나 받는 데 사용
    ( 왕복 시간(RTT) 측정 및 시계 동기화 용도 )
  • Address Mask Request/Reply (type 17/18): 서브넷 마스크 정보를 요청하거나 받을 때 사용
    ( 네트워크/호스트 영역 구분 )
  • Router Solicitation/Advertisement (type 10/9): 호스트가 인접 라우터의 주소를 알아내거나 라우터가 자신의 존재를 알릴 때 사용 ( 경로 정보를 얻어 라우팅 테이블 갱신 )

 

 

 

 

 

 

Router-Advertisement 메시지 ICMP 체크섬(Checksum)

 

 

이것은 Router-Advertisement 메시지ICMP 체크섬(Checksum) 계산 방식에 대한 설명이다.

 

상단의 "8", "0", "1", "9" 값들은 Header의 각 필드를 나타낸다. (Type, Code, 등등)

각 값들은 16비트로 변환되고, 체크섬 계산을 위해 합산된다.

 

모든 필드를 더한 결과를 반전하여 최종 체크섬 값을 계산할 수 있다.

 

 

 

 

 

 

우선, Router-Advertisement 메시지 (Type 9) 형식은 네트워크 상에서 라우터가 호스트들에게 라우팅 정보를 알리면서
라우팅 경로와 게이트웨이를 결정하는 데 사용된다.

 

이 정보는 라우터를 기본 게이트웨이로 사용할지, 그리고 그 정보가 유효한 기간 등을 알려준다.

 

이 메세지의 핵심 구성 요소는 다음과 같다.

 

  • Type: 9 (Router-Advertisement 메시지를 나타냄)
  • Code: 0 (구체적인 세부 내용이 없음)
  • Number of Addresses: 메시지에 포함된 라우터 주소의 개수
  • Address Entry Size: 라우터 주소와 선호도(Preference Level) 정보를 포함한 단위의 크기
  • Router Address: 라우터의 주소 정보
  • Preference Level: 라우터의 선호도를 나타냄
    • 0: 기본 게이트웨이로 사용할 수 있음
    • 0x80000000: 기본 게이트웨이로 사용하지 않음
  • Lifetime: 이 정보가 유효한 시간(초 단위)

 

 

 

 

다음으로, 체크섬은 ICMP 메시지의 오류 검출 메커니즘이다.

전송 도중 데이터가 손상되었는지 확인하는 데 사용된다.

 

 

위 이미지를 기반으로 설명하자면

 

 

  1. 초기화:
    • 체크섬 필드를 0으로 설정
  2. 16비트 단위로 분리:
    • 메시지를 16비트 단위(워드)로 나누어 각 워드를 2진수로 나열
  3. 합산:
    • 모든 16비트 값을 더합니다.
    • 만약 합산 중 16비트를 초과하면(캐리 발생 시), 초과된 값을 다시 더한다.
  4. 1의 보수:
    • 합산 결과에 대해 모든 비트를 반전.
    • 이 결과가 체크섬 값으로 설정

 

 

 

 

 

 

 

 

 

ICMP 프로토콜 내부 구조를 개략적으로 나타낸 것이다.

오류 보고나 네트워크 진단을 위한 메시지를 처리하는 과정을 보여주고 있다.

 

ICMP는 크게 입력 모듈(Input Module)과 출력 모듈(Output Module)로 나눠져 있다.

 

 

 

 

입력 모듈은 IP 계층에서 전달된 ICMP 패킷을 처리하여 요청 메시지에는 응답을 생성하고, 리다이렉션 메시지는 라우팅 테이블을 업데이트하며, 에러 메시지는 상위 계층이나 애플리케이션에 전달한다.

 

 

출력 모듈은 상위 계층이나 IP 계층의 요청에 따라 ICMP 패킷을 생성해 전송하되, 멀티캐스트 주소나 에러 메시지에 대한 응답 같은 특정 조건에서는 에러 메시지를 생성하지 않는다.