RSH가 stderr 소켓 닫기를 지연합니까?

RSH가 stderr 소켓 닫기를 지연합니까?

환경: CentOS 6.6

이 간단한 테스트를 실행할 때(에서 myclient):

while true; do rsh myserver "echo OK"; done

약 500번의 반복 후에 서버에 포트가 부족해졌습니다.

netstat -anp서버에 표시되는 내용:

tcp        0      0 myserver:1008              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:975               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:998               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:991               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1007              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1000              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:990               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:979               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1003              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:988               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:984               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1002              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:997               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1019              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:995               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:993               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1004              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1017              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1013              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1011              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1009              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:994               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:987               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:986               myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1012              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1010              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:1014              myclient:922              TIME_WAIT   -
tcp        0      0 myserver:996               myclient:922              TIME_WAIT   -

922RSH stderr 포트입니다(wireshark를 사용한 모니터링에서).

약 1분 후에 서버의 소켓이 닫히고 새 연결이 설정될 수 있습니다.

따라서 클라이언트나 서버가 이러한 소켓을 제대로 닫을 수 없어 시간이 초과되는 것 같습니다.

이것은 rsh의 버그입니까?

이 문제를 해결할 방법이 있나요? BSD의 rsh에는 --no-stderr옵션이 있지만 Linux에는 옵션이 없는 것 같습니다.

답변1

전에도 이런 문제가 있었습니다... TIME_WAIT는 TCP/IP의 인공물이므로 계속 사용하면 됩니다. /proc를 통해 조정할 수 있습니다(참조:서버 장애 23385) 그러나 더 나은 접근 방식은 필요한 만큼 오랫동안 작동하는 영구 소켓을 여는 솔루션이 될 것입니다.

  생성된 라인 수 | ssh myhost '동시에 라인 읽기; echo ":$line" 완료;'

이렇게 하면 클라이언트가 서버에 보내는 내용에 따라 연결이 많은 작업을 수행하도록 할 수 있습니다.

관련 정보