TCP 3-Way Handshake 제대로 이해하기

TCP 3-Way Handshake란?

TCP(Transmission Control Protocol)는 데이터를 안정적으로 주고받기 위해 통신 전에 반드시 ‘연결’을 먼저 맺습니다. 이때 사용되는 절차가 바로 3-Way Handshake입니다. 이름 그대로 클라이언트와 서버가 총 세 번의 메시지를 주고받으며 서로 통신할 준비가 되었는지 확인하는 과정입니다. 마치 전화를 걸 때 ‘여보세요?’라고 말하고, 상대방이 ‘네, 들립니다’라고 답하며, 다시 ‘저도 잘 들려요’라고 확인하는 과정과 비슷합니다. 이렇게 서로의 상태를 확인해야만 본격적인 대화, 즉 데이터 전송이 시작될 수 있습니다.

동작 원리: SYN, SYN-ACK, ACK

3-Way Handshake는 세 개의 패킷 교환으로 이루어지며, 각 단계는 TCP 헤더의 플래그(flag) 값으로 구분됩니다.

  • 1단계 (SYN): 클라이언트가 서버에 연결을 요청하며 ‘SYN’ 플래그가 설정된 패킷을 보냅니다. 이때 임의의 초기 시퀀스 번호(ISN)도 함께 전달합니다.
  • 2단계 (SYN-ACK): 서버는 요청을 수락한다는 의미로 ‘SYN’과 ‘ACK’ 플래그를 모두 설정한 패킷을 응답으로 보냅니다. 서버 역시 자신의 초기 시퀀스 번호를 함께 실어 보냅니다.
  • 3단계 (ACK): 클라이언트는 서버의 응답을 잘 받았다는 뜻으로 ‘ACK’ 플래그가 설정된 패킷을 다시 보냅니다.

이 과정이 끝나면 양쪽 모두 상대방이 데이터를 주고받을 준비가 되었음을 확인하게 되고, 이때부터 실제 데이터 전송이 시작됩니다. 참고로 연결을 종료할 때는 4-Way Handshake라는 별도의 절차를 거칩니다.

실무에서 왜 중요한가

3-Way Handshake를 이해하면 네트워크 트러블슈팅이 훨씬 수월해집니다. 예를 들어 서버 응답이 느리거나 연결이 자주 끊기는 문제를 마주쳤을 때, Wireshark 같은 패킷 분석 도구로 SYN 패킷만 나가고 SYN-ACK 응답이 오지 않는다면 방화벽 차단이나 서버 다운을 의심해볼 수 있습니다. 또한 대량 트래픽으로 서버 자원을 고갈시키는 ‘SYN Flooding’ 공격도 이 핸드셰이크 과정의 취약점을 악용한 대표적인 사례입니다. 서버가 SYN 요청에 대해 SYN-ACK를 보낸 뒤 클라이언트의 ACK를 기다리는 반열림(half-open) 상태를 대량으로 만들어 자원을 소진시키는 방식이죠. 이런 원리를 알면 로드밸런서나 방화벽 설정, API 응답 지연 원인 분석 등 실무 다양한 상황에서 훨씬 정확한 판단을 내릴 수 있습니다.

댓글 남기기