TCP 3-Way Handshake는 신뢰성 있는 연결을 설정하기 위해 클라이언트와 서버 간에 세 번의 패킷 교환을 수행하는 과정을 말한다.

 

📌 개요

TCP는 연결형 프로토콜로, 데이터 전송 전에 송신자와 수신자가 서로 연결을 설정해야한다.

이를 위해 TCP는 3 Way Handshake를 사용하여 다음을 보장한다.

  • 양쪽이 데이터 전송 준비가 되었는지 확인
  • 초기 시퀀스 번호( ISN )를 교환하여 데이터 순서를 유지
  • 네트워크 상태를 점검하여 적절한 패킷 크기 및 흐름 제어 설정

📌 과정

 Step 1 : 클라이언트 -> 서버 ( SYN )

클라이언트가 서버에 연결 요청을 보낸다.

  • 클라이언트가 TCP 소켓을 열고, SYN 플래르가 설정된 패킷을 전송한다.
  • 이 패킷에 초기 시퀀스 번호 ( ISN )가 포함된다.
  • 윈도우 크기( Window Size), MSS, 윈도우 스케일( Window Scaling ) 등의 옵션 정보가 포함된다.

 Step 2 : 서버 -> 클라이언트 ( SYN + ACK )

서버가 클라이언트의 요청을 수락하고 응답을 보낸다.

  • 서버는 클라이언트의 SYN 요청을 수락한 후, SYN + ACK 플래그가 설정된 패킷을 전송한다.
  • 이 패킷에 서버의 초기 시퀀스 번호( ISN ) 와 클라이언트의 SYN에 대한 응답 번호(ACK)가 포함된다.

 Step 3 : 클라이언트 -> 서버 ( ACK )

클라이언트가 최종적으로 서버에 연결 완료를 알린다.

  • 클라이언트는 서버가 보낸 SYN + ACK 패킷을 받은 후, ACK 플래그가 설정된 패킷을 다시 서버로 보낸다.
  • 이 패킷에 서버의 SYN에 대한 응답 번호 ( ACK )가 포함된다.

📌 3 Way Handshake에서 설정되는 TCP 옵션

  • MSS : 한 번에 전송할 수 있는 최대 세그먼트 크기
  • 윈도우 크기 : 수신 가능한 버퍼 크기
  • 윈도우 스케일링 : 윈도우 크기 확장 옵션
  • 타임스탬프 : 패킷의 RTT 측정

📌 3 Way Handshake가 실패하는 경우

  • SYN 패킷이 도착하지 않는 경우
  • SYN + ACK 패킷이 도착하지 않는 경우
  • ACK 패킷이 도착하지 않는 경우

📌 3 Way Handshake가 성공하고 나서 데이터 전송

  • 클라이언트가 데이터를 전송한다 ( Sequence Number = 1001 )
  • 서버가 응답한다. ( ACK = 1001 )
  • 이후, Sliding Window를 활용하여 빠르게 데이터를 전송한다.

+ Recent posts