✔ TCP는 정확한 전송을 보장해야한다.
✔ 따라서 통신하기에 앞서 논리적인 접속을 성립하기 위해 3 way handshake 과정을 진행한다.
✔ 연결 성립 후, 모든 통신이 끝났다면 연결을 해제한다.
Client가 Server에 연결 요청을 위해 SYN
패킷을 보낸다. SYN_SENT
상태로 대기한다.
Server는 SYN_RECIEVE
상태로 변경한다. 요청에 대한 대답 ACK
와 SYN
패킷을 보낸다.
Client는 Server에게 응답 ACK
를 보내고 ESTABLISHED
상태로 변경한다. ACK를 받은 서버도 ESTABLISHED
상태로 변경한다.
위와 같이 3번의 통신이 완료되면 연결이 성립된다.
Client는 Server에게 연결을 종료한다는 FIN
플래그를 보내고 FIN_WAIT1
상태로 대기한다.
Server는 CLOSE_WAIT
상태로 변경하고 응답 ACK
를 보낸다. 해당 포트에 연결된 어플리케이션에 close()를 요청한다. ACK
를 받은 Client는 FIN_WAIT2
상태가 된다.
close()요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 Server는 FIN
플래그를 Client에 보낸다. 이 때 Server는 LAST_ACK
상태로 변경한다.
Client는 FIN
을 받고 응답 ACK
를 보내고 TIME_WAIT
상태로 변경한다. ACK
를 받은 Server는 CLOSED
되고 TIME_WAIT
에서 일정 시간이 지나면 Client도 CLOSED
된다.
위와 같이 4번의 통신이 완료되면 연결이 해제된다.