"분명 요청을 보냈는데 응답이 없다." 로그와 추측으로 안 풀릴 때는 실제로 선로 위에 패킷이 오갔는지를 봐야 합니다. tcpdump는 그 패킷을 눈으로 보게 해 줍니다. 패킷이 나갔는지, 상대가 응답했는지만 확인해도 "내 문제냐 상대 문제냐"가 갈립니다.
1단계 — 어디서 잡을지 (인터페이스)
먼저 잡을 인터페이스를 정합니다. 모르면 전체를 봅니다.
로컬 터미널
tcpdump -D # 캡처 가능한 인터페이스 목록
tcpdump -i any # 모든 인터페이스
2단계 — 노이즈를 줄이는 필터
필터 없이 잡으면 화면이 순식간에 밀립니다. 호스트와 포트로 좁힙니다.
로컬 터미널
tcpdump -i eth0 -nn host 10.0.0.5 and port 443
-nn: 이름·포트 해석을 끔(빠르고, DNS 때문에 멈추지 않음)host: 특정 상대만port: 특정 포트만-c 50: 50개만 잡고 종료,-w out.pcap: 파일로 저장해 와이어샤크로 분석
3단계 — 핸드셰이크 읽기
TCP 3-way 핸드셰이크가 끝까지 가는지가 핵심입니다.
OUTPUT
10.0.0.9.51514 > 10.0.0.5.443: Flags [S], seq 12345 # 내 SYN 나감
10.0.0.5.443 > 10.0.0.9.51514: Flags [S.], seq 67890 # 상대 SYN-ACK
10.0.0.9.51514 > 10.0.0.5.443: Flags [.], ack 67891 # 내 ACK
[S]만 반복되고 [S.](SYN-ACK)가 안 보이면, 패킷이 상대에 닿지 못했거나 방화벽이 드롭한 것입니다. [R](RST)가 오면 상대가 그 포트를 거절한 것(서비스 다운 또는 포트 닫힘).
원인별 해석
- SYN만 나가고 응답 없음: 경로 중간 드롭 → 방화벽·보안그룹·라우팅 점검
- SYN에 RST로 응답: 상대 포트가 안 열림 → 상대 서버에서 서비스·리슨 확인
- 패킷 자체가 안 나감: tcpdump에 내 SYN조차 안 보임 → 로컬 라우팅·NAT·앱이 실제로 전송 안 함
- 핸드셰이크는 되는데 응답 느림: 재전송(retransmission)·중복 ACK 다수 → 패킷 손실 의심
체크리스트
로컬 터미널
tcpdump -D # 인터페이스 목록
tcpdump -i any -nn host <대상> and port <포트> # 좁혀서 캡처
tcpdump -i eth0 -nn 'tcp[tcpflags] & tcp-syn != 0' # SYN만 보기
tcpdump -i eth0 -nn host <대상> -w out.pcap # 파일로 저장해 분석
tcpdump로 SYN/SYN-ACK를 직접 잡아 보고 "내 문제냐 네트워크 문제냐"를 가려내는 실습은 네트워크 트랙에서 회원가입 없이 무료로 할 수 있습니다.