<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" /> 한 줄 요약

연결이 양방향이므로 각 방향을 독립적으로 종료할 수 있어야 하기 때문입니다.

</aside>

연결 설정과 연결 종료 과정에서 TCP/IP 프로토콜이 각각 3-way handshake와 4-way handshake를 사용하는 이유는 데이터 전송의 신뢰성을 보장하고, 양방향 통신의 정확한 종료를 위한 것입니다.

연결 설정: 3-way Handshake

연결을 설정할 때 3-way handshake가 사용되는 이유는 두 통신 주체 간에 초기 시퀀스 번호(SYN)를 교환하고, 양쪽 모두 준비가 되었음을 확인하기 위해서입니다. 이 과정은 다음과 같습니다:

  1. 클라이언트가 서버에 SYN을 보내 연결을 요청합니다.
  2. 서버는 클라이언트에게 SYN-ACK로 응답하여 요청을 수락하고 자신도 연결 준비가 되었음을 알립니다.
  3. 클라이언트는 ACK로 응답하여 서버의 준비 상태를 확인합니다.

이렇게 3단계로 이루어진 과정을 통해 빠르고 효율적으로 양방향 통신의 시작을 알립니다.

연결 종료: 4-way Handshake

한편, 연결 종료 시에는 4-way handshake가 필요한데, 이는 통신의 양 방향이 독립적으로 종료될 수 있도록 하기 위함입니다. 연결 종료 과정은 다음과 같습니다:

  1. 클라이언트가 서버에 FIN을 보내 연결 종료를 요청합니다.
  2. 서버는 ACK로 응답하여 클라이언트의 종료 요청을 받았음을 확인합니다. 이 시점에서 서버는 아직 데이터를 클라이언트에게 보낼 수 있습니다.
  3. 서버가 모든 데이터 전송을 완료하고 클라이언트에게 FIN을 보냅니다, 이는 서버 측에서도 이제 연결을 종료하겠다는 의사를 나타냅니다.
  4. 클라이언트는 ACK로 응답하고, 이후 연결이 완전히 종료됩니다.

연결 설정 때보다 한 단계 더 필요한 이유는, 연결이 양방향이므로 각 방향을 독립적으로 종료할 수 있어야 하기 때문입니다. 양쪽 모두에서 더 이상 전송할 데이터가 없음을 확인하고, 각자의 연결 종료 요청과 그에 대한 응답을 명확히 해야 합니다. 이렇게 하는 것은 데이터 손실을 방지하고, 모든 데이터가 안전하게 전송된 것을 확인한 후 연결을 종료하기 위함입니다.