TCP는 신뢰성 있는 연결 지향형 통신을 제공하기 위해 연결을 맺는 과정(3-Way Handshake) 을 수행한다.
이 과정은 클라이언트와 서버가 서로의 존재를 확인하고, 초기 시퀀스 번호를 교환하여 데이터 전송 준비를 완료하는 절차이다.
아래 그림은 TCP가 연결을 설정하는 과정을 단계별로 나타낸 것이다 👇

TCP는 데이터를 주고받기 전에 반드시 논리적 연결(Logical Connection) 을 확립해야 한다.
이때 SYN과 ACK 플래그를 이용하여 세 번의 메시지를 주고받는다.
이 과정을 3-Way Handshake라 한다.
클라이언트는 연결을 요청하기 위해 SYN 플래그가 설정된 세그먼트를 전송한다.
이때 임의의 초기 시퀀스 번호(Seq = x)를 함께 보낸다.
CLOSED → SYN_SENT서버는 클라이언트의 SYN을 수신한 후, 자신도 연결을 수락한다는 의미로 SYN과 ACK가 모두 설정된 세그먼트를 보낸다.
이때 서버는 자신의 초기 시퀀스 번호(Seq = y)를 포함하고, 클라이언트의 시퀀스를 확인(ACK = x + 1)한다.
LISTEN → SYN_RCVD클라이언트는 서버의 SYN + ACK를 수신한 뒤, 이를 확인하는 ACK를 전송한다.
이 응답에는 ACK = y + 1이 포함되어 있으며, 이때부터 양측은 데이터를 송수신할 수 있는 상태가 된다.
상태 변화:
SYN_SENT → ESTABLISHEDSYN_RCVD → ESTABLISHED| 역할 | 상태 변화 | 설명 |
|---|---|---|
| 클라이언트 | CLOSED → SYN_SENT → ESTABLISHED | 연결을 요청한다. |
| 서버 | LISTEN → SYN_RCVD → ESTABLISHED | 연결 요청을 수락한다. |
SYN (Synchronize) : 연결 요청 및 초기 시퀀스 번호 설정을 의미한다.
ACK (Acknowledgment) : 상대방의 SYN 또는 데이터 수신을 확인하는 응답이다.
3단계 절차의 목적
TCP의 3-Way Handshake는 신뢰성 있는 연결을 위한 첫 단계이며,
양쪽이 데이터를 안전하게 주고받기 위한 상호 동기화 과정이다.