4-Way Handshake는 TCP/IP 프로토콜에서 사용하는 연결 종료 과정으로, 두 통신 당사자가 데이터 전송이 완료되었음을 확인하고 연결을 안전하게 종료할 준비가 되었음을 보장한다. 이 과정은 연결을 안정적으로 마무리하고, 누락된 데이터 없이 모든 패킷이 전송되었는지 확인하는 데 중요하다.
4-Way Handshake에서 사용되는 패킷은 TCP 헤더 내의 플래그를 통해 구별할 수 있다. 특히, FIN (Finish) 및 ACK (Acknowledgment) 플래그가 사용되며, 이들은 다음 단계로 진행되는 과정을 나타낸다:
1. 종료를 원하는 호스트가 FIN 플래그를 설정한 패킷을 전송한다.
2. 수신 호스트는 이를 수신 후 ACK 플래그를 설정하여 응답한다.
3. 수신 호스트 또한 FIN 플래그를 설정하여 연결 종료 준비가 되었음을 전송한다.
4. 최초의 호스트가 최종적으로 ACK 플래그로 응답하여 연결을 종료한다.
만약 4-Way Handshake를 수행할 여유가 없다면, RST (Reset) 플래그가 설정된 패킷을 전송하여 연결을 강제로 종료할 수 있다. RST 플래그는 연결을 즉시 종료시키며, 이는 오류 상황이나 긴급한 종료가 필요할 때 유용하다.
한쪽 네트워크에서 연결이 강제로 종료된 경우, TCP는 설정된 타임아웃을 기준으로 ACK 패킷을 기다린다. ACK 패킷이 정해진 시간 내에 도착하지 않으면, 연결이 강제 종료된 것으로 간주하고 해당 연결을 종료하거나 재시도한다.
연결 종료 후 TIME_WAIT 상태로 대기하는 것은 네트워크 내에서 지연되거나 순서가 바뀐 패킷이 최종적으로 소멸될 수 있도록 보장하기 위함이다. 이 상태는 일반적으로 최대 세그먼트 수명(MSL)의 두 배 동안 지속되며, 이 기간 동안 모든 패킷이 네트워크에서 소멸하도록 한다. 이는 같은 포트 번호를 사용하는 새 연결이 이전 연결의 잔류 데이터로 인해 문제를 겪지 않도록 하기 위해서다.
이러한 과정을 통해 TCP 연결의 종료가 안정적으로 관리되며, 네트워크의 안정성과 데이터의 정확성이 유지된다.