3-Way Handshake 란? (TCP 연결 설정 과정)
**3-Way Handshake(3-웨이 핸드셰이크)**는 TCP 통신에서 연결을 설정하기 위해 클라이언트와 서버가 3번의 패킷을 주고받는 과정을 의미함.
TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 연결 지향형(Connection-oriented) 방식으로 동작함.
따라서 실제 데이터를 주고받기 전에 통신 상대방과 연결이 준비되었는지를 확인하고 연결을 수립하는 과정이 필요함.
1. 왜 3-Way Handshake가 필요한가?
TCP는 다음을 보장하기 위해 3단계 절차를 수행함:
- 양측 모두 통신 준비가 되었는지 확인함
- 시퀀스 번호를 주고받아 순서를 맞춤
- 패킷 유실, 중복 방지, 흐름 제어 등을 위한 상태 정보를 초기화함
2. 3-Way Handshake의 흐름
[Client] [Server]
|-------- SYN ---------> (1단계)
|<------- SYN + ACK ----- (2단계)
|-------- ACK ---------> (3단계)
1단계: SYN
- 클라이언트가 서버에 연결을 요청하는 패킷을 보냄.
- SYN 플래그가 설정되어 있음.
- 이 때 클라이언트는 자신이 사용할 초기 시퀀스 번호(ISN) 를 함께 보냄.
2단계: SYN + ACK
- 서버는 클라이언트의 요청을 수신하고, 자신도 연결하겠다는 응답을 보냄.
- 이 패킷에는 SYN 플래그와 ACK 플래그가 모두 설정됨.
- 동시에 서버 자신의 시퀀스 번호도 설정됨.
3단계: ACK
- 클라이언트는 서버의 응답을 확인하고 마지막으로 ACK 응답을 전송함.
- 이로써 연결이 성립되고, 이후부터 데이터 전송이 시작됨.
3. 실제 TCP 헤더 구성 예시
플래그 | 의미 |
SYN | 연결 시작 요청 |
ACK | 응답 확인 |
SYN + ACK | 연결 요청 수락 및 응답 |
4. 시퀀스 번호 예시
1. Client → Server : SYN, seq = 100
2. Server → Client : SYN + ACK, seq = 300, ack = 101
3. Client → Server : ACK, seq = 101, ack = 301
- 클라이언트의 초기 시퀀스 번호: 100 → 다음으로 보낼 시퀀스는 101
- 서버의 초기 시퀀스 번호: 300 → 클라이언트는 301을 ack로 응답
5. 실무에서의 중요성
- 패킷 캡처 도구 (Wireshark 등) 으로 3-Way Handshake를 확인하며 네트워크 이상 유무를 분석할 수 있음.
- 방화벽, 로드밸런서, IDS 등에서도 이 과정을 기반으로 세션을 식별함.
- SYN Flood 공격 같은 네트워크 공격도 이 과정을 악용함 → 이를 막기 위해 SYN Cookies, 큐 제한 등을 활용함.
6. 4-Way Handshake (연결 종료)와의 비교
구분 | 연결 설정 | 연결 종료 |
과정 | 3단계 (SYN, SYN-ACK, ACK) | 4단계 (FIN, ACK, FIN, ACK) |
특징 | 양측 연결 준비 | 양측 연결 종료 요청 |
목적 | 통신 시작 | 통신 종료 |
정리
3-Way Handshake는 TCP 통신에서 클라이언트와 서버 간의 연결을 설정하는 과정임.
총 3단계(SYN → SYN+ACK → ACK)를 통해 서로 통신할 준비가 되었는지 확인하고, 시퀀스 번호를 동기화하며, 신뢰성 있는 연결을 위한 기반을 형성함.
TCP의 핵심 원리 중 하나이며, 실무 네트워크 분석이나 보안 대응에서도 자주 등장하는 중요한 개념임.
출처 : ChatGPT