GaussDB(DWS) TCP的KeepAlive(Windows、Linux)

举报
归云 发表于 2020/11/25 11:35:49 2020/11/25
【摘要】 简单介绍TCP协议中的KeepAlive

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

代码级

很简单了,见这里


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。