상태 이름만 보면 원인을 놓치기 쉽습니다. 어느 구간에서 멈췄는지와 그때 확인할 신호를 함께 묶어야 합니다.
구간
정상 신호
나쁜 신호
우선 점검
수립
SYN → SYN-ACK → ACK가 짧은 시간 안에 끝남
SYN-SENT 또는 SYN-RECEIVED 누적
listen 포트, 방화벽, 라우팅, SYN backlog
사용
ESTABLISHED에서 RTT와 재전송이 안정적
처리 지연, retransmit, zero window 증가
rwnd/cwnd, 애플리케이션 읽기 속도, 경로 손실
정상 종료
FIN과 ACK가 양방향 송신 스트림을 차례로 닫음
CLOSE-WAIT, FIN-WAIT-2가 계속 남음
소켓 close 호출, half-close 정책, timeout
비정상 종료
RST가 명확한 거부나 abort 상황에서만 보임
RST 폭증, 중간 장비 drop, 반복 재연결
방화벽/프록시 정책, SO_LINGER, 앱 예외 로그
운영 압박
TIME-WAIT가 서비스 특성 안에서 관리됨
포트 고갈, conntrack 포화, LB 상태 테이블 압박
keep-alive, 커넥션 풀, 포트 범위, 재시도 폭주
상태는 결과상태명보다 직전 패킷과 다음 대기 이벤트를 본다.
종료는 양방향FIN 하나는 한쪽 송신 스트림만 닫았다는 뜻이다.
RST는 abort정상 데이터 전달 완료의 신호로 쓰면 안 된다.