TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 3-way handshake를 사용한다.
TCP 3-Way Handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
신뢰성을 위해 3번의 핸드쉐이킹을 거쳐 연결을 맺는 것
Client > Server : TCP SYN
Server > Client : TCP SYN ACK
Client > Server : TCP ACK
[1단계] 클라이언트 --- SYN ---> 서버
SYN 비트는 1로 설정최초의 순서번호(client_isn)를 무작위로 설정SYN 세그먼트를 수신한다.[2단계] 클라이언트 <--- (ACK + SYN) --- 서버
SYN 세그먼트에 대한 ACK 세그먼트를 전송확인응답 필드는 client_isn + 1로 설정최초의 순서번호(sever_isn)도 무작위로 설정한다.SYN 세그먼트 전송SYN RCVD의 상태로 클라이언트의 ACK를 기다린다.SYNACK 세그먼트라고 부른다. [3단계] : 클라이언트 --- (ACK) ---> 서버
SYN 세그먼트에 대한 ACK 세그먼트를 전송TCP 세그먼트 헤더의 확인응답 필드 안에 server_isn+1 값을 넣는 것으로 서버가 연결 승인을 확인할 수 있게 한다.SYNACK 세그먼트를 수신하면 연결에 버퍼와 변수들을 할당한다.

[1단계] : 클라이언트 --- (SYN) ---> 서버
[2단계] : 클라이언트 <--- (SYN) --- 서버
서버가 전송한 Segment의 순서를 구분할 수 없다.


3-way handshake는 TCP의 연결을 초기화할 때 사용한다면, 4-way handshake는 세션을 종료하기 위해 수행한다.

이것을 “Simultaneous Open” 이라고 한다.
TCP 는 두 개의 파이프를 사용하는 양방향 전이중 통신에 해당한다.
연결이 된 후에는 자연스럽게 양방향 데이터 전송이 가능하다.

SYN Flooding은 네트워크 보안 공격 중 하나로, 공격자가 대상 서버에 대량의 TCP SYN 요청 패킷을 보내서 서버의 리소스를 고갈시키는 공격이다.

[1단계] : 공격자 --- (SYN) ---> 서버
[2단계] : 공격자 <--- (SYN+ACK) --- 서버
SYN+ACK패킷을 전송하고 ACK를 받을 때까지 대기한다.half-open 상태가 된다.half-open 연결이 계속 쌓이고, 서버의 연결 테이블이 고갈되어 서비스 고갈 상태가 된다.[1단계] : 클라이언트 --- (SYN) ---> 서버
TCP 순서번호(Sequence number)를 만든다. 이 순서번호가 SYN Cookie가 된다.[2단계] : 클라이언트 <--- (ACK + SYN) --- 서버
SYN+ACK 패킷의 ISN에 쿠키 값을 넣어서 전송한다.[3단계] : 클라이언트 --- (ACK) ---> 서버
ACK 응답 패킷을 보낸다.ACK 응답 패킷의 확인응답 번호를 확인한다.확인 응답 번호는 이전 SYNACK의 순서번호에 1을 더한 값과 같다.