1. 먼저 클라가 연결 닫으려 할 때, FIN 으로 설정된 세그먼트 보냄. 그리고 클라는 FIN_WAIT_1 상태로 들어가고 서버 응답 기다림
  2. 서버는 클라로 ACK 라는 승인 세그먼트 보내고 CLOSE_WAIT 상태에 들어감. 클라가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어감
  3. 서버는 LAST_ACK 상태가 되며 일정 시간 이후에 클라에 FIN 이라는 세그먼트 보냄
  4. 클라는 TIME_WAIT 상태 되고 다시 서버로 ACK 보내서 서버는 CLOSED 상태가 되며, 이후 클라는 어느 정도 시간(TIME_WAIT으로 설정된 시간)을 대기한 후 연결이 닫힘
  • 세션 종료 위함

TIME_WAIT

  • 지연 패킷 발생 시 데이터 무결성 해결하기 위함
  • 두 배의 최대 세그먼트 수명(MSL) 시간 기다림
  • 기본적으로 MSL은 2분
  • 소켓이 바로 소멸 되지 않고 일정 시간 유지되는 상태를 말하며 지연 패킷 등의 문제점 해결하는데 쓰임
  • 또한 연결을 올바르게 닫힌 상태로 만들기 위해 존재
    • 예를 들어 CLOSED 가 아닌 LAST_ACK 으로 되어 있으면 그 다음 연결 때 오류가 생김
  • CentOS6, Ubuntu 는 60초, 윈도우는 4분