3-Way Handshake는 TCP의 접속, 4-Way Handshake는 TCP의 접속 해제 과정
SYN(synchronize sequence numbers): 연결 확인을 위해 보내는 무작위의 숫자 값
ACK(acknowledgements): Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK

먼저 Open 한 클라이언트가 SYN(내 말 들려?)를 보내고 SYN_SENT 상태로 대기한다.
서버는 SYN-RECEIVED 상태로 바꾸고 SYN과 응답 ACK(어 잘 들려! 내 말은 들려?)를 보낸다.
SYN과 응답 ACK를 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK(잘 들려!)를 보낸다.
응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.

먼저 Close를 실행한 클라이언트가 FIN(연결 끊자!)을 보내고 FIN_WAIT_1 상태로 대기한다.
서버는 CLOSE_WAIT으로 바꾸고 응답 ACK(알겠어! 잠시만~)를 전달한다. 동시에 해당 포트에 연결되어 있는 애플리케이션에게 close를 요청한다.
ACK를 받은 클라이언트는 상태를 FIN-WAIT-2로 변경한다.
close 요청을 받은 서버 애플리케이션은 종료 프로세스를 진행하고 FIN(나도 끊을게!)을 클라이언트로 보내 LAST_ACK 상태로 바꾼다.
FIN을 받은 클라이언트는 ACK(알겠어!)를 서버에 다시 전송하고 TIME_WAIT으로 상태를 바꾼다. TIME-WAIT에서 일정 시간이 지나면 CLOSE 된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.
TIME_WAIT: 먼저 연결을 끊는 쪽에서 생성되는 소켓으로, 혹시 모를 전송 실패에 대비하기 위해 존재하는 소켓
TIME-WAIT이 없다면, 패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 되지 않을 수 있다.
참고
TCP와 UDP의 특징 및 차이점 알아보기
[네트워크] TCP/UDP와 3 -Way Handshake & 4 -Way Handshake