0

我遇到了一个关于 TCP socket keepalive 的问题。

TCP keep-alive 在 socket 连接后启用和配置,系统有自己的 TCP keep-alive 配置。

'ss -to' 可以显示连接的存活信息。

网络接口是一个 PPPOE 设备,如果我们 ifup 接口,它将获得一个新的 ip 地址。并且旧的 TCP 连接将保持建立,直到 keep-alive 超时。

但有时 'ss -to' 表明 tcp 连接变为 'persist',需要很长时间(大约 15 分钟)才能关闭。

以下是“ss -to”的结果:

ESTAB   0        591           172.0.0.60:46402        10.184.20.2:4335     timer:(persist,1min26sec,14)

源地址为“172.0.0.60”,但网络接口的实际地址已更新为“172.0.0.62”。

这是 'ss -to' 的正确结果:

ESTAB  0        0             172.0.0.62:46120       10.184.20.2:4335    timer:(keepalive,4.480ms,0)

我不知道为什么“计时器”被更改为“持久”,这使得保持活动被禁用。

4

1 回答 1

1

简而言之:TCP keepalive 仅在连接空闲时才相关,即没有数据要发送。相反,如果仍有数据要发送,但由于缺少 ACK 或窗口为 0 而当前无法发送,则其他超时是相关的。这可能是您的问题。

有关更深入的详细信息,请参阅Cloudflare 博客:当 TCP 套接字拒绝死亡时

于 2020-08-07T07:14:34.793 回答