14장 : 네트워크 트러블슈팅
패킷 분석
지금까지 ping, traceroute, curl 같은 도구로 네트워크 상태를 확인했습니다. 이 도구들은 연결이 되는가, 응답이 오는가를 알려주지만, 실제로 어떤 패킷이 오가는지는 보여주지 않습니다. 패킷 분석은 네트워크 통신의 블랙박스를 열어 정확히 무슨 일이 벌어지는지 확인하는 가장 강력한 진단 방법입니다.
tcpdump — 커맨드라인 패킷 캡처
tcpdump는 Linux/macOS에서 사용하는 커맨드라인 패킷 캡처 도구입니다.
# 80번 포트의 모든 트래픽 캡처
sudo tcpdump -i eth0 port 80
# 특정 호스트와의 통신만 캡처
sudo tcpdump -i eth0 host 192.168.1.100
# 캡처 내용을 파일로 저장 (Wireshark로 열기 가능)
sudo tcpdump -i eth0 -w capture.pcap port 443
# 저장된 파일 읽기
tcpdump -r capture.pcap유용한 필터 조합들이 있습니다.
# SYN 패킷만 캡처 (새 연결 시도)
sudo tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'
# SYN이지만 ACK는 아닌 패킷 (최초 연결 시도만)
sudo tcpdump -i eth0 'tcp[tcpflags] == tcp-syn'
# DNS 쿼리만 캡처
sudo tcpdump -i eth0 port 53
# 특정 서브넷의 트래픽만 캡처
sudo tcpdump -i eth0 net 10.0.0.0/24
# RST 패킷 캡처 (연결 거부/리셋)
sudo tcpdump -i eth0 'tcp[tcpflags] & tcp-rst != 0'
# 패킷 내용을 ASCII로 표시 (HTTP 디버깅)
sudo tcpdump -i eth0 -A port 80
# 패킷 내용을 헥스+ASCII로 표시
sudo tcpdump -i eth0 -X port 80Wireshark — GUI 패킷 분석
Wireshark는 세계에서 가장 널리 사용되는 패킷 분석 도구입니다.
┌───────────────────────────────────────┐
│ Frame 1: 74 bytes on wire │ ← L1: 물리
├───────────────────────────────────────┤
│ Ethernet II │ ← L2: 데이터링크
│ Src: aa:bb:cc:dd:ee:ff │
│ Dst: 11:22:33:44:55:66 │
├───────────────────────────────────────┤
│ Internet Protocol v4 │ ← L3: 네트워크
│ Src: 192.168.1.100 │
│ Dst: 93.184.216.34 │
├───────────────────────────────────────┤
│ Transmission Control Protocol │ ← L4: 전송
│ Src Port: 54321 │
│ Dst Port: 443 │
│ Flags: SYN │
├───────────────────────────────────────┤
│ [Application Data] │ ← L7: 애플리케이션
└───────────────────────────────────────┘디스플레이 필터로 원하는 패킷만 골라볼 수 있습니다.
| 필터 | 용도 |
|---|---|
http.request.method == "POST" | HTTP POST 요청만 |
tcp.flags.syn == 1 | SYN 패킷만 |
ip.addr == 192.168.1.100 | 특정 IP 관련 |
tcp.port == 443 | 443 포트 트래픽 |
dns.qry.name contains "example" | 특정 도메인 DNS |
tcp.analysis.retransmission | 재전송 패킷 |
tcp.analysis.zero_window | 수신 버퍼 가득참 |
http.response.code >= 400 | HTTP 에러 응답 |
실전 패킷 분석 예시
No. Time Source Dest Info
1 0.000 192.168.1.100 93.184.216.34 SYN Seq=0
2 0.015 93.184.216.34 192.168.1.100 SYN,ACK Seq=0 Ack=1
3 0.015 192.168.1.100 93.184.216.34 ACK Seq=1 Ack=1
↑ 연결 수립 완료
정상: SYN → SYN-ACK → ACK (3패킷)
이상: SYN만 반복 → 서버 무응답 또는 방화벽 DROP
이상: SYN → RST → 서버 포트 닫힘 (Connection Refused)HTTP 요청 추적: Wireshark에서 HTTP 요청 패킷을 우클릭하고 "Follow → TCP Stream"을 선택하면, 해당 연결의 모든 HTTP 요청과 응답을 시간순으로 볼 수 있습니다.
TLS 문제 진단: HTTPS는 암호화되어 있어 내용을 볼 수 없지만, TLS 핸드셰이크 과정은 볼 수 있습니다. Client Hello의 지원하는 암호 스위트, Server Hello의 선택된 암호 스위트, 인증서 교환 과정을 확인할 수 있습니다.
자주 만나는 문제 사례
| 증상 | tcpdump/Wireshark에서 보이는 것 | 원인 | 해결 |
|---|---|---|---|
| Connection Refused | SYN → RST | 포트에 프로세스 없음 | ss -tlnp로 확인 |
| Connection Timed Out | SYN만 반복, 응답 없음 | 방화벽 DROP | 보안그룹/iptables |
| 간헐적 느림 | 재전송 패킷 다수 | 패킷 유실 | 네트워크 경로 점검 |
| 502 Bad Gateway | 프록시→백엔드 간 RST | 백엔드 연결 실패 | 백엔드 상태 확인 |
| 느린 DNS | DNS 질의 후 수초 대기 | DNS 서버 느림 | DNS 서버 변경 |
| Zero Window | TCP Zero Window 패킷 | 수신측 처리 못함 | 앱 성능 개선 |
네트워크 트러블슈팅의 핵심은 추측하지 않고 확인하는 것입니다. 아마 방화벽 문제일 거야가 아니라, 패킷을 캡처하여 SYN이 나갔는데 응답이 없으니 방화벽이 차단하고 있다고 확인하는 것입니다. 이 교재에서 배운 계층별 지식과 진단 도구를 활용하면, 대부분의 네트워크 문제를 체계적으로 해결할 수 있습니다.