Linux

OpenSSH:TCPKeepAlive 選項的間隔是多少?

  • February 21, 2020

在 sshd 配置中,您可以指定選項TCPKeepAlive yes。這些 Paket 未加密,因此可能會被欺騙。與選項

ClientAliveInterval
ClientAliveCountMax
ServerAliveInterval
ServerAliveCountMax

您可以指定保持活動數據包的間隔和斷開連接的超時時間 (*CountMax)。另請參閱此處sshd_config 中的“ServerAliveInterval”和“ClientAliveInterval”選項究竟是做什麼的?

TCPKeepAlive您只能啟用它。那麼發送 TCP-Pakets 的間隔是多少呢?在多少個不成功的數據包之後,連接被視為斷開並關閉?由於預設值為:

#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

據我了解:斷開/非活動連接的檢測和關閉僅取決於預設配置中的 TCPKeepAlive 選項。因此,了解這些價值觀非常重要。

OpenSSH 不提供任何調整TCPKeepAlive(由作業系統實現)的原因可能是因為沒有可移植的方法來更改其參數;唯一便攜的東西是用setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on_off).

/proc在 Linux 上,您可以通過文件系統查看(並更改)預設值,如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 不會這樣做。

引用自:https://unix.stackexchange.com/questions/568872