TCP 3-Way Handshake란?
TCP(Transmission Control Protocol)의 3-Way Handshake는 신뢰할 수 있는 연결을 설정하기 위해 클라이언트와 서버 간에 3단계의 과정을 거치는 절차입니다. 데이터 전송을 시작하기 전에 송수신자 간의 통신이 준비되었음을 확인하고, 네트워크의 상태를 동기화(synchronize)합니다.
3-Way Handshake 과정
-
SYN (Synchronize)
클라이언트 → 서버
- 클라이언트는 서버와 연결을 요청하며 SYN 패킷을 보냅니다.
- 이 패킷에는 클라이언트의 초기 순서 번호(ISN, Initial Sequence Number)가 포함되어 있습니다.
-
SYN-ACK (Synchronize + Acknowledgement)
서버 → 클라이언트
- 서버는 클라이언트의 요청(SYN)을 수락하고, 자신의 초기 순서 번호(ISN)를 포함한 SYN-ACK 패킷을 클라이언트로 전송합니다.
- 또한, 클라이언트의 SYN에 대한 응답(ACK)을 함께 보냅니다.
-
ACK (Acknowledgement)
클라이언트 → 서버
- 클라이언트는 서버의 응답(SYN-ACK)을 확인하고 ACK 패킷을 서버로 전송합니다.
- 이 패킷에는 서버의 ISN에 대한 응답(ACK)이 포함되어 있습니다.
이 과정을 통해 양측이 서로의 통신 준비 상태를 확인하고, 초기 순서 번호를 동기화하게 됩니다.
핸드쉐이크 흐름 요약
- 1단계: Client → Server: SYN (연결 요청)
- 2단계: Server → Client: SYN-ACK (요청 수락 및 응답)
- 3단계: Client → Server: ACK (응답 확인)
TCP 3-Way Handshake의 중요성
- 신뢰성 보장: 데이터 손실을 최소화하기 위해 통신 상대가 준비되었는지 확인.
- 순서 번호 동기화: 데이터 패킷의 순서를 유지하고, 중복 또는 손실된 데이터 처리를 효율적으로 수행.
- 네트워크 상태 확인: 연결을 설정하기 전에 네트워크 환경이 정상인지 확인.
3-Way Handshake의 실제 예시
-
클라이언트:
"서버님, 연결 요청합니다! 제 ISN은 100입니다. (SYN)"
-
서버:
"연결 요청 수락합니다. 제 ISN은 200입니다. 그리고 당신의 ISN 100 확인했습니다. (SYN-ACK)"
-
클라이언트:
"서버님의 ISN 200 확인했습니다. 이제 데이터 전송 준비 완료! (ACK)"
3-Way Handshake와 관련된 주요 개념
-
ISN (Initial Sequence Number)
- 연결 초기화 시 사용하는 초기 순서 번호.
- 송수신 측의 순서 번호를 동기화하여 데이터 전송 순서를 유지.
-
신뢰성 보장
- TCP는 패킷의 손실, 중복, 순서 뒤바뀜 등을 방지하기 위해 순서 번호와 ACK를 사용.
-
소켓 상태
- 클라이언트는
SYN_SENT
, 서버는 SYN_RECEIVED
상태를 거치며 연결 완료 시 ESTABLISHED
상태가 됨.
참고: 4-Way Handshake (연결 종료)
TCP 연결을 종료할 때는 4-Way Handshake를 사용하여 양측이 데이터 송신을 완료했음을 확인하고 연결을 해제합니다.
TCP의 3-Way Handshake는 신뢰성, 순서 보장, 네트워크 준비 상태 확인의 핵심 역할을 합니다.
추가 학습 자료