3-Way Handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
TCP 3 way handshake를 간단히 표현하면 다음과 같다.

[STEP 1]
클라이언트는 서버와 커넥션을 연결하기 위해 SYN(x) 을 보낸다.
[STEP 2]
서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK(x+1)와 SYN(y) 패킷을 보낸다.
[STEP 3]
클라이언트는 서버의 응답은 ACK(x+1)와 SYN(y) 패킷을 받고, ACK(y+1)를 서버로 보낸다.
3 way handshake와 반대로 연결을 해제할 때 주고 받는 확인작업이다. 이 역시 4번의 확인과정을 거친다고 하여 4 way handshake라고 부른다.
TCP 4 way handshake를 간단히 표현하면 다음과 같다.

[STEP 1]
클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.
[STEP 2]
서버는 FIN 플래그를 받고, 일단 확인했다는 ACK를 클라이언트에게 보내고 모든 데이터를 보낼 때까지 기다리는 CLOSE_WAIT 상태에 들어간다.
→ Client가 데이터 전송을 마쳤다고 하더라도 Server는 아직 보낼 데이터가 남아있을 수 있기 때문에
[STEP 3]
서버가 데이터를 모두 보냈다면, 서버는 연결 종료에 합의 한다는 의미로 FIN 패킷을 클라이언트에게 보낸다.
[STEP 4]
TIME_WAIT을 통해 기다린다. → TIME_WAIT 시간이 끝나면, CLOSED 상태가 된다.