본문 바로가기
Daily Dev Q&A 정리 템플릿

26.01.20 3-way-handshake

by teg0 2026. 1. 20.

3-Way Handshake란?

3-Way Handshake는 TCP/IP 프로토콜을 이용해 통신을 하기 전, 두 장치(보통 클라이언트와 서버) 사이에 논리적인 연결을 확립하기 위해 사용하는 절차이다.

쉽게 말해, 데이터를 주고받기 전에 "내 말 들려?", "응 잘 들려, 내 말은 들려?", "어 잘 들려!"라고 세 번의 인사를 나누며 서로 통신할 준비가 되었는지 확인하는 과정이라고 이해하시면 된다.

 

작동 방식 (Step-by-Step)

이 과정에서는 SYN(Synchronize)과 ACK(Acknowledgment)라는 플래그(Flag)와 시퀀스 번호(Sequence Number)가 핵심적인 역할을 한다.

[Step 1] SYN (Client → Server)

  • 상태: 클라이언트는 SYN_SENT, 서버는 LISTEN 상태
  • 동작: 클라이언트가 서버에 연결을 요청하는 SYN 패킷을 보낸다. 이때 자신의 시퀀스 번호 $x$를 함께 보낸다.
  • 의미: "나 너랑 연결하고 싶어. 내 번호는 $x$야."

[Step 2] SYN + ACK (Server → Client)

  • 상태: 서버는 SYN_RECEIVED 상태
  • 동작: 서버는 클라이언트의 요청을 받고, 이에 대한 응답으로 ACK와 자신의 연결 요청인 SYN을 합쳐서 보낸다.
    • ACK: 클라이언트 번호에 1을 더한 $x+1$ (잘 받았다는 신호)
    • SYN: 서버 자신의 시퀀스 번호 $y$
  • 의미: "알았어, 확인했어($x+1$). 나도 준비됐어, 내 번호는 $y$야."

[Step 3] ACK (Client → Server)

  • 상태: 두 장치 모두 ESTABLISHED (연결 확립)
  • 동작: 클라이언트는 서버의 응답을 확인하고, 마지막으로 ACK 패킷을 보낸다.
    • ACK: 서버 번호에 1을 더한 $y+1$
  • 의미: "응, 네 번호도 확인했어($y+1$). 이제 진짜 데이터 주고받자!"

 

왜 하필 '3번'인가요? (중요 포인트)

  • 이유: TCP는 양방향(Full-Duplex) 통신이기 때문이다.
  • 단순히 서버가 클라이언트의 요청을 받는 것(2번)만으로는, 클라이언트가 서버의 응답을 제대로 받을 수 있는 상태인지 확인할 수 없다. 세 번째 단계인 ACK를 통해 서버도 "아, 클라이언트가 내 말을 들었구나!"라고 확신해야 비로소 안전한 연결이 완성된다.

 

면접 답변식 요약

3-Way Handshake는 TCP 통신을 시작하기 전, 양방향 연결을 확립하기 위해 사용하는 과정입니다.

과정은 크게 세 단계로 나뉩니다. 먼저 클라이언트가 서버에 SYN 패킷을 보내 연결을 요청하고, 서버는 이에 대해 SYN+ACK 패킷으로 응답하며 자신의 준비 상태를 알립니다. 마지막으로 클라이언트가 서버의 응답을 확인했다는 의미로 ACK 패킷을 보내면 연결이 확립됩니다.

이 과정을 세 단계로 진행하는 이유는 TCP가 신뢰성 있는 연결을 지향하기 때문입니다. 세 번의 과정을 거침으로써 양쪽 장치 모두 데이터를 보내고 받을 수 있는 상태임을 완벽하게 확인한 후 통신을 시작할 수 있습니다.