← 질문 목록
#310깊이 0
TCP 연결에서 RST 패킷은 어떤 상황에 전송되는가?
비정상적인 연결 요청을 받거나 연결을 즉시 끊어야 할 때다. 정상적인 FIN 교환 과정과 달리 대기 시간 없이 연결을 즉시 파기한다.
| 상황 | 발생 조건 | 상대방의 동작 |
|---|---|---|
| 포트 미개방 | 닫힌 포트로 SYN 패킷 수신 | 연결 거절을 확인하고 중단한다 |
| 세션 불일치 | 이미 닫힌 연결로 데이터 수신 | 세션 오류를 인지하고 소켓을 닫는다 |
| 강제 종료 | SO_LINGER를 0으로 설정 후 닫기 | 수신 버퍼를 비우고 즉시 종료한다 |
대표적으로 포트가 열려 있지 않은 서버에 SYN 요청이 들어오면 서버는 RST를 보낸다. 해당 포트를 사용할 수 없음을 상대에게 즉시 알리기 위해서다.
이미 끊어진 연결로 데이터나 ACK 패킷이 들어올 때도 RST를 전송한다. 양쪽의 세션 상태가 맞지 않아 연결을 더 유지할 수 없기 때문이다.
SO_LINGER를 0으로 두고 닫는 것처럼 끊어 내는 방식으로 닫을 때 나간다. 프로세스가 강제로 죽어도 커널이 정상 종료 절차를 밟으면 FIN이 나간다. 이 때 상대방은 버퍼의 미처리 데이터를 버리고 연결을 해제한다.