
컴퓨터 네트워크
TCP Three-Way HandshakeTCP 3-way 핸드셰이크
TCP 3-way 핸드셰이크는 TCP 연결을 설정하기 위한 3단계 절차다. 클라이언트와 서버가 서로의 존재를 확인하고, 초기 순서 번호(ISN)를 교환하며, 양방향 통신 채널을 수립한다. 신뢰성 있는 연결 지향 통신의 핵심 메커니즘이다.
동작 과정
1단계 SYN: 클라이언트가 서버에 연결을 요청한다. 임의의 초기 순서 번호(ISN) x를 선택하고 SYN 플래그를 설정한다.
2단계 SYN-ACK: 서버가 SYN을 수신하고 자신의 ISN y를 선택한다. ACK(x+1)로 클라이언트의 SYN을 확인하고, 자신의 SYN을 함께 전송한다.
3단계 ACK: 클라이언트가 서버의 SYN을 ACK(y+1)로 확인한다. 이후 양측 모두 ESTABLISHED 상태가 된다.
왜 3단계인가?
2단계로는 부족하다. 서버는 클라이언트의 SYN을 받았지만, 클라이언트가 서버의 SYN을 받았는지 확인할 수 없다. 3단계 ACK를 통해 양방향 통신이 모두 검증된다.
| 단계 | 플래그 | 목적 |
|---|---|---|
| 1 | SYN | 클라이언트 → 서버: 연결 요청 |
| 2 | SYN+ACK | 서버 → 클라이언트: 수락 + 서버 SYN |
| 3 | ACK | 클라이언트 → 서버: 서버 SYN 확인 |
SYN Flood 공격
공격자가 SYN 패킷을 대량으로 보내 서버의 반연결(half-open) 큐를 가득 채우는 DoS 공격이다. 대응책으로 SYN Cookie를 사용한다: 서버가 큐에 상태를 저장하지 않고, 암호화된 ISN을 쿠키로 전송하여 3단계 ACK에서 검증한다.