3-Way Handshake(3단계 핸드셰이크)는 TCP(Transmission Control Protocol) 연결을 설정하기 위한 과정으로, 클라이언트와 서버가 통신 준비가 되었음을 확인하고 신뢰성 있는 연결을 보장하기 위해 사용됩니다.
SYN(Synchronize)
클라이언트가 서버에 연결을 요청합니다.
클라이언트는 초기 시퀀스 번호(Sequence Number)를 포함한 SYN 패킷을 서버로 전송합니다.
클라이언트 → 서버 : SYN
SYN-ACK(Synchronize-Acknowledge)
서버가 클라이언트의 요청을 수락하며, 클라이언트에게 자신도 연결 준비가 되었음을 알립니다.
서버는 클라이언트의 SYN에 대한 응답으로 ACK(응답)와 자신의 초기 시퀀스 번호를 포함한 SYN 패킷을 보냅니다.
서버 → 클라이언트 : SYN-ACK
ACK(Acknowledge)
클라이언트는 서버가 보낸 SYN-ACK에 대한 응답으로 ACK를 전송하여 연결 설정을 완료합니다.
클라이언트 → 서버 : ACK
클라이언트 → 서버 (SYN)
클라이언트: "연결 요청합니다. 제 초기 시퀀스 번호는 X
입니다."
서버 → 클라이언트 (SYN-ACK)
서버: "요청 수락합니다. 제 초기 시퀀스 번호는 Y
이고, 당신의 요청을 확인했습니다(ACK)."
클라이언트 → 서버 (ACK)
클라이언트: "확인했습니다. 연결 시작합시다."
신뢰성 보장
양측이 서로의 연결 준비 상태를 확인하여 데이터 전송을 시작합니다.
시퀀스 번호 동기화
TCP는 데이터를 시퀀스 번호로 관리하므로, 양측 간 번호를 초기화하고 동기화합니다.
패킷 손실 방지
연결 설정 중 데이터 손실이나 오류 발생 가능성을 줄입니다.
1. SYN: 클라이언트 → 서버
TCP 192.168.0.10:1024 → 192.168.0.20:80 [SYN] Seq=0 Win=65535 Len=0
2. SYN-ACK: 서버 → 클라이언트
TCP 192.168.0.20:80 → 192.168.0.10:1024 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0
3. ACK: 클라이언트 → 서버
TCP 192.168.0.10:1024 → 192.168.0.20:80 [ACK] Seq=1 Ack=1 Win=65535 Len=0
3-Way Handshake는 연결을 설정하는 과정입니다.
연결을 종료할 때는 4-Way Handshake라는 과정이 사용됩니다: