合 Linux和Windows平台上tcp_keepalive_time、tcp_keepalive_intvl和tcp_keepalive_probes的配置
Tags: OSDCDtcp_keepalive_probestcp_keepalive_intvltcp_keepalive_time
简介
在 Linux 中,tcp_keepalive_time
、tcp_keepalive_intvl
和 tcp_keepalive_probes
是与 TCP keepalive 相关的参数。
TCP keepalive 是一种机制,用于检测长时间处于空闲状态的 TCP 连接是否仍然处于活动状态。当一条 TCP 连接处于空闲状态时,操作系统会定期发送一些特殊的数据包,称为 keepalive 数据包,以确认对端是否仍然在线。如果一段时间内没有收到响应,操作系统就会判断连接已经失效,并关闭连接。
Linux
tcp_keepalive_time
: 表示 TCP keepalive 起用的时间,即当一条 TCP 连接在该时间内没有任何数据交互时,操作系统开始发送 keepalive 数据包。该值通常为 7200 秒(2 小时),可以根据需要调整。以秒为单位tcp_keepalive_intvl
: 表示操作系统发送 keepalive 数据包的间隔时间。该值通常为 75 秒,可以根据需要调整。tcp_keepalive_probes
: 表示发送 keepalive 数据包的最大次数。当这些次数用完后,操作系统将认为连接已经失效,并关闭连接。该值通常为 9 次,可以根据需要调整。如果发送9个keepalive探测包后对端仍然没有响应,就关掉这个连接
这些参数通常需要根据实际情况进行调整。如果 TCP 连接的空闲时间较长,可以增加 tcp_keepalive_time
的值。如果网络较不稳定,则可以减少 tcp_keepalive_intvl
和增加 tcp_keepalive_probes
的值,以保证连接不会轻易被关闭。
查看命令如下所示:
1 2 3 4 5 6 7 | [root@localhost ~]# cat /proc/sys/net/ipv4/tcp_keepalive_time 7200 [root@localhost ~]# cat /proc/sys/net/ipv4/tcp_keepalive_intvl 75 [root@localhost ~]# cat /proc/sys/net/ipv4/tcp_keepalive_probes 9 [root@localhost ~]# |
可以通过修改/etc/sysctl.conf永久生效
1 2 3 4 5 6 7 8 9 10 11 12 | cat /proc/sys/net/ipv4/tcp_keepalive_time cat /proc/sys/net/ipv4/tcp_keepalive_intvl cat /proc/sys/net/ipv4/tcp_keepalive_probes cat >> /etc/sysctl.conf <<"EOF" net.ipv4.tcp_keepalive_time=300 net.ipv4.tcp_keepalive_intvl=30 net.ipv4.tcp_keepalive_probes=10 EOF sysctl -p |
Windows
KeepAliveTime
KeepAliveTime的值控制系统尝试验证空闲连接是否仍然完好的频率。如果该连接在一段时间内没有活动,那么系统会发送保持连接的信号,如果网络正常并且接收方是活动的,它就会响应。如果需要对丢失接收方的情况敏感,也就是说需要更快地发现是否丢失了接收方,请考虑减小该值。而如果长期不活动的空闲连接的出现次数较多,但丢失接收方的情况出现较少,那么可能需要增大该值以减少开销。
缺省情况下,如果空闲连接在7200000毫秒(2小时)内没有活动,系统就会发送保持连接的消息。 通常建议把该值设为1800000毫秒,从而丢失的连接会在30分钟内被检测到。具体操作:
浏览至HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters注册表子键,在Parameters子键下创建或修改名为KeepAliveTime的REG_DWORD值,为该值设置适当的毫秒数(右键单击并选择新建 -> DWORD(32位)值。)。例如,如果要将Keep-Alive时间设置为2小时,则将其值设置为7200000(2小时x60分钟x60秒x1000毫秒)。
KeepAliveInterval
KeepAliveInterval的值表示未收到另一方对“保持连接”信号的响应时,系统重复发送“保持连接”信号的频率。在无任何响应的情况下,连续发送“保持连接”信号的次数超过TcpMaxDataRetransmissions(下文将介绍)的值时,将放弃该连接。如果网络环境较差,允许较长的响应时间,则考虑增大该值以减少开销;如果需要尽快验证是否已丢失接收方,则考虑减小该值或TcpMaxDataRetransmissions值。