3-Way Handshake(3-웨이 핸드셰이크)는 TCP(Transmission Control Protocol)에서 신뢰성 있는 연결을 성립시키기 위해 사용하는 3단계의 초기 연결 절차입니다. 클라이언트와 서버가 서로를 신뢰하고, 데이터를 주고받을 준비가 되었는지를 확인하는 양방향 통신 채널 설정 과정입니다.
클라이언트는 서버에 연결 요청을 하며, 자신의 초기 순서 번호(Sequence Number)를 포함해 SYN(synchronized) 패킷을 보냅니다.
Client: SYN = 1, Seq = x
서버는 요청을 수락하며 자신의 초기 순서 번호를 포함한 SYN + ACK(Acknowledgment) 패킷을 클라이언트에 보냅니다. 또한 클라이언트의 시퀀스 번호에 1을 더해 응답 번호(Acknowledgment Number)로 사용합니다.
Server: SYN = 1, ACK = 1, Seq = y, Ack = x+1
클라이언트는 서버의 응답을 확인하고, 서버의 시퀀스 번호에 1을 더한 ACK 패킷을 다시 서버로 보냅니다. 이 패킷부터는 실제 데이터도 함께 전송될 수 있습니다.
Client: ACK = 1, Seq = x+1, Ack = y+1
[Client] [Server]
| ----------- SYN (Seq=x) ---------> |
| |
| <------- SYN (Sqe=y) + ACK (x+1) - |
| |
| ----------- ACK (y+1) -----------> |
| |
|--------> 데이터 전송 시작 -----------> |
| 항목 | 설명 |
|---|---|
| SYN | 연결 요청을 의미 (Synchronize) |
| ACK | 수신 확인 (Acknowledgment) |
| Seq | 송신 측 시퀀스 번호 (데이터 순서 식별용) |
| Ack | 수신 측이 다음에 기대하는 시퀀스 번호 |
| 항목 | TCP (3-Way Handshake 필요) | UDP (Handshaking 없음) |
|---|---|---|
| 연결 방식 | 연결지향(Connection-oriented) | 비연결지향(Connectionless) |
| 신뢰성 | 순서 보장, 재전송, 흐름 제어 | 보장 없음 |
| 속도 | 느림 (핸드셰이크 포함) | 빠름 (바로 전송) |
| 예시 | HTTP, HTTPS, FTP, SSH 등 | DNS, VoIP, 스트리밍 등 |