ICMP — ping, traceroute의 동작 원리
ping이 되는데 웹이 안 된다면? traceroute에서 특정 홉부터 응답이 없다면? ICMP를 이해하면 네트워크 트러블슈팅의 첫 단계를 제대로 할 수 있습니다.
ICMP란
ICMP(Internet Control Message Protocol) 는 네트워크 장비 간 오류 보고와 진단 을 위한 프로토콜입니다. IP 프로토콜 위에서 동작하지만 전송 계층이 아닌 네트워크 계층 에 속합니다.
데이터 전송이 아닌 제어 메시지 전달이 목적입니다.
주요 ICMP 메시지 타입
| 타입 | 이름 | 설명 |
|---|---|---|
| 0 | Echo Reply | ping 응답 |
| 3 | Destination Unreachable | 목적지 도달 불가 |
| 5 | Redirect | 더 나은 경로 알림 |
| 8 | Echo Request | ping 요청 |
| 11 | Time Exceeded | TTL 만료 |
ping의 동작
호스트 A 호스트 B
│ │
│── ICMP Echo Request (Type 8) ──────→│
│ │
│←── ICMP Echo Reply (Type 0) ───────│
│ │
│ RTT = 요청 → 응답 시간 측정 │
# 기본 ping
ping google.com
# 3번만 ping
ping -c 3 google.com
# 패킷 크기 지정 (MTU 테스트)
ping -s 1472 google.com # 1472 + 28(헤더) = 1500(MTU)
ping이 실패하는 경우:
- 네트워크 연결 문제
- 방화벽에서 ICMP 차단 (보안상 많이 차단함)
- 목적지 서버가 다운
traceroute의 동작
경로상의 각 라우터(홉) 를 추적합니다. TTL(Time To Live) 을 활용합니다.
원리:
1. TTL=1인 패킷 전송 → 첫 번째 라우터가 TTL 만료 → ICMP Time Exceeded 응답
2. TTL=2인 패킷 전송 → 두 번째 라우터가 TTL 만료 → ICMP Time Exceeded 응답
3. TTL=3인 패킷 전송 → ...
N. 목적지 도착 → ICMP Echo Reply 또는 Port Unreachable
호스트 → [R1] → [R2] → [R3] → 목적지
TTL=1 응답!
TTL=2 응답!
TTL=3 응답!
TTL=4 도착!
# Linux
traceroute google.com
# Windows
tracert google.com
# TCP 기반 (방화벽 우회)
traceroute -T -p 80 google.com
* * * 표시: 해당 라우터가 ICMP 응답을 차단하거나 TTL 만료 메시지를 보내지 않는 경우입니다.
Destination Unreachable 세부 코드
| 코드 | 의미 |
|---|---|
| 0 | Network Unreachable |
| 1 | Host Unreachable |
| 3 | Port Unreachable |
| 4 | Fragmentation Needed (DF 비트 설정 시) |
| 13 | Communication Administratively Prohibited (방화벽) |
핵심 포인트
- ping이 되는데 접속이 안 되는 이유: ICMP는 허용하지만 TCP(80/443) 포트가 방화벽에서 차단
- traceroute 원리: TTL을 1부터 증가시키며 ICMP Time Exceeded 응답으로 각 홉 식별
- ICMP를 차단하면 안 되는 이유: Path MTU Discovery가 동작하지 않아 큰 패킷이 전송 불가
정리
ICMP는 네트워크 진단의 기본 도구입니다. ping으로 연결 상태를 확인하고, traceroute로 경로를 추적합니다. 보안상 ICMP를 차단하는 경우가 많지만, Fragmentation Needed(코드 4)까지 차단하면 MTU 문제가 생기므로 주의해야 합니다.