Wireshark 패킷 분석 — 실전 프로토콜 분석 기법
Wireshark는 네트워크 패킷을 캡처하고 분석하는 도구입니다. 네트워크 문제를 실제 패킷 레벨에서 진단할 수 있어, 트러블슈팅에서 최종 무기 역할을 합니다.
기본 사용
패킷 캡처
# CLI에서 캡처 (tcpdump)
tcpdump -i eth0 -w capture.pcap
# 특정 조건 캡처
tcpdump -i eth0 port 80 -w http.pcap
tcpdump -i eth0 host 192.168.1.10 -w target.pcap
# Wireshark GUI에서 열기
wireshark capture.pcap
디스플레이 필터
캡처된 패킷 중 원하는 것만 표시합니다.
| 필터 | 설명 |
|---|---|
tcp | TCP 패킷만 |
http | HTTP 패킷만 |
ip.addr == 10.0.0.1 | 특정 IP 관련 |
tcp.port == 443 | 특정 포트 |
tcp.flags.syn == 1 | SYN 패킷 |
tcp.analysis.retransmission | 재전송 패킷 |
http.response.code == 500 | HTTP 500 응답 |
dns.qry.name == "example.com" | DNS 쿼리 |
tcp.stream eq 5 | 특정 TCP 스트림 |
TCP 분석 기법
3-way Handshake 확인
필터: tcp.flags.syn == 1
패킷 1: SYN [Client → Server]
패킷 2: SYN, ACK [Server → Client]
패킷 3: ACK [Client → Server]
→ 정상적인 연결 수립
재전송 분석
필터: tcp.analysis.retransmission
[TCP Retransmission]: 패킷 손실로 재전송
[TCP Fast Retransmission]: 3 Dup ACK으로 빠른 재전송
[TCP Spurious Retransmission]: 불필요한 재전송 (이미 ACK 받음)
연결 종료
필터: tcp.flags.fin == 1 || tcp.flags.reset == 1
FIN → ACK → FIN → ACK: 정상 종료
RST: 비정상 종료 (서버 거부, 타임아웃 등)
HTTP 분석
필터: http
HTTP 요청/응답 페어 확인:
- 요청: GET /api/users HTTP/1.1
- 응답: HTTP/1.1 200 OK
응답 시간 측정:
요청 패킷과 응답 패킷의 시간 차이 = 서버 처리 시간
실전 트러블슈팅 시나리오
"연결이 느려요"
1. TCP 핸드셰이크 시간 확인 (SYN → SYN-ACK 시간)
2. 서버 응답 시간 확인 (요청 → 첫 응답)
3. 재전송이 있는지 확인
4. 윈도우 크기가 작아지는지 확인 (Zero Window)
"연결이 끊겨요"
1. RST 패킷이 누가 보내는지 확인
2. FIN 없이 RST면 비정상 종료
3. 타임아웃 후 RST인지, 즉시 RST인지 확인
면접 포인트
- tcpdump vs Wireshark: tcpdump는 CLI(서버에서), Wireshark는 GUI(분석에서)
- ** 캡처 필터 vs 디스플레이 필터 **: 캡처 필터는 저장 시 적용, 디스플레이 필터는 분석 시 적용
- TCP Stream Follow: 특정 연결의 전체 데이터를 재조립하여 확인
정리
Wireshark는 네트워크 트러블슈팅의 최종 도구입니다. TCP 핸드셰이크, 재전송, 윈도우 크기, HTTP 요청/응답을 패킷 레벨에서 분석할 수 있으며, 이 기술은 네트워크 엔지니어뿐 아니라 백엔드 개발자에게도 중요합니다.
댓글 로딩 중...