UNIX 계열 Docker 컨테이너의 TCP 소켓에 대한 기본 KeepAlive 값은 무엇입니까?

UNIX 계열 Docker 컨테이너의 TCP 소켓에 대한 기본 KeepAlive 값은 무엇입니까?

다음과 같이 TCP 소켓을 생성합니다.

_socket = new Socket(AddressFamily.InterNetwork, 
                     SocketType.Stream,
                     ProtocolType.Tcp);
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
    _socket.ConfigureKeepAlive(true, 5000, 1000);

Docker 컨테이너를 사용하면 ConfigureKeepAlive()실행되지 않지만 이는 소켓이 얼마나 오랫동안 열려 있는지 알 수 없음을 의미합니다. 소스 코드를 보면 ConfigureKeepAlive()다음과 같습니다.

socket.IOControl(IOControlCode.KeepAliveValues, keepAliveValues, null);

이 코드를 이해할 수 없습니다. TCP 소켓의 기본 KeepAlive 값이 무엇인지, 그리고 변수에서 해당 값을 읽는 방법을 설명할 수 있는 사람이 있습니까 _socket?

미리 감사드립니다

추신 1.: 이 플랫폼 정보는 참고용입니다.

Environment.OSVersion    {Unix 5.10.102.1}  System.OperatingSystem

편집하다:Ps2.: 참고를 위해 Docker 컨테이너에 해당하는 몇 가지 정보를 제공합니다.

# uname -a
Linux 0be4318feadd 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 GNU/Linux
# cd /proc/sys/net/ipv4
# cat tcp_keepalive_time
7200
# cat tcp_keepalive_probes
9
# cat tcp_keepalive_intvl
75

tcp_keepalive_time전체 2시간에 해당하는 Docker 컨테이너가 ±5분 후에 연결이 끊어지는 것처럼 보이는 이유는 무엇입니까 ?

답변1

기본값은 운영 체제에 따라 다릅니다.

내가 아는 한, 대부분의 운영 체제는 기본적으로 0 값에 해당하는 연결 유지를 비활성화합니다.

일반적으로 연결이 오랫동안 유지될 것으로 예상되고 패킷이 전송되지 않으면 연결이 중단될 가능성이 있는 경우(예: 상태 저장 방화벽 또는 주문형 연결로 인해)에만 연결 유지를 활성화합니다.

관련 정보