Network

tcpdump로 네트워크 문제 진단하기: SSH 연결 지연 해결 실전 가이드

Somaz 2026. 5. 5. 00:00
728x90
반응형

Overview

최근 GitHub SSH 연결이 비정상적으로 느린 문제를 겪었다. git pull을 실행하면 30초 이상 기다려야 하는 상황이었죠.

 

"네트워크가 느린가?" 하고 넘어갈 수도 있었지만, tcpdump를 사용해 정확한 원인을 찾아냈다.

이 글에서는 tcpdump의 기본 사용법부터 실전 문제 해결 사례까지 다룬다.

 

 

 

 

 

 

 

 


 

 

tcpdump란?

 

tcpdump는 네트워크 인터페이스를 통과하는 패킷을 실시간으로 캡처하고 분석하는 커맨드라인 도구이다. 네트워크 문제 진단, 보안 분석, 성능 최적화의 필수 도구이다.

 

왜 tcpdump를 사용해야 할까?

  • 정확한 진단: 추측이 아닌 실제 패킷 데이터로 문제 파악
  • 실시간 모니터링: 문제 발생 시점의 트래픽 즉시 확인
  • 가벼움: GUI 없이 서버에서도 사용 가능
  • 표준 도구: 대부분의 Unix/Linux 시스템에 기본 설치

 

 

 

기본 사용법

 

1. 기본 명령어

# 모든 인터페이스의 패킷 캡처 (root 권한 필요)
sudo tcpdump -i any

# 특정 인터페이스만 캡처
sudo tcpdump -i en0

# 캡처 개수 제한
sudo tcpdump -i any -c 10

# 중단: Ctrl+C

 

 

 

2. 필터링

 

 

호스트 필터링

# 특정 호스트
sudo tcpdump host github.com

# 특정 IP
sudo tcpdump host 20.200.245.247

# 송신만
sudo tcpdump src host 192.168.1.100

# 수신만
sudo tcpdump dst host 192.168.1.100

 

 

포트 필터링

# 특정 포트
sudo tcpdump port 22
sudo tcpdump port 80

# 포트 범위
sudo tcpdump portrange 8000-9000

# 송신 포트
sudo tcpdump src port 443

 

 

프로토콜 필터링

sudo tcpdump tcp
sudo tcpdump udp
sudo tcpdump icmp

 

 

조합 필터 (BPF - Berkeley Packet Filter)

# AND 조건
sudo tcpdump host github.com and port 22

# OR 조건
sudo tcpdump port 80 or port 443

# NOT (제외)
sudo tcpdump not host 192.168.1.1

# 복합 조건
sudo tcpdump 'host github.com and (port 22 or port 443)'

 

 

3. 출력 옵션

# verbose 모드 (더 자세한 정보)
sudo tcpdump -v
sudo tcpdump -vv
sudo tcpdump -vvv  # 최대 상세도

# 패킷 내용 출력
sudo tcpdump -X  # HEX + ASCII
sudo tcpdump -A  # ASCII만

# 타임스탬프 형식
sudo tcpdump -tttt  # 읽기 쉬운 형식

# 출력 라인 버퍼링 해제 (실시간 확인)
sudo tcpdump -l

 

 

4. 파일 저장 및 읽기

# 파일로 저장 (pcap 형식)
sudo tcpdump -w capture.pcap

# 파일에서 읽기
tcpdump -r capture.pcap

# 필터링하며 저장
sudo tcpdump -w ssh-traffic.pcap host github.com and port 22

# 파일 크기 제한 (100MB마다 새 파일)
sudo tcpdump -w capture.pcap -C 100

# 파일 개수 제한 (5개만 유지, 순환)
sudo tcpdump -w capture.pcap -C 100 -W 5

 

 

 

 

 

 


 

 

 

 

 

 

실전 활용 사례

 

 

사례 1: SSH 연결 지연 문제 진단

문제: GitHub SSH 연결이 30초 이상 소요

 

 

 

Step 1: 문제 재현하며 패킷 캡처

# 터미널 1: tcpdump 실행
sudo tcpdump -i any host github.com and port 22

# 터미널 2: SSH 연결 시도
ssh -T git@github.com

 

 

Step 2: 패킷 분석

 

 

캡처된 로그

18:48:28.709 IP 10.10.11.3.56034 > 20.200.245.247.ssh: Flags [S], seq 2418154065
18:48:28.709 IP 10.10.11.3.56034 > 20.200.245.247.ssh: SSH: SSH-2.0-OpenSSH_9.7
18:48:58.672 IP 20.200.245.247.ssh > 10.10.11.3.56034: SSH: SSH-2.0-85ba476

 

 

분석 결과

  • 18:48:28 - SSH 버전 교환 시작
  • 18:48:58 - GitHub 서버 응답 (30초 지연!)
  • TCP 연결은 정상, SSH 키 교환 단계에서 지연 발생

 

 

 

Step 3: 해결

 

 

SSH config 최적화 또는 HTTPS로 전환

# 방법 1: SSH config 최적화
vi ~/.ssh/config
# KexAlgorithms curve25519-sha256 추가

# 방법 2: HTTPS로 전환 (즉시 해결)
git remote set-url origin https://github.com/user/repo.git

 

 

 

 

사례 2: 특정 서비스 연결 확인

# 웹 서버 연결 확인
sudo tcpdump -i any 'host example.com and (port 80 or port 443)'

# DNS 쿼리 확인
sudo tcpdump -i any port 53

# 데이터베이스 연결 확인
sudo tcpdump host db-server and port 3306

 

 

사례 3: TCP 3-way Handshake 확인

 

 

연결 수립 과정 모니터링

sudo tcpdump -i any 'tcp[tcpflags] & (tcp-syn|tcp-ack|tcp-fin) != 0'

 

 

정상 연결

SYN    → 클라이언트가 연결 요청
SYN-ACK → 서버가 수락
ACK    → 클라이언트가 확인

 

 

사례 4: 느린 네트워크 구간 찾기

# 특정 호스트와의 모든 트래픽 캡처 (타임스탬프 포함)
sudo tcpdump -tttt -i any host api.example.com

# 응답 시간 측정
# SYN 전송 시각과 SYN-ACK 수신 시각 차이 확인

 

 

 

 

 


 

 

 

 

 

고급 활용 팁

 

 

1. TCP 플래그 필터링

# SYN 패킷만
sudo tcpdump 'tcp[tcpflags] & tcp-syn != 0'

# RST (연결 거부) 패킷
sudo tcpdump 'tcp[tcpflags] & tcp-rst != 0'

# FIN (연결 종료) 패킷
sudo tcpdump 'tcp[tcpflags] & tcp-fin != 0'

 

 

2. 패킷 크기 필터

# 큰 패킷만 (1000바이트 이상)
sudo tcpdump 'ip[2:2] > 1000'

# 작은 패킷만
sudo tcpdump 'ip[2:2] < 100'

 

 

3. 네트워크 대역 필터

# 특정 서브넷
sudo tcpdump net 192.168.1.0/24

# 서브넷 제외
sudo tcpdump not net 10.0.0.0/8

 

 

4. 실시간 분석과 파일 저장 동시에

# tee를 활용한 동시 출력
sudo tcpdump -i any -l host github.com | tee capture.log

 

 

 

 

 

 


 

 

 

 

 

 

트러블슈팅 체크리스트

  • 네트워크 문제 발생 시

 

 

 

1단계: 연결 확인

# 패킷이 전송되는가?
sudo tcpdump -c 10 host TARGET_HOST

 

 

2단계: 프로토콜 확인

# 어떤 프로토콜을 사용하는가?
sudo tcpdump -i any host TARGET_HOST

 

 

3단계: 응답 시간 측정

# SYN → SYN-ACK 시간 차이 확인
sudo tcpdump -tttt host TARGET_HOST and port TARGET_PORT

 

 

4단계: 에러 패킷 확인

# RST, FIN 등 비정상 종료 패킷
sudo tcpdump 'tcp[tcpflags] & (tcp-rst|tcp-fin) != 0'

 

 

5단계: 패킷 내용 분석

# 실제 데이터 확인
sudo tcpdump -X -s 0 host TARGET_HOST

 

 

 

 

 

tcpdump vs Wireshark

특징 tcpdump Wireshark
인터페이스 CLI GUI
사용 환경 서버, 원격 데스크톱
실시간 분석 ⭐⭐⭐⭐⭐ ⭐⭐⭐
상세 분석 ⭐⭐⭐ ⭐⭐⭐⭐⭐
리소스 사용 낮음 높음

 

 

 

조합 사용: tcpdump로 캡처 → Wireshark로 상세 분석

# tcpdump로 캡처
sudo tcpdump -w capture.pcap

# Wireshark로 열기
wireshark capture.pcap

 

 

 

 

 

 


 

 

 

 

 

주의사항

 

 

1. 권한

tcpdump는 root 권한이 필요하다.

# sudoers 설정으로 특정 사용자 허용 가능
sudo visudo
# username ALL=(ALL) NOPASSWD: /usr/sbin/tcpdump

 

 

2. 개인정보 보호

캡처된 패킷에는 민감한 정보가 포함될 수 있다.

  • 평문 비밀번호 (HTTP, FTP 등)
  • 쿠키, 세션 토큰
  • API 키

암호화되지 않은 프로토콜 사용 시 주의!

 

 

3. 성능 영향

프로덕션 환경에서는

  • 필터를 정확히 지정
  • 불필요한 패킷 캡처 최소화
  • 파일 저장 시 디스크 공간 확인

 

 

 

 

 

자주 사용하는 명령어 모음

# 1. HTTP 트래픽 모니터링
sudo tcpdump -i any -A 'tcp port 80'

# 2. HTTPS 핸드셰이크 확인
sudo tcpdump -i any 'tcp port 443 and (tcp[tcpflags] & tcp-syn != 0)'

# 3. DNS 쿼리 디버깅
sudo tcpdump -i any -vvv port 53

# 4. 특정 IP 간 모든 트래픽
sudo tcpdump host 192.168.1.100 and host 192.168.1.200

# 5. 브로드캐스트/멀티캐스트 패킷
sudo tcpdump ether broadcast or ether multicast

# 6. ARP 패킷
sudo tcpdump arp

# 7. IPv6 트래픽
sudo tcpdump ip6

# 8. ICMP (ping) 패킷
sudo tcpdump icmp

# 9. 비정상 연결 종료 모니터링
sudo tcpdump 'tcp[tcpflags] & tcp-rst != 0'

# 10. 재전송 패킷 확인 (간접적)
sudo tcpdump -tttt 'tcp[tcpflags] & tcp-push != 0'

 

 

 

 

 


 

 

 

결론

tcpdump는 네트워크 문제를 추측이 아닌 데이터로 진단할 수 있게 해주는 강력한 도구이다.

이 글에서 다룬 SSH 연결 지연 문제도 tcpdump 없이는 "네트워크가 느리다"는 막연한 추측에 그쳤을 것이다. 하지만 tcpdump로 정확히 SSH 키 교환 단계에서 30초 지연이 발생한다는 것을 확인하고, 근본 원인을 해결할 수 있었다.

 

 

핵심 요약

  1. 필터링이 핵심 - 정확한 필터로 원하는 트래픽만 캡처
  2. 타임스탬프 활용 - 지연 구간을 정확히 측정
  3. 플래그 분석 - SYN, ACK, RST 등으로 연결 상태 파악
  4. 파일 저장 - 나중에 상세 분석 가능

 

 

네트워크 문제가 발생하면, 일단 tcpdump부터 실행하세요!

 

 

 

 

 

 

 

 


Reference

 

 

 

Somaz | DevOps Engineer | Kubernetes & Cloud Infrastructure Specialist

728x90
반응형