OpenSSH: TCPKeepAlive 옵션의 간격은 얼마나 됩니까?

OpenSSH: TCPKeepAlive 옵션의 간격은 얼마나 됩니까?

sshd 구성에서 옵션을 지정할 수 있습니다 TCPKeepAlive yes. 이러한 패킷은 암호화되지 않으므로 스푸핑될 수 있습니다. 옵션 있음

ClientAliveInterval
ClientAliveCountMax
ServerAliveInterval
ServerAliveCountMax

연결이 끊어지기 전 연결 유지 패킷과 시간 초과(*CountMax) 사이의 간격을 지정할 수 있습니다. 여기도 참조하세요sshd_config의 `ServerAliveInterval` 및 `ClientAliveInterval` 옵션은 정확히 무엇을 합니까?

이를 통해서만 TCPKeepAlive활성화할 수 있습니다. 그렇다면 TCP 패킷 전송 사이의 시간 간격은 얼마나 됩니까? 실패한 패킷이 몇 개나 지나면 연결이 끊어지고 닫힌 것으로 간주됩니까? 기본값은 다음과 같습니다.

#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

내가 이해하는 한: 끊어진/비활성 연결의 감지 및 닫기는 기본 구성의 TCPKeepAlive 옵션에만 의존합니다. 그래서 이 가치를 이해하는 것이 매우 중요합니다.

답변1

OpenSSH가 운영 체제에 의해 구현되는 조정 기능을 제공하지 않는 이유 TCPKeepAlive는 아마도 매개 변수를 켜거나 끄는 유일한 편리한 방법이 없기 때문일 것입니다 setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on_off).

Linux에서는 맨페이지에 설명된 /proc대로 파일 시스템을 통해 기본값을 보고 변경할 수 있습니다 .tcp(7)

grep -T . /proc/sys/net/ipv4/tcp_keepalive*
/proc/sys/net/ipv4/tcp_keepalive_intvl: 75
/proc/sys/net/ipv4/tcp_keepalive_probes:        9
/proc/sys/net/ipv4/tcp_keepalive_time:  7200

따라서 연결이 유휴 상태로 간주될 때까지 2시간을 기다린 후 75초 간격으로 9개의 프로브를 보냅니다.

Linux, FreeBSD 및 NetBSD(OpenBSD는 아님)에서는 소켓별로 이러한 옵션을 변경할 수도 있지만 setsockopt(fd, IPPROTO_TCP, TCP_KEEP{CNT,IDLE,INTVL}, &val) 앞서 언급한 것처럼 OpenSSH는 이를 수행하지 않습니다.

관련 정보