3-way 핸드셰이크(Three-way Handshake)란?

TCP에서 연결을 설정하는 절차. 클라이언트의 SYN, 서버의 SYN+ACK, 클라이언트의 ACK의 세 번의 교환으로 서로의 초기 시퀀스 번호를 확인한다.

일본어 명칭: 3ウェイハンドシェイク

3-way 핸드셰이크(Three-way Handshake)은(는) 네트워크 기초 등 1개 분야의 연습 문제 2개에 나와요.

분야: 네트워크 기초

세 번 교환하는 의미

클라이언트는 SYN으로 연결을 요청하면서 자신의 초기 시퀀스 번호를 알립니다. 서버는 SYN+ACK로 그 번호를 받았음을 확인하는 동시에 자신의 초기 시퀀스 번호를 알립니다. 클라이언트가 ACK로 그것을 확인하면 양방향 모두 '상대가 내 번호를 알고 있다'는 것이 확인되어 데이터를 보낼 수 있게 됩니다. 번호를 서로 확인함으로써 네트워크에 남아 있던 오래된 패킷으로 인한 잘못된 연결을 막습니다.

연결에 걸리는 시간

데이터를 보내기 시작할 때까지 적어도 1왕복 시간(RTT)이 걸립니다. HTTPS에서는 그 뒤에 TLS 핸드셰이크도 필요하므로, TLS 1.3이라면 합쳐서 2왕복, TLS 1.2라면 3왕복 뒤에야 비로소 요청을 보낼 수 있습니다. 먼 서버일수록 RTT가 크므로 연결을 재사용하거나(지속 연결), HTTP/3의 QUIC처럼 핸드셰이크를 합치는 등의 방법으로 왕복 횟수를 줄입니다.

종료와 SYN 플러드

연결 종료는 양방향이 각각 FIN과 ACK로 닫으므로 일반적으로 네 번의 교환이 됩니다. 또한 출발지를 위조한 SYN을 대량으로 보내 서버에 설정 중인 연결을 쌓아 두게 하여 자원을 다 써 버리게 하는 공격을 SYN 플러드라고 합니다. 대책으로 상태를 유지하지 않고 응답할 수 있는 SYN 쿠키 등이 사용됩니다.

도전해 보기: 3-way 핸드셰이크(Three-way Handshake) 관련 문제

TCP에서 연결을 설정하는 3-way 핸드셰이크에서 주고받는 패킷의 순서로 올바른 것은?

  1. ASYN → ACK → FIN
  2. BACK → SYN → SYN+ACK
  3. CSYN → SYN+ACK → ACK
정답과 해설 보기

정답: C. SYN → SYN+ACK → ACK

3-way 핸드셰이크에서는 먼저 클라이언트가 SYN으로 연결을 요청하면서 자신이 보낼 데이터의 첫 번호(초기 시퀀스 번호)를 알립니다. 서버는 SYN+ACK로 그것을 받았음을 확인(ACK)하는 동시에 자신의 초기 시퀀스 번호를 알립니다. 마지막으로 클라이언트가 ACK를 돌려보내면 양방향 통신의 준비가 갖추어집니다. 세 번의 교환으로 양쪽 방향의 번호를 서로 확인함으로써, 늦게 도착한 오래된 패킷으로 인한 잘못된 연결 등을 막습니다. 이 때문에 TCP에서는 데이터를 보내기 시작할 때까지 적어도 1왕복 시간(RTT)이 걸립니다. FIN은 연결을 종료할 때 사용합니다.

자주 묻는 질문

왜 두 번이 아니라 세 번의 교환이 필요한가요?

양방향의 초기 시퀀스 번호를 각각 상대가 받았는지 확인해야 하기 때문입니다. 두 번으로는 서버의 번호가 클라이언트에 도착했는지를 서버가 확인할 수 없습니다.

UDP에도 3-way 핸드셰이크가 있나요?

없습니다. UDP는 연결을 설정하지 않으므로 바로 데이터를 보낼 수 있습니다. UDP 위에서 동작하는 QUIC은 암호 키 교환과 합친 독자적인 핸드셰이크를 수행합니다.

해설 속 3-way 핸드셰이크(Three-way Handshake)

3-way 핸드셰이크(Three-way Handshake)이(가) 나오는 문제 (2)

  1. TCP에서 연결을 설정하는 3-way 핸드셰이크에서 주고받는 패킷의 순서로 올바른 것은?
  2. RTT(왕복 시간)가 100 ms인 웹 서버에 HTTPS(TCP 위의 TLS 1.3)로 새로 접속하여, 첫 요청을 보내고 응답을 받기 시작할 때까지 걸리는 시간에 가장 가까운 것은? DNS 이름 해석은 끝났으며, 서버의 처리 시간과 데이터 전송 시간은 무시한다.

관련 용어

TLS DNS(도메인 네임 시스템) HTTP(하이퍼텍스트 전송 프로토콜) 기본 게이트웨이(Default Gateway) 서브넷 마스크(Subnet Mask) 포트 번호(Port Number) ARP(주소 결정 프로토콜) CIDR CSMA/CA DHCP

용어집으로 돌아가기