이 글은 보초님 깃허브 레포를 참고해서 공부한 글입니다
3-way Handshake 는 TCP 의 연결을 할 때 사용한다면, 4-way Handshake 는 세션을 종료하기 위해 사용된다.
FIN 플래그를 통해 알 수 있다.
RST 패킷을 사용하여 실행된다. RST 패킷은 연결을 즉시 종료시키고, 양쪽 통신 당사자 간에 더 이상의 데이터 전송을 시도하지 않는다.
보통 연결 오류가 발생했거나, 보안 문제가 감지되었을 때 빠른 종료가 필요한 경우 사용된다. 이 방법은 연결을 즉시 종료하나, 대기 중이거나 전송 중인 데이터가 손실될 수 있다.
TCP 는 데이터나 제어 패킷(FIN, ACK) 전송 시, 상대방으로부터 예상되는 등답을 일정 시간 내에 받지 못하면 Timeout 이 발생한다. 이 경우 패킷을 재전송하고, 일정 횟수의 재전송을 시도 후에도 응답이 없으면 연결 문제를 감지하고 연결을 종료한다.
먄약 서버에서 FIN 플래그를 전송하기 전에 전송한 패킷이 라우팅 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN 패킷보다 늦게 도착하는 상황이 발생 할 수 있다. 그렇기 때문에 클라이언트는 서버로부터 FIN 플래그를 수신하더라도 일정시간동아나 세션을 남겨 놓고 잉여 패킷을 기다리는 TIME_WAIT 상태로 대기한다.