본문으로 건너뛰기

안동민 개발노트

본문 시작

패킷 분석

tcpdump와 Wireshark로 트래픽을 캡처·필터링하고 프로토콜 필드와 패킷 순서를 따라 실제 통신 장애를 분석합니다.

지금까지 ping, traceroute, curl 같은 도구로 네트워크 상태를 확인했습니다.

이 도구들은 연결이 되는가, 응답이 오는가를 알려주지만, 실제로 어떤 패킷이 오가는지는 보여주지 않습니다.

패킷 분석은 캡처된 프레임과 프로토콜 필드를 기준으로 통신 흐름을 직접 확인하는 진단 방법입니다.


tcpdump — 커맨드라인 패킷 캡처

tcpdump는 캡처 대상을 좁혀야 쓸모 있는 기록이 된다

인터페이스, host, port, TCP flag 조건을 정해 필요한 패킷만 저장하면 분석 시간이 줄어든다.

  1. 1 iface

    iface 어디서 볼지 선택 eth0, lo, any

  2. 2 host

    host 상대 IP 제한 잡음 줄이기

  3. 3 port

    port 서비스 포트 제한 443, 5432 등

  4. 4 flags

    flags SYN/RST/FIN 확인 연결 단계 구분

  5. 5 write

    write pcap 저장 Wireshark 분석

tcpdump는 Linux/macOS에서 사용하는 커맨드라인 패킷 캡처 도구입니다.

tcpdump 기본 사용
# 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

유용한 필터 조합들이 있습니다.

tcpdump 필터
# SYN 플래그가 켜진 패킷 캡처 (SYN, SYN-ACK 모두 포함)
sudo tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'

# ACK 없이 SYN만 있는 패킷 (ECN 플래그가 붙어도 최초 연결 시도에 가까움)
sudo tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'

# DNS 관련 53번 트래픽 캡처 (질의와 응답 모두 포함)
sudo tcpdump -i eth0 port 53

# UDP DNS 질의 방향만 좁혀 보기
sudo tcpdump -i eth0 'udp dst 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 80

Wireshark — GUI 패킷 분석

Wireshark는 세계에서 가장 널리 사용되는 패킷 분석 도구입니다.

tcpdump의 필터는 캡처 시점에 저장할 패킷을 줄이는 capture filter이고, Wireshark의 필터는 이미 캡처한 패킷 중 화면에 보여줄 항목을 고르는 display filter입니다.

Wireshark 디스플레이 필터는 이미 잡힌 패킷을 질문별로 좁힌다

캡처 필터가 저장 대상을 줄인다면, 디스플레이 필터는 분석 화면에서 보고 싶은 증거만 고릅니다.

  1. 잡힌 패킷

    All 잡힌 패킷 캡처 이후 데이터

  2. 대상 호스트

    ip.addr 대상 호스트 상대 좁힘

  3. 한 연결

    tcp.stream 한 연결 대화 추적

  4. 응용 질문

    http 응용 질문 요청/응답 확인

디스플레이 필터로 원하는 패킷만 골라볼 수 있습니다.

필터용도
http.request.method == "POST"HTTP POST 요청만
tcp.flags.syn == 1SYN 패킷만
ip.addr == 192.168.1.100특정 IP 관련
tcp.port == 443443 포트 트래픽
dns.qry.name contains "example"특정 도메인 DNS
tcp.analysis.retransmission재전송 패킷
tcp.analysis.zero_window수신 버퍼 가득참
http.response.code >= 400HTTP 에러 응답

실전 패킷 분석 예시

패킷 분석은 본문을 보는 일과 메타데이터를 보는 일을 구분한다

HTTP는 스트림을 따라가면 요청과 응답을 볼 수 있지만, HTTPS는 복호화 키 없이는 TLS 기록 중심으로 봅니다.

  1. MAC

    L2 MAC 같은 링크 전달

  2. IP

    L3 IP 출발지/목적지

  3. TCP/UDP

    L4 TCP/UDP 포트와 상태

  4. 본문

    Payload 본문 TLS면 내용 제한

HTTP 요청 추적: Wireshark에서 HTTP 요청 패킷을 우클릭하고 "Follow → TCP Stream"을 선택하면, 해당 연결의 HTTP 요청과 응답을 시간순으로 볼 수 있습니다.

단, HTTPS 트래픽은 복호화 키가 없으면 HTTP 본문이 아니라 TLS 레코드만 보입니다.

TLS 문제 진단: HTTPS는 암호화되어 있어 내용을 볼 수 없지만, TLS 핸드셰이크의 일부 메타데이터는 볼 수 있습니다.

Client Hello의 지원 버전과 암호 스위트, SNI(단 ECH가 없을 때), Server Hello의 선택 결과를 확인할 수 있습니다.

TLS 1.3에서는 인증서 메시지도 핸드셰이크 보호 구간에 들어가므로, 모든 인증서 내용이 항상 평문으로 보인다고 생각하면 안 됩니다.


자주 만나는 문제 사례

패킷 패턴은 장애 원인을 눈으로 확인하게 해 준다

SYN 뒤 RST, SYN 반복, 재전송, Zero Window처럼 보이는 패턴은 추측을 증거로 바꿉니다.

  1. ← SYN-ACK

    정상 수락 ← SYN-ACK 포트가 열려 있고 서버가 새 연결을 받을 수 있음

  2. ← RST

    즉시 거절 ← RST 호스트에는 도달했지만 해당 포트의 리스너가 없을 가능성

  3. SYN → SYN → SYN

    응답 없음 SYN → SYN → SYN 경로 손실·방화벽 드롭·서버 무응답을 다음 증거로 구분

증상tcpdump/Wireshark에서 보이는 것원인해결
Connection RefusedSYN → RST포트에 프로세스 없음ss -tlnp로 확인
Connection Timed OutSYN만 반복, 응답 없음방화벽 DROP보안그룹/iptables
간헐적 느림재전송 패킷 다수패킷 유실네트워크 경로 점검
502 Bad Gateway프록시→백엔드 간 RST백엔드 연결 실패백엔드 상태 확인
느린 DNSDNS 질의 후 수초 대기DNS 서버 느림DNS 서버 변경
Zero WindowTCP Zero Window 패킷수신측 처리 못함앱 성능 개선

네트워크 트러블슈팅의 핵심은 추측하지 않고 확인하는 것입니다.

아마 방화벽 문제일 거야가 아니라, 패킷을 캡처하여 SYN이 나갔는데 응답이 없으니 방화벽 DROP, 라우팅 문제, 호스트 다운, 반환 경로 문제를 순서대로 의심해야 한다고 판단하는 것입니다.

이 교재에서 배운 계층별 지식과 진단 도구를 활용하면, 대부분의 네트워크 문제를 체계적으로 해결할 수 있습니다.

패킷 분석 기록은 필터와 판단 근거를 함께 남긴다

캡처 파일만 남기면 해석이 다시 흔들리므로, 어떤 필터로 무엇을 확인했는지 같이 기록합니다.

  1. client eth0

    Where client eth0 관측 위치

  2. host + port

    Filter host + port 범위 제한

  3. SYN no ACK

    Pattern SYN no ACK 보이는 사건

  4. 중간 차단 후보

    Claim 중간 차단 후보 다음 확인

패킷 분석에서는 프로토콜 상태, 실패 응답, 관측 도구, 복구 기준을 확인합니다.

패킷 분석 보충 점검은 개인정보와 암호화 한계를 함께 본다

캡처에는 민감한 주소, 토큰, 쿠키가 들어갈 수 있고, 암호화 트래픽은 보이는 범위가 제한됩니다.

  1. 시간·IP·포트

    Allowed 시간·IP·포트 장애 분석에 필요한 최소 정보

  2. TLS 본문

    Limited TLS 본문 복호화 없이는 의미 제한

  3. 토큰·쿠키

    Sensitive 토큰·쿠키 마스킹과 권한 필요