프로그램이 종료 된 후 수신 TCP 포트를 정리하는 데 몇 분이 걸리는 이유는 무엇입니까?


27

TCP 포트에서 수신 대기중인 프로그램을 종료하면 시스템이 포트를 회수하여 다시 사용할 수있을 때까지 몇 분이 걸립니다. 나는이 현상에 대해 몇 가지 Q / A를 보았지만 설명은 없습니다. 왜 그런 일이 발생합니까, 왜 시스템이 포트를 바로 회수하지 않습니까? Windows 또는 Mac과 같은 다른 시스템에서도 발생합니까?

답변:


25

이 배후의 아이디어는 해당 포트에서 수신 대기중인 이전 프로그램을 대상으로하는 패킷을받지 않도록하는 것입니다. 이 TIME_WAIT상태는 RFC793 에서 최대 세그먼트 수명의 두 배로 정의됩니다 .

다른 운영 체제에 대해서는 잘 모르지만 이러한 운영 체제에는 모두 비슷한 동작이 있다고 가정합니다.

이 문제의 해결 방법 SO_REUSEADDRTIME_WAIT상태를 무시해야하는 소켓 에 설정 하는 것 입니다.


3
신뢰할 수있는 TCP 상태 다이어그램을 확인하면 TIME_WAIT가 소켓의 마지막 상태이며 일반적으로 최대 세그먼트 수명의 두 배인 2MSL 동안 지속됨을 알 수 있습니다. 스펙 (RFC793)은이를 2 분으로 표시하여 총 4 분을 제공합니다. 이를 통해 여전히 "비행 중"인 요청 및 응답을 처리하고 올바른 프로그램에 도달하거나 소켓이 TIME_WAIT에있는 경우 폐기 할 수있는 충분한 시간이 허용됩니다.
Faelkle

나는 이것이 Windows에서도 발생한다는 것을 확인할 수 있습니다.
Thomas Bratt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.