TCP 3-way handshake란 TCP에서 처음에 연결을 수립할 때 사용되는 절차로 클라이언트와 서버 간에 총 3번의 메시지(세그먼트)를 교환하는 과정을 포함한다.
https://ghs4593.tistory.com/18
클라이언트가 서버에 연결을 요청하기 위해 SYN 플래그를 보낸다. 여기에는 Sequence Number가 포함되어 있다. 클라이언트가 SYN_SENT 상태로 변하고 서버는 LISTEN 상태에서 클라이언트가 보낸 SYN을 받는다. 이에 대한 응답으로 Sequence Number에 1을 더한 값으로 ACK 플래그를 전송하고 서버는 SYN_RECEIVED 상태로 변한다. 다시 클라이언트는 서버가 보낸 ACK과 SYN을 받게 되고 서버가 보낸 SYN 값에 1을 더한 값을 ACK에 담아 보냄으로써 클라이언트와 서버 간에 연결이 성립하게 된다.
연결이 맺어질 때와 같이 연결이 끊어질 때도 이와 비슷한 순서로 진행된다. 이를 4-way handshake라 한다.
https://ghs4593.tistory.com/18
3-way handshake와 비슷하게 진행되지만 잘 봐야 하는 부분이 있다. 바로 클라이언트의 TIME_WAIT 부분인데, 해당 부분은 서버가 FIN을 보내기 전에 만약 패킷을 보냈는데 어떤 이유로 인해 패킷이 FIN보다 늦게 도착한다면 패킷이 유실될 것을 방지하기 위해 CLOSED 전에 MSL(Maximum Segment Life) 동안 대기하는 과정을 말한다.