연결은 되는데 응답이 가끔 툭툭 끊기거나 느려질 때, 흔한 범인 중 하나가 TCP 재전송입니다. 패킷이 중간에 버려지면 TCP는 응답(ACK)을 못 받고 같은 데이터를 다시 보냅니다. 이 재전송이 잦을수록 체감 지연이 커집니다. "느리다"로 끝내지 말고 재전송 수치를 직접 읽어봅니다.
진단 — 연결별 재전송 보기
ss -ti는 활성 TCP 연결의 내부 통계를 보여줍니다. retrans 항목이 핵심입니다.
ss -ti
ESTAB 0 0 10.0.1.5:443 10.0.2.9:51234
cubic rtt:42.3/8.1 retrans:0/137 rto:260
retrans:0/137은 "현재 미해결 0 / 누적 재전송 137"을 뜻합니다. 누적값이 전송량 대비 크게 늘어나면 손실이 있다는 신호입니다. rtt(왕복 시간)와 rto(재전송 타임아웃)도 함께 봅니다. rtt가 출렁이면 경로가 불안정한 것입니다.
진단 — 시스템 전체 손실 통계
개별 연결이 아니라 호스트 전체의 누적 통계는 netstat -s로 봅니다.
netstat -s | grep -i retrans
1432 segments retransmitted
87 fast retransmits
19 timeouts in loss state
segments retransmitted가 전체 전송 대비 높거나 시간에 따라 빠르게 증가하면 손실 신호로 봅니다. 고정된 1퍼센트 같은 보편 임계값은 링크·애플리케이션별 기준선이 다르므로 정상 구간과 비교하세요. timeouts가 많다는 건 ACK 자체가 안 와서 타임아웃까지 기다렸다는 뜻으로, 단순 혼잡보다 경로 단절에 가까울 수 있습니다.
해석 — 재전송 종류로 원인 좁히기
| 신호 | 의미 | 1순위 점검 |
|---|---|---|
| fast retransmit 증가 | 중복 ACK 기반 빠른 복구 | 경로 혼잡·간헐 손실 |
| timeout 재전송 증가 | ACK 자체가 안 옴 | 방화벽 드롭·경로 단절 |
| 특정 연결만 retrans 높음 | 그 목적지 경로 문제 | 해당 구간 라우팅·MTU |
| 전 연결 고르게 높음 | 로컬 NIC·드라이버 | 인터페이스 에러 카운터 |
인터페이스 자체 오류도 함께 확인합니다.
ip -s link show eth0 # RX/TX errors, dropped 카운터
errors나 dropped가 계속 증가하면 NIC·케이블·드라이버 쪽을 의심합니다.
순서 요약
ss -ti # 연결별 retrans / rtt / rto
netstat -s | grep -i retrans # 호스트 전체 재전송 통계
ip -s link show eth0 # 인터페이스 에러·드롭
재전송이 특정 목적지에만 몰리면 그 경로의 문제, 전 연결에 고르게 나타나면 로컬 쪽 문제일 가능성이 큽니다. 이 구분만으로 점검 범위가 크게 줄어듭니다.
TCP 동작과 패킷 손실을 직접 관찰하며 진단하는 실습은 네트워크 트랙에서 회원가입 없이 무료로 할 수 있습니다.