3-way handshake은 컴퓨터 네트워킹에서 클라이언트와 서버 사이에 TCP 연결을 설정하는 데 사용되는 방법입니다. 이는 두 장치가 서로의 순서 번호를 동기화하고 안정적인 통신 채널을 설정하기로 합의하는 과정입니다. 3-way handshake는 다음 단계로 구성됩니다:
- SYN (Synchronize)
클라이언트는 SYN (synchronize) 플래그가 설정된 TCP 세그먼트를 서버에게 보내어 연결을 초기화합니다. 이 세그먼트에는 클라이언트가 선택한 순서 번호가 포함됩니다. 이 순서 번호는 전송되는 데이터를 추적하는 데 사용됩니다.
- SYN-ACK (Synchronize-Acknowledge)
클라이언트가 보낸 SYN 세그먼트를 받은 서버는 SYN 및 ACK (acknowledge) 플래그가 설정된 TCP 세그먼트를 보내어 요청에 대한 확인을 합니다. 확인 번호는 클라이언트의 순서 번호에 1을 더한 값이며, 서버도 자체 초기 순서 번호를 선택합니다.
- ACK (Acknowledge)
마지막으로, 클라이언트는 서버로부터 받은 SYN-ACK 세그먼트에 대해 확인을 보내어 응답을 확인합니다. 확인 번호는 서버의 순서 번호에 1을 더한 값입니다.
4-way handshake은 양쪽의 연결 종료를 확인하고, 데이터의 손실을 방지하기 위해 사용됩니다.
- Fin : 클라이언트가 연결 종료를 요청하는 FIN 패킷을 서버에게 보냅니다.
- ACK: 서버는 FIN 패킷을 받고, 클라이언트의 연결을 종료할 준비가 되었다는 의미로 ACK 패킷을 클라이언트에게 보냅니다.
- Fin: 서버가 더 이상 보낼 데이터가 없다면, 연결을 종료하기 위해 클라이언트에게 FIN 패킷을 보냅니다.
- ACK: 클라이언트는 FIN 패킷을 받고, 연결을 종료할 준비가 되었다는 의미로 ACK 패킷을 서버에게 보냅니다.
4-way handshake가 완료되면 TCP 연결은 종료됩니다. 이 과정을 통해 양쪽 장치는 연결 종료를 동기화하고 데이터 손실 없이 안정적으로 연결을 종료할 수 있습니다.