CS

3-Way Handshake

baek-dev 2025. 5. 8. 14:01

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

'CS' 카테고리의 다른 글

쿠키  (0) 2025.05.10
매직 넘버  (0) 2025.05.09
프로토콜  (0) 2025.05.03
퍼사드 패턴  (0) 2025.04.14
SOLID 원칙  (0) 2025.04.04