3-way handshake은 컴퓨터 네트워킹에서 클라이언트와 서버 사이에 TCP 연결을 설정하는 데 사용되는 방법입니다. 이는 두 장치가 서로의 순서 번호를 동기화하고 안정적인 통신 채널을 설정하기로 합의하는 과정입니다. 3-way handshake는 다음 단계로 구성됩니다:

  1. SYN (Synchronize) 클라이언트는 SYN (synchronize) 플래그가 설정된 TCP 세그먼트를 서버에게 보내어 연결을 초기화합니다. 이 세그먼트에는 클라이언트가 선택한 순서 번호가 포함됩니다. 이 순서 번호는 전송되는 데이터를 추적하는 데 사용됩니다.
  2. SYN-ACK (Synchronize-Acknowledge) 클라이언트가 보낸 SYN 세그먼트를 받은 서버는 SYN 및 ACK (acknowledge) 플래그가 설정된 TCP 세그먼트를 보내어 요청에 대한 확인을 합니다. 확인 번호는 클라이언트의 순서 번호에 1을 더한 값이며, 서버도 자체 초기 순서 번호를 선택합니다.
  3. ACK (Acknowledge) 마지막으로, 클라이언트는 서버로부터 받은 SYN-ACK 세그먼트에 대해 확인을 보내어 응답을 확인합니다. 확인 번호는 서버의 순서 번호에 1을 더한 값입니다.

4-way handshake은 양쪽의 연결 종료를 확인하고, 데이터의 손실을 방지하기 위해 사용됩니다.

  1. Fin : 클라이언트가 연결 종료를 요청하는 FIN 패킷을 서버에게 보냅니다.
  2. ACK: 서버는 FIN 패킷을 받고, 클라이언트의 연결을 종료할 준비가 되었다는 의미로 ACK 패킷을 클라이언트에게 보냅니다.
  3. Fin: 서버가 더 이상 보낼 데이터가 없다면, 연결을 종료하기 위해 클라이언트에게 FIN 패킷을 보냅니다.
  4. ACK: 클라이언트는 FIN 패킷을 받고, 연결을 종료할 준비가 되었다는 의미로 ACK 패킷을 서버에게 보냅니다.

4-way handshake가 완료되면 TCP 연결은 종료됩니다. 이 과정을 통해 양쪽 장치는 연결 종료를 동기화하고 데이터 손실 없이 안정적으로 연결을 종료할 수 있습니다.