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 不会这样做。

相关内容