연결을 성립하고 해제하는 과정을 말한다.
TCP는 정확한 전송을 보장해야 한다. 따라서 통신을 하기에 앞서, 논리적인 접속을 성립하기 위해 3 way handshake 과정을 진행한다.
SYN: Synchronize Sequence Number
ACK: Acknowledgment
TCP 3-way Handshaking 과정
#1. 클라이언트는 서버에 접속을 요청하는 SYN
패킷을 보낸다. 이때 A클라이언트는 SYN
을 보내고 SYN/ACK
응답을 기다리는 SYN_SENT
상태로 전환된다.
#2. 서버는 SYN
요청을 받고 클라이언트에게 요청을 받았다는 ACK
와 SYN flag
가 담긴 패킷을 발송하고 클라이언트의 ACK
의 응답을 기다린다. 이때 서버는 SYN-RECEIVED
상태로 전환된다.
#3. 클라이언트는 서버에게 ACK
를 보내고 가상의 논리적 연결망을 수락하게 된다. 이후 상태는 ESTABLISHED로 변환되게 된다. 최적화를 통해 #3의 과정에서 데이터를 담아 보낼 수 도 있다.
연결 성립 후, 모든 통신이 끝났다면 해제해야 한다.
클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.
서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다. (이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다.)
데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.
클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다. (아직 서버로 부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다.)