ping이 되는데 웹이 안 된다면? traceroute에서 특정 홉부터 응답이 없다면? ICMP를 이해하면 네트워크 트러블슈팅의 첫 단계를 제대로 할 수 있습니다.


ICMP란

ICMP(Internet Control Message Protocol) 는 네트워크 장비 간 오류 보고와 진단 을 위한 프로토콜입니다. IP 프로토콜 위에서 동작하지만 전송 계층이 아닌 네트워크 계층 에 속합니다.

ICMP 메시지 흐름

데이터 전송이 아닌 제어 메시지 전달이 목적입니다.


주요 ICMP 메시지 타입

타입이름설명
0Echo Replyping 응답
3Destination Unreachable목적지 도달 불가
5Redirect더 나은 경로 알림
8Echo Requestping 요청
11Time ExceededTTL 만료

ping의 동작

PLAINTEXT
호스트 A                              호스트 B
│                                     │
│── ICMP Echo Request (Type 8) ──────→│
│                                     │
│←── ICMP Echo Reply (Type 0) ───────│
│                                     │
│  RTT = 요청 → 응답 시간 측정          │
BASH
# 기본 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) 을 활용합니다.

PLAINTEXT
원리:
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                          도착!
BASH
# Linux
traceroute google.com

# Windows
tracert google.com

# TCP 기반 (방화벽 우회)
traceroute -T -p 80 google.com

* * * 표시: 해당 라우터가 ICMP 응답을 차단하거나 TTL 만료 메시지를 보내지 않는 경우입니다.


Destination Unreachable 세부 코드

코드의미
0Network Unreachable
1Host Unreachable
3Port Unreachable
4Fragmentation Needed (DF 비트 설정 시)
13Communication 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 문제가 생기므로 주의해야 합니다.

댓글 로딩 중...