Three-Way Handshake
모든 TCP 연결은 three-way handshake로 시작한다. Client나 Server가 응용프로그램의 데이터를 교환하기 전에 반드시 양쪽 둘다 수많은 명시적인 값들 뿐만아니라 packet이 시작하는 sequence 숫자에 동의를 해야만한다. Sequece Number는 보안의 이유때문에 양쪽에서 임의로 선택된다.
SYN
Client는 임의의 Sequence Number x 를 선택하고 TCP 플래그와 옵션들을 포함하고 있을 수 있는 SYN 패킷을 보낸다.
SYN ACK
Server 는 x를 1증가 시키고 서버의 임의의 Sequence Number Y를 선택해서 response에 플래그와 옵션들에 추가해서 보낸다.
ACK
Client는 X와 Y를 1씩을 더하고 마지막 ACK 패킷을 보냄으로 handshake 과정을 끝마친다.
일단 Three-Way Handshake가 종료되면, Client와 Server간에 응용프로그램 데이터를 주고받을 수 있다. Client는 ACK 패킷 이후에 바로 데이터를 보낼수 있고 Server는 ACK이 도착하지 않으면 패킷이 도달할 때까지 기다려야 한다. 이 시작의 과정은 모든 TCP 연결에 적용되고 TCP를 사용하는 네트워크 응용프로그램에 모든 성능에 영향을 끼친다. 모든 새로운 연결은 응용 프로그램 데이터를 전달하기 전에 round trip 지연이 발생한다.
예를들어 Client는 New York에 있고 Server는 런던에 있다고 가정하면 광랜선을 통해 새로운 TCP연결이 수립된다 그리고 Three-Way Handshake가 최소 56밀리세크 만큼 발생한다. 28 밀리세크는 한방향으로 패킷이 전달될때 발생하고 반드시 그후에는 패킷이 New York으로 돌아와야 한다. 연결의 대역폭은 특별한 역할이 없다 대신에 지연은 Client와 Server간의 전달시간만큼의 대기시간에 의해 발생한다.
새로운 TCP를 생성할 때 Three-Way Handshake의 지연이 발생된다. 새로운 연결에서 발생되는 지연시간은 TCP를 사용하는 어떤 프로그램이든 중요한 최적화방법중 TCP 연결을 재사용하는 이유이기도 하다.