3-way handshake

Jerry·2025년 8월 4일

3-Way Handshake(3-웨이 핸드셰이크)는 TCP(Transmission Control Protocol)에서 신뢰성 있는 연결을 성립시키기 위해 사용하는 3단계의 초기 연결 절차입니다. 클라이언트와 서버가 서로를 신뢰하고, 데이터를 주고받을 준비가 되었는지를 확인하는 양방향 통신 채널 설정 과정입니다.

용도

  • TCP 연결 설정을 위한 과정
  • 통신 전에 양쪽이 송수신 준비 완료되었음을 확인
  • 순서 보장 및 신뢰성 있는 데이터 전송을 위한 준비 단계

과정 요약

1. [SYN] 클라이언트 → 서버

클라이언트는 서버에 연결 요청을 하며, 자신의 초기 순서 번호(Sequence Number)를 포함해 SYN(synchronized) 패킷을 보냅니다.

Client: SYN = 1, Seq = x

2. [SYN + ACK] 서버 → 클라이언트

서버는 요청을 수락하며 자신의 초기 순서 번호를 포함한 SYN + ACK(Acknowledgment) 패킷을 클라이언트에 보냅니다. 또한 클라이언트의 시퀀스 번호에 1을 더해 응답 번호(Acknowledgment Number)로 사용합니다.

Server: SYN = 1, ACK = 1, Seq = y, Ack = x+1

3. [ACK] 클라이언트 → 서버

클라이언트는 서버의 응답을 확인하고, 서버의 시퀀스 번호에 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수신 측이 다음에 기대하는 시퀀스 번호

3-Way Handshake가 필요한 이유

  • 양측의 연결 의사 확인: 단방향이 아닌 양방향 모두 연결 가능한지 확인
  • 시퀀스 번호 초기화: 데이터를 순서대로 재조립하기 위한 초기 번호 설정
  • 초기 수신/송신 상태 동기화: 서로의 상태를 알아야 신뢰성 있는 통신 가능

보안 및 성능 고려

  • SYN Flood 공격: 3-Way Handshake의 취약점을 이용한 DoS 공격 (SYN만 보내고 ACK는 안 보내는 방식)
    • 대응: SYN Cookie, 방화벽 임계값 설정, 커넥션 제한
  • 지연 연결 문제: Handshake 자체가 왕복 RTT(왕복 지연 시간)가 필요 → HTTP/3에서는 QUIC 기반의 0-RTT 핸드셰이크로 해결

TCP vs UDP

항목TCP (3-Way Handshake 필요)UDP (Handshaking 없음)
연결 방식연결지향(Connection-oriented)비연결지향(Connectionless)
신뢰성순서 보장, 재전송, 흐름 제어보장 없음
속도느림 (핸드셰이크 포함)빠름 (바로 전송)
예시HTTP, HTTPS, FTP, SSH 등DNS, VoIP, 스트리밍 등
profile
Backend engineer

0개의 댓글