네트워크 오류를 조용히 알려주는 프로토콜, Icmp
우리가 인터넷에서 ping 명령어를 사용해 어떤 서버가 살아 있는지 확인할 수 있는 이유는 바로 ICMP (Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜) 덕분이다.
ICMP는 단순해 보이지만, 네트워크의 동작과 장애 감지에 매우 핵심적인 역할을 한다.
ICMP란?
ICMP는 IP 패킷 내부에 포함되어 전송되는 제어 메시지용 프로토콜이다.
OSI 7계층 중 3계층인 네트워크 계층 (Layer 3)에서 동작하며,
오류 메시지 전송, 경로 진단, 상태 보고 등 다양한 제어 기능을 담당한다.
어떤 상황에서 쓰일까?
| 상황 | ICMP의 역할 |
| 목적지에 도달할 수 없을 때 | “Destination Unreachable” 메시지 전송 |
| 패킷이 중간에 TTL 초과로 버려졌을 때 | “Time Exceeded” 메시지 전송 |
| 연결 가능성 확인 (ping) | Echo Request / Echo Reply 사용 |
대표적인 메시지 타입
| 타입 번호 | 메시지 종류 | 설명 |
| 8 | Echo Request | ping 요청 |
| 0 | Echo Reply | ping 응답 |
| 3 | Destination Unreachable | 도달 불가 오류 |
| 11 | Time Exceeded | TTL 초과 시 발생 |
ICMP는 포트가 없다. 그럼 어떻게 구분할까?
보통 TCP나 UDP는 포트 번호로 통신 대상 애플리케이션을 구분한다.
그러나 ICMP는 포트를 사용하지 않는다.
ICMP는 IP 패킷 안의 특별한 필드인 Protocol 번호로 식별된다.
IP 헤더의 Protocol 번호란?
IPv4 헤더에는 다음과 같은 필드들이 포함되어 있는데, 그중 하나가 Protocol이다.
| 필드명 | 크기 | 설명 |
| Protocol | 8비트 | IP 패킷의 데이터 부분이 어떤 상위 계층 프로토콜인지 지정 |
이 값이 다음과 같으면?
| 값 | 의미 |
| 1 | ICMP (Internet Control Message Protocol) |
| 6 | TCP (Transmission Control Protocol) |
| 17 | UDP (User Datagram Protocol) |
즉, 운영체제는 IP 헤더의 이 필드를 보고 이 패킷은 ICMP구나 하고 인식하게 된다.
포트가 없어도 구분 가능한 이유가 여기에 있다.
실제 네트워크 장비에서는?
방화벽, IDS, 트래픽 필터 등은 이 Protocol 번호를 기반으로 ICMP 트래픽을 감지하거나 차단한다.
예를 들어, ping 요청을 막는 것은 Protocol 번호 1번 패킷을 필터링하는 것과 같다.
요약
ICMP는 네트워크 계층의 제어용 프로토콜이며, ping, traceroute 등에 사용됨
오류 상황과 네트워크 진단 메시지를 전달
포트 번호는 없지만, IP 헤더의 Protocol 필드 값 1번으로 식별됨
Layer 3(네트워크 계층)에서 동작하며, IP와 함께 인터넷의 기본 구조를 형성함