TCP Keepalive HOWTO

本文介绍了在Linux系统中配置TCP Keepalive选项的方法,包括通过procfs和sysctl接口修改内核参数,以及如何确保配置在系统重启后仍然有效。
TCP Keepalive HOWTO
(原文网址:http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html)


3、linux下 TCP keepalive 套接字选项用法

   linux系统中内置了keepalive选项的支持,在使用它之前除内核中支持 TCP/IP 网络模块外,还需要支持procfs或者sysctl。在系统运行过程中可通过proc或sysctl修改keepalive相关的内核参数。

   使用keepalive选项的程序中需配置以下三个变量
 
   tcp_keepalive_time
      最后一个数据包被发送(只包含ACK的包不是数据包)到发送第一个keepalive心跳包的时间间隔,发送第一次心跳包后该连接就激活了keepalive心跳机制。在下一个数据包被发送/接收之前该变量不会被用到。
   
   tcp_keepalive_intvl
      keepalive心跳包发送的时间间隔。
   
   tcp_keepalive_probes
      在连接结束或者收到数据包前心跳包发送的次数。

   注意:即使kernel中配置支持keepalive机制,linux默认并没开启此功能。应用程序必须使用setsockopt接口使能keepalive。使用keepalive心跳机制不需要编写很多代码,阅读这篇文档中后续部分你能很容易的在你的程序中增加keepalive机制。

3.1. 配置内核
   有两种使用用户态命令的方法可以配置内核中的keepalive选项
   procfs接口与sysctl接口
   我们主要讨论如何能过procfs接口来配置,因为procfs方式最常用,也很容易理解。sysctl接口方式特指使用sysctl(2)系统调用而不是sysctl(8)工具命令。
   
3.1.1 procfs 接口
   procfs接口需要内核中配置支持sysctl及profs,并且将procfs挂接在文件系统中(通常挂接在/proc目录上),在/proc/sys/net/ipv4/目录下使用cat命令能够读取各参数的值:
    # cat /proc/sys/net/ipv4/tcp_keepalive_time
    7200
   # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
   75
   # cat /proc/sys/net/ipv4/tcp_keepalive_probes
   9

   前面两个参数值的单位是秒,后一个参数值纯粹是数字。这意味着在发送第一个心跳包之前keepalive程序需等待两小时(7200s),每隔75s重发一次,如果连接发送9次心跳包都没有收到ack响应包连接就被标识为断开。
   直接修改这些值:向文件中写入值来修改这些参数。如配置主机上的连接在十分钟后还不活跃就发送心跳包,并且每分钟发送一次;由于我们的网络主干很不稳定且默认的心跳包发送次数太少,假如你也想要将此值设置为20。

   下面我们来修改配置:
    # echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
    # echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
   # echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes
  
   为了确定设置成功,重新查看这些文件
   注意:procfs只是用户态操作内核空间的一种接口并不是真实的文件,因此你不能对它们执行sort操作。
   你能使用sysctl(8)工具访问procfs接口来读/写内核参数。
   # sysctl \
  > net.ipv4.tcp_keepalive_time \
  > net.ipv4.tcp_keepalive_intvl \
  > net.ipv4.tcp_keepalive_probes
  net.ipv4.tcp_keepalive_time = 7200
  net.ipv4.tcp_keepalive_intvl = 75
  net.ipv4.tcp_keepalive_probes = 9
  注意:sysctl工具中参数名称与procfs路径名非常相似。使用带'-w'参数的sysctl(8)工具表示执行写操作。
   # sysctl -w \
  > net.ipv4.tcp_keepalive_time=600 \
  > net.ipv4.tcp_keepalive_intvl=60 \
  > net.ipv4.tcp_keepalive_probes=20
  net.ipv4.tcp_keepalive_time = 600
  net.ipv4.tcp_keepalive_intvl = 60
  net.ipv4.tcp_keepalive_probes = 20

  注意:sysctl(8)并没有使用sysctl(2)系统调用接口,而是直接通过procfs子树来进行读写。因此内核中需要配置支持procfs并将其挂接到文件系统中。 sysctl(8)工具仅仅是做同一件事的另一种方式而已。


3.1.2 sysctl 接口

   sysctl(2) 系统调用是访问内核变量的另一种方式,当你的系统中不存在procfs时直接使用sysctl(2)系统调用跟内核通信非常方便。使用sysctl(2)跟内核通信是直接通过系统调用并没有使用procfs子树。目前并没有程序封闭sysctl系统调用(注意:sysctl(8)并没有使用系统调用)。

有关sysctrl(2)的更多信息请参考man页

3.2 配置修改重启生效
  
   有多种方式在系统每次启动后自动加载配置。一、所有linux发行版都有一套由init进程调用的初始化脚本,常用的配置存放在/etc/rc.d或/etc/init.d目录中。任何时候你都能在任何一脚本文件中添加keepalive选项参数值,因为每次用到keepalive心跳机制时都会重新读它。因此当连接存在时改变tcp_keepalive_intvl变量值后内核会使用新值。

   初始化命令可以放在已下三个地方:一、网络配置脚本所在的地方,二、rc.local脚本文件中,所有的linux发行版中都包括rc.local脚本文件,三、回顾一下前面讲到的sysctl工具,使用带'-p'参数的sysclt命令显示出/etc/sysctl.conf配置文件中的配置信息。将keepalive配置选项添加到/etc/sysctl.conf文件中使它们每次启动时被加载。有关/etc/sysctl.conf(5)文件的更新信息请参考man页。

   (原文网址:http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html)
内容概要:本文是一份针对2025年中国企业品牌传播环境撰写的《全网媒体发稿白皮书》,聚焦企业媒体发稿的策略制定、渠道选择与效果评估难题。通过分析当前企业面临的资源分散、内容同质、效果难量化等核心痛点,系统性地介绍了新闻媒体、央媒、地方官媒和自媒体四大渠道的特点与适用场景,并深度融合“传声港”AI驱动的新媒体平台能力,提出“策略+工具+落地”的一体化解决方案。白皮书详细阐述了传声港在资源整合、AI智能匹配、舆情监测、合规审核及全链路效果追踪方面的技术优势,构建了涵盖曝光、互动、转化与品牌影响力的多维评估体系,并通过快消、科技、零售等行业的实战案例验证其有效性。最后,提出了按企业发展阶段和营销节点定制的媒体组合策略,强调本土化传播与政府关系协同的重要性,助力企业实现品牌声量与实际转化的双重增长。; 适合人群:企业市场部负责人、品牌方管理者、公关传播从业者及从事数字营销的相关人员,尤其适用于初创期至成熟期不同发展阶段的企业决策者。; 使用场景及目标:①帮助企业科学制定媒体发稿策略,优化预算分配;②解决渠道对接繁琐、投放不精准、效果不可衡量等问题;③指导企业在重大营销节点(如春节、双11)开展高效传播;④提升品牌权威性、区域渗透力与危机应对能力; 阅读建议:建议结合自身企业所处阶段和发展目标,参考文中提供的“传声港服务组合”与“预算分配建议”进行策略匹配,同时重视AI工具在投放、监测与优化中的实际应用,定期复盘数据以实现持续迭代。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值