GaussDB(DWS) TCP的KeepAlive(Windows、Linux)
1. 什么是KeepAlive?
简单来说,KeepAlive就是为了防止TCP连接中,链路断开,而连接两端无法侦测到的问题。它的原理其实就是在连接空闲的时候,向对方发送一个空白帧(60 bytes),让对方应答(54 bytes)。数据来源:wiki
就是说,在连接空闲keepalive-idle(也有叫keepalive-time的,比如微软)时间后,以keepalive-interval间隔,向对方发送总共keepalive-count帧(也有叫keepalive-retry。微软叫TcpMaxDataRetransmissions)。如果对方不应答,认为连接已经断开。
关于此问题的最权威解释,请参考 IETF的文档。在其中搜索"TCP Keep-Alives"。
2. 怎么设置
Windows
编码:
打开或关闭:请参考微软的MSDN:setsockopt 这个只能设置打开或者关闭keep alive。
具体参数的设置,请参考MSDN里WSAIoctl章节里关于KeepAlive的设置,但是不可修改count值。
微软里,windows Server 2003, XP, 2000里TcpMaxDataRetransmissions的值被设置为5,可以通过注册表设置,而Vista以后,这个值被设置为了10,并且不可改。
注册表:
KeepAliveTime KeepAliveInterval TcpMaxDataRetransmissions设置完需要重启电脑
Linux
系统级:
# 查询 cat /proc/sys/net/ipv4/tcp_keepalive_time sysctl net.ipv4.tcp_keepalive_time#修改 vim /etc/sysctl.conf net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_time = 30 net.ipv4.tcp_keepalive_probes = 9 sysctl -p代码级:
很简单了,见这里
- 点赞
- 收藏
- 关注作者
评论(0)