1. 연결이 되어 있는 상태(Establish)에서 연결을 종료하고자 하는 client는 TCP Header의 flags 필드의 FIN을 1로 세팅하여 전송하고 소켓을 FIN_WAIT_1로 변경합니다.
2. FIN을 받은 server는 CLOSE_WAIT 상태로 변경되며 FIN에 대응되는 ACK를 전송해줍니다.
3. ACK 전송을 받은 Client는 FIN_WAIT_2 상태로 변경되며 server의 FIN을 기다립니다.
4. Server는 연결 종료를 위해 FIN 패킷을 client에게 전송하며 소켓을 LAST_ACK 상태로 변경합니다.
5. FIN을 받은 Client는 TIME_WAIT 상태로 변경되며 FIN에 대응되는 ACK를 Server에 전송합니다.
6. ACK를 받은 Server는 소켓을 Closed 상태로 변경합니다.
7. 시간이 경과하면, Client도 소켓을 Closed 상태로 변경합니다.
1. 소켓을 작성하고 접속 대기 상태로 만듭니다.
2. 3-Way HandShaking을 통해 접속 동작을 실행합니다.
3. 웹의 데이터 송수신 단계에서 클라이언트가 리퀘스트 메시지를 보내는 것부터 시작합니다.
4. TCP는 이것을 MSS, MTU, 타이머등을 고려해서 적당한 크기로 분할 후 TCP 헤더를 맨 앞에 부가하여 서버에 보냅니다.
5. 메시지가 서버에 도착하면 ACK를 클라이언트에 보냅니다.(그 다음은 반대)
6. 이렇게 클라이언트와 서버가 ACK와 데이터를 주고받는 것을 반복합니다.
7. 클라이언트가 데이터 보내기를 완료하면 데아터 송수신 동작이 끝나므로 연결 끊기 동작에 들어갑니다.
8. 4-Way HandShaking을 통해 접속 끊기 단계로 들어갑니다.