3-Way Hand Shaking
3-way 핸드셰이킹은 TCP에서 데이터를 본격적으로 주고받기 전에 상대방 컴퓨터와 세션을 수립하는 과정으로, 데이터의 정확한 전달을 위해 필요한 절차이다. 이 과정을 통해서 데이터의 송신자와 수신자 모두 데이터를 주고받을 준비가 되어 있음을 보장한다.
3-way 핸드셰이킹 과정
아래 이미지는 TCP의 3-way 핸드셰이킹 과정에 대한 그림이다. 아래 그림의 클라이언트는 송신부를 말하며, 서버는 수신부를 말한다.

1. SYN(N)
클라이언트가 서버와 연결하기 위해 SYN 메시지를 보내는데 이 때, 임의의 숫자 N(seq)을 함께 보낸다. 클라이언트는 서버로부터 응답이 오기 전까지 SYN_SENT 상태가 된다.
SYN: Synchronization(동기화)의 약자로, 연결을 생성할 때 사용한다.
2. SYNACK
서버가 클라이언트로부터 SYN 메시지를 받으면, 연결 요청을 수락하는 의미인 ACK 메시지를 전송한다.
ACK 메시지에는 클라이언트로부터 받은 N(seq)에 1을 더한 N+1 값을 함께 보낸다.
ACK: Acknowledgment(승인)의 약자로, 데이터를 전송하면 수신자가 받았음을 알려줄 때 사용한다.
서버에서도 클라이언트와의 연결을 확인하기 위해 SYN 메시지에 임의의 숫자인 M을 함께 보낸 후, 클라이언트의 응답을 기다린다. 이 때, 서버는 SYN_RECEIVED(SYN_RCVD) 상태가 된다.
3. ACK
클라이언트가 서버로부터 ACK + SYN 메시지를 받으면, 연결이 성립되었다는 의미인 ESTABLISHED 상태가 된다.
메시지에 대한 응답으로 ACK 메시지와 수신부로부터 받은 M에 1을 더한 M+1 값을 함께 보낸다. 이 때, ACK 메시지에는 클라이언트에서 전송하려는 데이터가 포함될 수 있다.
서버가 클라이언트로부터 ACK 메시지를 받으면 서버는 ESTABLISHED 상태가 된다.
결론
TCP 에서는 연결을 시작할 때, 송신부(클라이언트)와 수신부(서버) 간에 번갈아 요청과 응답을 해서 연결을 확인한 후에 본격적으로 데이터 통신을 하게 된다. 위의 예시와 같이 요청과 응답을 총 3번 주고 받는다고 해서 3-way 핸드셰이킹 이라는 이름이 붙여지게 되었다.