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):
- FIN_WAIT-1: 클라이언트가 연결 종료를 요청하며 FIN 패킷을 전송합니다.
- CLOSE_WAIT: 서버가 FIN 패킷을 받고 ACK(확인 응답)를 보냅니다.
- FIN_WAIT-2: 서버가 연결 종료를 요청하며 FIN 패킷을 전송합니다.
- TIME_WAIT: 클라이언트가 서버로부터 FIN 패킷을 받고, ACK를 보낸 후 일정 시간 동안 기다립니다.
TIME_WAIT 상태가 생기는 이유:- 잔여 패킷 방지: 네트워크에서 늦게 도착한 패킷이 새로운 연결에 영향을 주지 않도록 하기 위해, TCP는 TIME_WAIT 상태를 유지하여 그 연결에 대한 패킷이 모두 소진되었음을 확인합니다.
- 포트 재사용 방지: 동일한 소켓 번호(포트)를 사용하는 새 연결이 바로 발생할 경우, 이전 연결의 잔여 패킷이 새 연결에 영향을 줄 수 있습니다. TIME_WAIT 상태는 이러한 상황을 방지하는 역할을 합니다.