TCP 연결 종료 과정 (4-way handshake)

C:\Users\B210145_BK\Downloads\exture_3_5_ubuntu_ticker\send>netstat -an | findstr 21111
  TCP    0.0.0.0:21111          0.0.0.0:0              LISTENING
  TCP    127.0.0.1:52028        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52039        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52041        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52042        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52043        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52044        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52045        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52047        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52048        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52049        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52050        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52054        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52059        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52060        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52062        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52064        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52065        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52066        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52067        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52068        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52069        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52070        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52071        127.0.0.1:21111        TIME_WAIT
  TCP    127.0.0.1:52072        127.0.0.1:21111        TIME_WAIT

TIME_WAIT 상태가 발생하는 이유는 TCP 연결이 정상적으로 종료될 때 클라이언트 또는 서버가 잠시 동안 연결을 유지하는 과정에서 발생합니다. 이 상태는 연결이 완전히 종료되기 전에 남아있는 패킷들이 네트워크에서 잘못 전달되는 것을 방지하고, 이전에 사용된 소켓 번호가 재사용될 때 발생할 수 있는 문제를 방지하기 위해 설계되었습니다.

TCP 연결 종료 과정 (4-way handshake):

  1. FIN_WAIT-1: 클라이언트가 연결 종료를 요청하며 FIN 패킷을 전송합니다.
  2. CLOSE_WAIT: 서버가 FIN 패킷을 받고 ACK(확인 응답)를 보냅니다.
  3. FIN_WAIT-2: 서버가 연결 종료를 요청하며 FIN 패킷을 전송합니다.
  4. TIME_WAIT: 클라이언트가 서버로부터 FIN 패킷을 받고, ACK를 보낸 후 일정 시간 동안 기다립니다.


    TIME_WAIT 상태가 생기는 이유:
    1. 잔여 패킷 방지: 네트워크에서 늦게 도착한 패킷이 새로운 연결에 영향을 주지 않도록 하기 위해, TCP는 TIME_WAIT 상태를 유지하여 그 연결에 대한 패킷이 모두 소진되었음을 확인합니다.
    2. 포트 재사용 방지: 동일한 소켓 번호(포트)를 사용하는 새 연결이 바로 발생할 경우, 이전 연결의 잔여 패킷이 새 연결에 영향을 줄 수 있습니다. TIME_WAIT 상태는 이러한 상황을 방지하는 역할을 합니다.
    기본적으로 TIME_WAIT 상태는 일정 시간이 지나면 자동으로 종료되며, 이는 운영체제에 따라 다를 수 있습니다(일반적으로 2배의 Maximum Segment Lifetime, MSL). TIME_WAIT 상태가 너무 많으면 시스템의 소켓 리소스를 소모할 수 있지만, 이는 TCP 프로토콜의 정상적인 동작의 일환이므로 필요 이상으로 걱정할 필요는 없습니다.

+ Recent posts