📚 네트워크 · 패킷 분석 › 01. TCP/IP 구조 이해 — 37편
이전 글: 36. TTL과 네트워크 경로 · 다음 글: 38. TCP란 무엇인가
traceroute(Windows에서는 tracert)는 목적지까지 패킷이 지나가는 라우터를 순서대로 찾아내는 진단 도구입니다. 원리는 한 문장으로 요약됩니다.
TTL을 1, 2, 3…으로 늘려 가며 보내면, TTL이 0이 되는 라우터가 차례로 ICMP Time Exceeded를 보내 오므로 그 출발지 IP를 순서대로 기록하면 경로가 된다.
TTL이 라우터마다 1씩 줄어드는 원리는 36. TTL과 네트워크 경로, Time Exceeded(Type 11)를 포함한 ICMP 메시지 체계는 34. ICMP와 ping — 오류 보고 프로토콜 읽는 법에서 다뤘습니다. 이 글은 두 가지를 조합한 도구의 동작 방식과 결과 해석에 집중합니다.
| 구성 요소 | 역할 |
|---|---|
| 프로브(Probe) | TTL을 지정해 보내는 시험 패킷 (UDP, ICMP Echo, TCP SYN 중 하나) |
| ICMP Time Exceeded (11/0) | 중간 라우터가 "여기서 TTL이 끝났다"고 알려주는 응답 → 홉 하나 확인 |
| 목적지 도달 신호 | 방식에 따라 Port Unreachable, Echo Reply, SYN/ACK 또는 RST |
| RTT | 각 프로브의 왕복 시간 (홉마다 보통 3회 측정) |
Linux traceroute의 기본 방식(UDP)으로 203.0.113.10(문서용 예시 주소)까지 추적하는 과정입니다.
[PC 192.168.10.20]
│
│ TTL=1, UDP → 203.0.113.10:33434
↓
[R1 192.168.10.1] TTL 1→0 폐기 ──→ ICMP 11/0 (출발지 R1) ⇒ 1홉: 192.168.10.1
│
│ TTL=2, UDP → :33435 (프로브마다 포트 증가)
↓
[R1] 2→1 → [R2 198.51.100.1] 1→0 폐기 ──→ ICMP 11/0 (출발지 R2) ⇒ 2홉: 198.51.100.1
│
│ TTL=3 ...
↓
[R3] 응답 없음 (ICMP 생성 차단·제한) ──→ 시간 초과 ⇒ 3홉: * * *
│
│ TTL=4
↓
[목적지 203.0.113.10] 도착 → 닫힌 UDP 포트 ──→ ICMP 3/3 Port Unreachable
⇒ 4홉: 목적지 도달, 종료
프로브 방식에 따라 방화벽 통과 여부와 남는 흔적이 달라집니다.
| 방식 | 명령 예 | 프로브 | 목적지 도달 신호 | 특징 |
|---|---|---|---|---|
| UDP (Linux 기본) | traceroute -n 대상 | UDP, 높은 포트 | ICMP 3/3 Port Unreachable | 목적지 방화벽이 UDP를 막으면 마지막 홉이 * |
| ICMP Echo | sudo traceroute -I -n 대상 | ICMP Type 8 | Echo Reply (Type 0) | Windows tracert의 방식 |
| TCP SYN | sudo traceroute -T -p 443 -n 대상 | TCP SYN | SYN/ACK 또는 RST | 웹 서비스처럼 허용된 포트로 방화벽 뒤까지 확인할 때 |
| UDP (tracepath) | tracepath -n 대상 | UDP | Port Unreachable | root 불필요, 경로 MTU(pmtu)도 표시 |
결과를 읽을 때 자주 헷갈리는 표시입니다.
| 표시 | 의미 | 주의 |
|---|---|---|
* * * | 대기 시간 안에 응답 없음 | 그 홉이 없는 게 아니라 ICMP를 안 보내거나 막힌 것. 다음 홉이 보이면 경로는 정상 |
| 같은 홉에 IP가 여러 개 | 프로브마다 다른 경로를 탐 | 다중 경로 로드밸런싱(ECMP) 환경에서 흔함 |
| 중간 홉 RTT가 뒤 홉보다 큼 | 그 라우터가 ICMP 생성을 낮은 우선순위로 처리 | 그 구간이 실제로 느리다는 뜻이 아닐 수 있음 |
!H, !N, !X 등 | Host/Net Unreachable, 관리적 차단 등 ICMP 오류 수신 | 경로상 장비가 거부함 |
마지막까지 * | 목적지 또는 그 앞 방화벽이 프로브·응답을 차단 | 다른 방식(-I, -T)으로 교차 확인 |
또한 traceroute가 보여주는 것은 가는 방향 경로이며, Time Exceeded의 출발지는 대개 라우터의 들어온 쪽 인터페이스 IP입니다. 돌아오는 경로가 다를 수 있다는 점(비대칭 라우팅)과, MPLS 같은 구간은 홉이 드러나지 않을 수 있다는 점도 기억해 둡니다.
실습 예시 — 본인 소유 VM에서 본인이 관리하는 대상(또는 허용된 대상)으로 실행합니다.
# 설치
# Rocky Linux
sudo dnf install -y traceroute
# Ubuntu
sudo apt install -y traceroute
# 기본 UDP 방식, 이름 해석 없이(-n)
traceroute -n 203.0.113.10
# ICMP Echo 방식, TCP SYN(443) 방식 (raw 소켓이 필요해 root 권한)
sudo traceroute -I -n 203.0.113.10
sudo traceroute -T -p 443 -n 203.0.113.10
# 프로브를 캡처해 TTL 증가와 응답을 확인
sudo tcpdump -nn -v -i ens33 'icmp or (udp and dst portrange 33434-33534)'
Windows에서는 tracert -d 203.0.113.10(-d: 이름 해석 안 함)을 사용합니다.
출력 형식 예시(값은 환경마다 다름):
traceroute to 203.0.113.10 (203.0.113.10), 30 hops max, 60 byte packets
1 192.168.10.1 0.512 ms 0.470 ms 0.455 ms
2 198.51.100.1 3.102 ms 3.087 ms 3.210 ms
3 * * *
4 203.0.113.10 8.954 ms 8.901 ms 9.012 ms
해석: 1홉은 게이트웨이, 2홉은 외부 라우터, 3홉은 ICMP를 보내지 않는 라우터이며 4홉에서 목적지가 응답했습니다. 3홉이 *여도 4홉이 보이므로 경로 자체는 이어져 있습니다.
📷 [실습 화면 삽입 위치] traceroute 실행 중 tcpdump 화면 — TTL이 1, 2, 3으로 늘어나는 프로브와
time exceeded in-transit응답
| 흔적 위치 | 확인할 수 있는 것 |
|---|---|
| 방화벽 로그 | 33434~33534 범위의 UDP, TTL이 작은 프로브에 대한 ICMP Time Exceeded 송신, TCP SYN 반복 |
| IDS/IPS | traceroute 관련 시그니처(룰셋에 따라 다름), TTL이 작은 패킷의 연속 |
| 패킷 캡처 | 같은 목적지로 TTL이 1, 2, 3…으로 증가하는 패킷 묶음 |
관제자가 확인할 질문
오탐 주의: 내부 사용자의 장애 확인, 네트워크 모니터링 도구(mtr 등), CDN·서비스 사업자의 경로 측정은 정상 traceroute를 만듭니다. 33434 이상 UDP 포트 트래픽은 다른 애플리케이션도 쓸 수 있으므로 TTL 증가 패턴을 함께 확인해야 traceroute라고 판단할 수 있습니다.
tracert는 ICMP Echo, -T는 TCP SYN 방식이며 목적지 도달 신호가 각각 다릅니다.* * *는 홉이 없다는 뜻이 아니라 응답이 없다는 뜻이며, 뒤 홉이 보이면 경로는 이어져 있습니다.