문제

루프백 인터페이스에 대한 TCP 연결이 TIME_WAIT (소켓이 닫혔습니다 SO_DONTLINGER 세트), 그러나 다른 호스트에 대한 동일한 연결은 끝나지 않습니다. TIME_WAIT (즉시 재설정/파괴됩니다)?

설명 할 시나리오는 다음과 같습니다.

(a) 클라이언트와 서버의 두 가지 응용 프로그램이 동일한 Windows 시스템에서 실행 중입니다. 클라이언트는 서버의 루프백 인터페이스 (127.0.0.1, 포트 XXXX)를 통해 서버에 연결하고 데이터를 보내고 데이터를 수신하고 소켓을 닫습니다 (SO_DONTLINGER 설정).

연결이 있다고 가정 해 봅시다 매우 수명이 짧으므로 클라이언트 앱은 매 초마다 많은 수의 연결을 설정하고 파괴하고 있습니다. 최종 결과는 소켓이 TIME_WAIT, 클라이언트는 결국 최대 소켓 수를 소진합니다 (Windows에서는 기본적으로 ~ 3900 이며이 값이 레지스트리에서 변경되지 않는다고 가정합니다).

(b) 시나리오 (a)와 동일한 두 응용 프로그램이지만 서버는 다른 호스트에 있습니다 (클라이언트는 여전히 Windows에서 실행 중). 연결은 127.0.0.1이 아니라 다른 IP로 운명되지 않는다는 점을 제외하고는 모든면에서 동일합니다. 여기서 클라이언트 컴퓨터의 연결은 들어 가지 않습니다. TIME_WAIT, 클라이언트 앱은 계속해서 연결을 계속 만들 수 있습니다.

왜 불일치?

도움이 되었습니까?

해결책

time_wait 상태는 연결의 한쪽 끝에서만 발생합니다. 루프백 인터페이스의 경우 양쪽 끝이 동일한 시스템에 있으므로 항상 Time_wait을 볼 수 있습니다.

다른 경우 다른 기계를 살펴보십시오. 나는 거기에서 Time_wait 소켓을 볼 것이라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top