3 Way Handshake 란?
- TCP에서의 연결 설정을 3단계 핸드셰이크(3 Way Handshake)라고 부른다.
- 이 절차에서 클라이언트라고 하는 응용 프로그램은 ‘서버’라고 하는 또 다른 응용프로그램과 전송 계층 프로토콜인 TCP를 이용하여 연결을 설정하고자 한다.
3 Way Handshake 특징
- 3단계 핸드셰이크 절차는 서버에서부터 시작한다.
- ‘서버 프로그램’은 자신의 TCP에게 연결을 수락할 준비가 되어 있다는 것을 알린다.
- 이러한 요청을 수동 개방(Passive Open)이라고 한다.
- ‘클라이언트 프로그램’은 능동 개방(active open)을 위한 요청을 실행한다.
3 Way Handshake 절차
- 클라이언트는 첫 번쨰 세그먼트로서 SYN 플래그가 1로 설정된 SYN 세그먼트를 전송한다.
- 이 세그먼트는 순서 번호의 동기화가 목적이다.
- SYN 세그먼트는 단지 하나의 제어 세그먼트이며 어떠한 데이터도 전달하지 않는다.
- 데이터 전송이 시작되면 순서 번호는 1만큼 증가한다.
- 결론 : SYN 세그먼트는 데이터를 전달하지는 않지만 하나의 순서 번호를 소비한다.
- 서버는 두 번째 세그먼트로서 SYN와 ACK 플래그 비트가 각각 1로 설정된 SYN + ACK 세그먼트를 전송한다.
- 서버는 서버로부터 클라이언트로 전송되는 바이트의 순서화를 위한 순차 번호를 초기화하기 위하여 이 세그먼트를 사용한다.
- 이 세그먼트는 확인 응답 번호를 포함하고 있으며, 흐름 제어 절에서 살펴볼 (클라이언트에 의해서 사용되는) 수신 윈도우 크기인 rwnd를 포함한다.
- 결론 : SYN + ACK 세그먼트는 데이터를 전달하지는 않지만 하나의 순서 번호를 소비한다.
- 클라이언트는 세 번째 세그먼트를 전송한다.
- 이것은 단순히 ACK 세그먼트이다.
- 이 세그먼트에 있는 순서 번호는 SYN 세그먼트에 있는 것과 동일한 값으로 설정된다.
- ACK 세그먼트는 어떤 순서 번호도 소비하지 않기 때문이다.
- 클라이언트는 또한 서버의 윈도우 크기를 결정해야 한다.
- 어떤 구현에서는 연결 단계에 있는 이러한 세 번쨰 세그먼트에 클라이언트로부터 들어온 데이터들을 포함하여 전달할 수 있다.
- 결론 : ACK 세그먼트는 데이터를 전달하지 않는 경우에는 순서 번호를 소비하지 않는다.