🚨 네트워크 연결이 갑자기 끊어지는 문제, 원인을 찾고 계신가요?
네트워크 장애 분석 중 TCP 연결이 예기치 않게 종료되는 상황을 마주한 적 있으신가요? 이런 문제의 핵심은 바로 TCP 리셋(RST) 패킷에 있습니다.
오늘은 리눅스 환경에서 tcpdump를 활용해 RST 패킷만 정확히 수집하는 방법을 상세히 알아보겠습니다. 네트워크 엔지니어부터 시스템 관리자까지, 모든 레벨에서 활용 가능한 실용적인 가이드를 제공해드릴게요!
🎯 TCP 리셋(RST) 패킷이란?

📖 기본 개념
TCP 리셋(RST) 패킷은 TCP 연결을 즉시 종료시키는 특수한 패킷입니다. 일반적인 FIN 패킷과 달리, RST 패킷은 연결 상태와 관계없이 강제로 연결을 차단합니다.
🔧 RST 패킷이 발생하는 주요 상황
- 포트가 닫혀있을 때: 서버의 해당 포트에 서비스가 실행되지 않음
- 방화벽에 의한 차단: iptables나 보안 장비에서 연결 차단
- 애플리케이션 오류: 프로그램에서 강제로 소켓 종료
- 타임아웃: 네트워크 지연으로 인한 연결 초과 시간
- 보안 정책: DDoS 방어나 비정상 트래픽 탐지
⚡ RST vs FIN 패킷 차이점
- FIN: 정상적인 연결 종료 (4-way handshake)
- RST: 강제적인 연결 종료 (즉시 종료, 버퍼 데이터 손실 가능)
🛠️ tcpdump로 RST 패킷 수집하는 기본 방법들
1️⃣ 가장 간단한 방법: 플래그 이름 사용
tcpdump 'tcp[tcpflags] & tcp-rst != 0'
TCP flag field values는 tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-act, tcp-urg 등으로 표현할 수 있습니다.
예시 출력:
13:13:18.659757 IP 192.168.1.100.13352 > server.example.com.https: Flags [R.], seq 3795577939, ack 3798544125, win 0, length 0
13:13:18.659969 IP 192.168.1.100.13350 > server.example.com.https: Flags [R.], seq 2462881485, ack 3330663598, win 0, length 0
2️⃣ 비트 연산을 이용한 정확한 필터링
tcpdump 'tcp[13] & 4 != 0'
해석:
- tcp[13]: TCP 헤더의 13번째 바이트 (플래그 필드)
- & 4: RST 비트 마스크 (RST = 0000 0100 = 4)
- != 0: 해당 비트가 설정되어 있는지 확인
3️⃣ 특정 인터페이스에서 RST 패킷 수집
# eth0 인터페이스에서만 수집
tcpdump -i eth0 'tcp[13] & 4 != 0'
# 모든 인터페이스에서 수집
tcpdump -i any 'tcp[13] & 4 != 0'
⚠️ 주의사항: -I (대문자)가 아닌 -i (소문자) 옵션을 사용해야 합니다!
🎯 실무에서 활용하는 고급 필터링 기법
🔍 가독성 높은 출력 옵션
# IP 주소를 숫자로 표시 (DNS 조회 없음)
tcpdump -nn 'tcp[13] & 4 != 0'
# 타임스탬프와 함께 상세 출력
tcpdump -ttnn 'tcp[13] & 4 != 0'
# 패킷 내용도 16진수로 출력
tcpdump -nnX 'tcp[13] & 4 != 0'
📊 특정 호스트/포트 대상 RST 패킷 수집
# 특정 서버로부터의 RST 패킷만
tcpdump -nn 'src host 192.168.1.10 and tcp[13] & 4 != 0'
# 특정 포트(예: 80번)의 RST 패킷만
tcpdump -nn 'port 80 and tcp[13] & 4 != 0'
# 특정 네트워크 대역의 RST 패킷
tcpdump -nn 'net 192.168.1.0/24 and tcp[13] & 4 != 0'
💾 파일로 저장하여 분석
# pcap 파일로 저장
tcpdump -nn 'tcp[13] & 4 != 0' -w rst_packets.pcap
# 시간 제한 (60초간 수집)
timeout 60 tcpdump -nn 'tcp[13] & 4 != 0' -w rst_analysis.pcap
# 파일 크기 제한 (100MB마다 새 파일)
tcpdump -nn 'tcp[13] & 4 != 0' -w rst_%Y%m%d_%H%M.pcap -C 100
🔧 다양한 TCP 플래그 패킷 수집 방법
TCP 플래그별 비트 값
플래그 비트 값 용도
| FIN | 1 | 연결 종료 |
| SYN | 2 | 연결 시작 |
| RST | 4 | 연결 리셋 |
| PSH | 8 | 데이터 즉시 전송 |
| ACK | 16 | 확인 응답 |
| URG | 32 | 긴급 데이터 |
다른 TCP 플래그 수집 예시
# SYN 패킷만 수집 (연결 시도)
tcpdump 'tcp[13] & 2 != 0'
# FIN 패킷만 수집 (정상 종료)
tcpdump 'tcp[13] & 1 != 0'
# SYN+ACK 패킷 (연결 응답)
tcpdump 'tcp[13] & 18 = 18'
# RST+ACK 조합
tcpdump 'tcp[13] & 20 = 20'
📈 실제 사용 시나리오별 명령어
🚨 웹 서버 연결 장애 분석
# HTTP/HTTPS 포트의 RST 패킷 모니터링
tcpdump -nn 'tcp[13] & 4 != 0 and (port 80 or port 443)'
# 특정 클라이언트IP에서 오는 RST
tcpdump -nn 'src host 203.0.113.1 and tcp[13] & 4 != 0'
🛡️ 보안 이벤트 탐지
# 짧은 시간 내 다량의 RST 패킷 (DDoS 의심)
tcpdump -nn 'tcp[13] & 4 != 0' | head -100
# 외부에서 내부 서버로의 RST 패킷
tcpdump -nn 'dst net 192.168.0.0/16 and tcp[13] & 4 != 0'
🔄 애플리케이션 연결 문제 진단
# 데이터베이스 포트(3306) RST 모니터링
tcpdump -nn 'port 3306 and tcp[13] & 4 != 0'
# SSH 연결 문제 분석
tcpdump -nn 'port 22 and tcp[13] & 4 != 0'
💡 RST 패킷 분석 노하우
🔍 출력 결과 해석하기
13:13:18.659757 IP 192.168.1.100.13352 > server.com.443: Flags [R.], seq 3795577939, ack 3798544125, win 0, length 0
각 필드 의미:
- 13:13:18.659757: 정확한 시간 (마이크로초 단위)
- 192.168.1.100.13352: 송신지 IP와 포트
- server.com.443: 목적지 호스트와 포트
- Flags [R.]: RST + ACK 플래그
- seq, ack: TCP 시퀀스 번호
- win 0: 윈도우 크기 (RST 패킷은 보통 0)
- length 0: 데이터 길이 (RST는 데이터 없음)
📊 패킷 수 집계하기
# 1분간 RST 패킷 개수 세기
timeout 60 tcpdump -nn 'tcp[13] & 4 != 0' 2>/dev/null | wc -l
# 호스트별 RST 패킷 통계
tcpdump -nn 'tcp[13] & 4 != 0' | awk '{print $3}' | sort | uniq -c
⚠️ 주의사항 및 베스트 프랙티스
🛡️ 권한 및 보안
- tcpdump 실행에는 root 권한 또는 CAP_NET_RAW 권한 필요
- 운영 환경에서는 네트워크 성능에 미치는 영향 고려
- 민감한 데이터가 포함될 수 있으므로 캡처 파일 관리 주의
⚡ 성능 최적화
# 버퍼 크기 조정으로 패킷 손실 방지
tcpdump -B 4096 'tcp[13] & 4 != 0'
# 스냅샷 길이 제한 (헤더만 캡처)
tcpdump -s 128 'tcp[13] & 4 != 0'
📝 로그 관리
# 로그 로테이션과 함께 사용
tcpdump 'tcp[13] & 4 != 0' | logger -t "RST_MONITOR"
# 시간별 파일 분할
tcpdump -G 3600 -w 'rst_%Y%m%d_%H.pcap' 'tcp[13] & 4 != 0'
🔗 추가 학습 자료
📚 심화 학습을 위한 리소스
- GitHub Gist: tcpdump TCP flags 가이드 - tcpdump의 TCP 플래그 읽는 방법에 대한 상세한 예시들을 제공합니다
- 공식 매뉴얼: man tcpdump로 모든 옵션 확인
- Wireshark 연동: pcap 파일을 Wireshark에서 시각적 분석
🛠️ 관련 도구들
- ss: 현재 소켓 상태 확인
- netstat: 네트워크 연결 상태 모니터링
- iptables: 방화벽 로그와 연계 분석
- ngrep: 패킷 내용 기반 필터링
🎊 마무리: 이제 네트워크 문제 해결의 달인!
TCP 리셋 패킷 분석은 네트워크 장애 해결의 핵심 기술 중 하나입니다. 이번 가이드에서 배운 tcpdump 명령어들을 활용하면:
✅ 연결 끊김 원인 신속 파악
✅ 보안 이벤트 조기 탐지
✅ 애플리케이션 성능 문제 진단
✅ 네트워크 인프라 안정성 향상
기억해야 할 핵심 명령어:
# 기본 RST 패킷 수집
tcpdump 'tcp[13] & 4 != 0'
# 상세 정보와 함께
tcpdump -ttnn 'tcp[13] & 4 != 0'
# 파일 저장
tcpdump 'tcp[13] & 4 != 0' -w rst_analysis.pcap
실제 운영 환경에서 이런 기법들을 활용해보세요. 네트워크 문제 해결 능력이 한 단계 업그레이드될 것입니다!
💬 도움이 되셨나요? 댓글로 여러분의 경험담이나 추가 질문을 공유해주세요. 함께 더 나은 네트워크 관리 방법을 찾아가요!
🔖 북마크 추천: 네트워크 장애 발생 시 바로 참고할 수 있도록 이 가이드를 즐겨찾기에 저장해두세요.