가상회선을 수립하는 단계이다.
클라이언트는 서버에 요청을 전송할 수 있는지, 서버는 클라이언트에게 응답을 전송할 수 있는지 확인하는 과정이다. SYN, ACK 패킷을 주고받으며, 임의의 난수로 SYN 플래그를 전송하고 ACK 플래그에 1을 더한 값을 전송한다.
SYN (n) ⇒ ACK (n+1), SYN(m) ⇒ ACK (m+1) 순서로 일어난다.
1)클라이언트는 서버에 접속을 요청하는 SYN(a)패킷을 보낸다.
2)서버는 클라이언트의 요청인 SYN(a)를 받고 클라이언트에게 요청을 수락하는 ACK(a+1)와 SYN(b)로 설정된 패킷을 발송한다.
3)클라이언트는 서버의 수락 응답인 ACK(a+1)와 SYN(b)패킷을 받고, ACK(b+1)를 보내면 연결이 성립된다.
*SYN: Synchronize Sequence Number
1.일단 클라이언트는 자신의 목소리가 들리는지 물어본다 -> SYN
2.서버는 클라이언트의 목소리가 들린다고 말한다 -> SYN + 1
그리고 서버 자신의 목소리가 들리는지 물어본다 -> ACK
3.클라이언트는 서버의 목소리가 들린다고 말한다 -> ACK + 1
총 3 번의 신호를 주고받아 TCP connection이 establish된다.
TCP 4 way handshake는 TCP 연결을 해제하는 단계이다.
클라이언트는 서버에게 연결해제를 통지하고 서버가 이를 확인하여 클라이언트에게 이를 받았음을 알리는 패킷을 전송하여 연결이 해제된다. 이때 서버는 클라이언트에게 소켓이 닫혔다고 통지해도 클라이언트 측에서 일정시간 대기한다. 그 이유는 통지 패킷이 나중에 도착할 수 있기 때문이다.
1)클라이언트가 연결을 종료하겠단느 FIN플래그를 전송한다.
2)서버는 클라이언트의 요청(FIN)을 받고 알겠다는 확인 메세지로 ACK를 보낸다.
2-1)그리고 나서 데이터를 모두 보낼 때까지 잠깐 TIME_OUT이 된다.
3)데이터를 모두 보내고 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
4)클라이언트는 FIN메세지를 확인했다는 메세지(ACK)를 보낸다.
5)클라이언트의 ACK메세지를 받은 서버는 소켓 연결을 close한다.
6)클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 것을 대비해 일정 시간 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거친다.(TIME_OUT)