TCP는 연결 종료 시에도 데이터의 신뢰성을 보장하기 위해 4단계(4-Way Handshake) 과정을 거친다.
이는 양방향 통신을 독립적으로 종료하기 위해 필요한 절차이다.
아래 그림은 TCP가 연결을 닫는 과정을 단계별로 나타낸 것이다 👇

TCP는 전이중(Full Duplex) 통신 방식이므로, 송신과 수신이 각각 독립적으로 이루어진다.
따라서 연결을 종료할 때도 양쪽이 각각 자신의 전송 방향을 닫아야 하며, 이로 인해 4번의 제어 메시지(FIN / ACK) 가 오간다.
이 절차를 4-Way Handshake라 한다.
클라이언트가 더 이상 데이터를 전송하지 않을 때, FIN 플래그를 전송한다.
이후 클라이언트는 데이터를 보낼 수 없지만, 서버로부터의 데이터는 받을 수 있다.
ESTABLISHED → FIN_WAIT_1서버는 클라이언트의 FIN을 수신하고, 이에 대한 확인 응답(ACK)을 보낸다.
이 시점에서 서버는 아직 남은 데이터를 전송할 수 있다.
상태 변화:
ESTABLISHED → CLOSE_WAITFIN_WAIT_1 → FIN_WAIT_2서버가 남은 데이터를 모두 전송한 후, 연결 종료를 알리기 위해 FIN을 전송한다.
이때 서버는 더 이상 데이터를 보낼 수 없다.
CLOSE_WAIT → LAST_ACK클라이언트는 서버의 FIN을 수신한 뒤, ACK를 전송한다.
이후 일정 시간 동안 TIME_WAIT 상태를 유지하며 네트워크 상의 지연 패킷을 기다린다.
그 후 연결이 완전히 종료된다.
상태 변화:
FIN_WAIT_2 → TIME_WAIT → CLOSEDLAST_ACK → CLOSED| 역할 | 상태 변화 | 설명 |
|---|---|---|
| 클라이언트 | ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED | 먼저 종료 요청을 보낸다. |
| 서버 | ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED | 이후 응답을 보낸다. |
TCP의 4-Way Handshake는 단순한 연결 종료 절차가 아니라,
데이터 손실 없이 안정적으로 통신을 종료하기 위한 안전장치이다.