본문 바로가기

네트워크

4 way handshake

4-Way Handshake

TCP 연결 종료 과정
클라이언트, 서버 어느쪽에서든 먼저 시작할 수 있다.

  1. FIN 패킷: 클라이언트는 서버에게 데이터 전송을 완료했음을 알리는 FIN(Finish) 패킷을 보낸다. "나는 더 이상 보낼 데이터가 없으므로 연결을 종료하려고 합니다"라는 의미이다. 
  2. ACK 패킷: 서버는 클라이언트에게서 FIN 패킷을 받으면 ACK(Acknowledge) 패킷을 클라이언트에게 보내, FIN 패킷을 받았음을 확인한다. 서버는 여전히 데이터를 클라이언트에게 보낼 수 있다.
  3. FIN 패킷: 서버가 모든 데이터를 클라이언트에게 전송한 후에는, 자신의 FIN 패킷을 클라이언트에게 보낸다.
  4. ACK 패킷: 클라이언트는 서버에게서 받은 FIN 패킷에 대해 ACK 패킷을 보내, 서버의 FIN 패킷을 받았음을 확인한다. 이 패킷이 전송된 후에 TCP 연결은 완전히 종료된다.

4-way Handshake를 할 여유가 없다면 어떻게 종료할 수 있을까?

RST(Reset) 플래그를 사용해 강제로 연결을 끊을 수 있다.

이를 사용하면 예외상황에서 4-way handshake 과정을 거치지 않고 연결을 종료한다.

4-Way Handshake 과정에서 중간에 한쪽 네트워크가 강제로 종료된다면, 반대쪽은 이를 어떻게 인식할 수 있을까?

TCP timeout을 통해 알 수 있다.

TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 타임아웃 및 재전송 메커니즘을 가지고 있다. 한쪽이 패킷을 보내고, 이에 대한 응답을 기대하는데, 이응답이 일정 시간 내에 도착하지 않으면 TCP는 연결이 종료되었거나 문제가 발생했다고 판단한다.

예를 들어, 4-way handshake에서 첫 번째 FIN 패킷을 보낸 후, 상대방으로부터 ACK를 받지 못한다면, TCP는 타임아웃을 트리거하고 연결 종료를 다시 시도하거나, 상위 계층에 에러를 알린다.

'네트워크' 카테고리의 다른 글

SSL  (0) 2023.07.31
DNS Lookup  (0) 2023.07.29
AWS VPC, Region과 Zone  (0) 2023.06.09
Restful API  (1) 2023.05.31
SSH  (0) 2023.05.23