4-Way Hand Shaking

4-way 핸드셰이킹은 TCP 연결을 해제할 때 이뤄지는 과정이다. 연결을 해제할 때는 이름 그대로 요청과 응답을 총 4번 주고받게 된다.
TCP4-Way Hand ShakingFINACKTCP Keep Alive좀비 커넥션FIN-WAIT1CLOSE_WAITFIN_WAIT2LAST_WAITTIME_WAITCLOSEDTCP 핸드셰이킹
avatar
2025.06.08
·
4 min read

4-way 핸드셰이킹TCP 연결을 해제할 때 이뤄지는 과정이다. 연결을 해제할 때는 이름 그대로 요청과 응답을 총 4번 주고받게 된다.

4-way 핸드셰이킹 과정

아래 이미지는 TCP의 4-way 핸드셰이킹 과정에 대한 그림이다. 아래에 추가될 설명의 송신부가 아래 그림의 클라이언트A를 말하며, 수신부는 서버B를 말할 것이다.

6619

1. FIN

송신부가 수신부와의 연결을 종료하려고 FIN 메시지를 보낸다.

이 때, 송신부는 FIN-WAIT1 상태가 된다.

2. ACK

수신부가 송신부로부터 FIN 메시지를 받으면 이에 대한 응답으로 ACK 메시지를 보낸다.

이 때, 수신부는 CLOSE_WAIT 상태가 된다.

수신부는 메시지를 보낸 후 앱을 종료하는 등 연결을 종료하기 위한 작업을 한다.

송신부에서는 수신부에서 보낸 ACK 메시지를 받고 FIN_WAIT2 상태가 된다.

3. FIN

수신부에서 연결을 종료할 준비가 끝나면, 송신부에 FIN 메시지를 보내고, LAST_WAIT 상태가 된다.

4. ACK

송신부는 서버로부터 받은 FIN 메시지에 응답하기 위해 ACK 메시지를 보내고, TIME_WAIT 상태가 된다.

일정 시간이 지나면 CLOSED 상태가 된다.

일정 시간 동안 TIME_WAIT 상태를 유지하는 이유는, FIN 메시지 전에 보낸 패킷이 FIN 메시지 수신보다 지연되어 발생하는 패킷 유실에 대비하기 위해서이다. 또한, 수신부에 ACK 메시지가 제대로 전달되지 않아 연결 해제가 이뤄지지 않는 경우도 대비한다.

수신부는 송신부로부터 ACK 메시지를 받고 CLOSED 상태가 된다.

위와 같은 흐름으로 TCP 연결 해제가 이루어 진다.

그 외

세션이 연결되면 이를 유지하기 위해 일정 시간이 경과한 후 TCP Keep Alive 패킷을 던저 연결 유지 상태를 확인할 수 있다.

TCP Keep Alive 패킷은, 연결을 유지하길 원하는 쪽에서 보낸다.

패킷에 대한 응답을 받으면, 시간을 처음부터 다시 측정한다. 하지만 응답을 받지 못하면 연결을 종료한다. 이는 동일한 송신부로부터 재요청이 오는 경우에 발생하는 불필요한 3-way 핸드셰이킹을 줄일 수 있다.

또한, FIN 메시지를 받지 못한 경우에 발생할 수 있는 불필요한 연결, 즉 좀비 커넥션을 방지할 수 있다.







- 컬렉션 아티클