更改IP地址后,TCP套接字状态将保持不变,即使提前配置了保持活动状态

时间:2020-08-07 05:46:18

标签: sockets tcp tcp-keepalive

我遇到了有关TCP套接字keepalive的问题。

在套接字连接后启用并配置TCP keep-alive,并且系统具有自己的TCP keep-alive配置。

的-to'可以显示连接的保持活动信息。

网络接口是PPPOE设备,如果我们将接口打开,它将获得一个新的IP地址。并且旧的TCP连接将一直保持建立状态,直到保持活动超时为止。

但有时'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)

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

1 个答案:

答案 0 :(得分:1)

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

有关更详细的信息,请参见The Cloudflare Blog: When TCP sockets refuse to die