tcp_keepalive 设置
来源:互联网 发布:sla打印机 知乎 编辑:程序博客网 时间:2024/05/17 09:01
1.参数设置
查看相关的参数
sysctl -a|grep tcp_keepalive
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 2
net.ipv4.tcp_keepalive_time = 160
设置相关的参数
sysctl -w net.ipv4.tcp_keepalive_time = 7500
也可以直接打开/etc/sysctl.conf
加入net.ipv4.tcp_keepalive_time = 7500,然后保存退出
让参数生效
sysctl -p
2.参数相关的说明
/proc/sys/net/ipv4/tcp_keepalive_time
当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时。
/proc/sys/net/ipv4/tcp_keepalive_intvl
当探测没有确认时,重新发送探测的频度。缺省是75秒。
/proc/sys/net/ipv4/tcp_keepalive_probes
在认定连接失效之前,发送多少个TCP的keepalive探测包。缺省值是9。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应
tcp_keepalive_time :INTEGER
默认值是7200(2小时)
当keepalive打开的情况下,TCP发送keepalive消息的频率。(由于目前网络攻击等因素,造成了利用这个进行的攻击很频繁,曾经也有cu的朋友提到过,说如果2边建立了连接,然后不发送任何数据或者rst/fin消息,那么持续的时间是不是就是2小时,空连接攻击? tcp_keepalive_time就是预防此情形的.我个人在做nat服务的时候的修改值为1800秒)
tcp_keepalive_probes:INTEGER
默认值是9
TCP发送keepalive探测以确定该连接已经断开的次数。(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适)
tcp_keepalive_intvl:INTEGER
默认值为75
探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。(对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值,15是个比较合适的值)
$ /proc/sys/net/ipv4/tcp_keepalive_time
$ /proc/sys/net/ipv4/tcp_keepalive_intvl
$ /proc/sys/net/ipv4/tcp_keepalive_probes
这3个参数与TCP KeepAlive有关.默认值是:
tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds
意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大. 可调整到:
/proc/sys/net/ipv4/tcp_keepalive_time 1800
/proc/sys/net/ipv4/tcp_keepalive_intvl 30
/proc/sys/net/ipv4/tcp_keepalive_probes 3
tcp_keepalive_intvl:探测消息发送的频率
tcp_keepalive_probes:TCP发送keepalive探测以确定该连接已经断开的次数
tcp_keepalive_time:当keepalive打开的情况下,TCP发送keepalive消息的频率
linux代码
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/tcp.h>
- int keepAlive = 1; // 开启keepalive属性
- int keepIdle = 1800; // 如该连接在1800秒内没有任何数据往来,则进行探测
- int keepInterval = 3; // 探测时发包的时间间隔为3秒
- int keepCount = 2; // 探测尝试的次数.如果第1次探测包就收到响应了,则后几次的不再发.
- setsockopt(client_fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&keepAlive, sizeof(keepAlive));
- setsockopt(client_fd, SOL_TCP, TCP_KEEPIDLE, (void *)&keepIdle, sizeof(keepIdle));
- setsockopt(client_fd, SOL_TCP,TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval));
- setsockopt(client_fd, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount));
- tcp_keepalive设置
- tcp_keepalive 设置
- tcp_keepalive的设置
- tcp_keepalive的设置
- tcp_keepalive的设置
- tcp_keepalive的设置
- 你必须知道的关于tcp_keepalive 设置
- TCP选项之TCP_KEEPALIVE
- TCP/IP协议选项——TCP_KEEPALIVE
- 设置
- 设置
- 设置
- 设置
- 设置
- 设置菜单默认值设置
- ECharts基本设置设置
- 设置欢迎界面设置
- 设置JVM内存设置
- Plaintext Encryption - 明文加密P.E.
- 中国互联网圈的14个创业派系
- oschina客户端安卓研究(一)xml方式传递数据
- druid 数据库密码加密
- oschina客户端安卓研究(二)构造新闻实体类
- tcp_keepalive 设置
- 现代经济感悟(2)-不协调的电商B-去中产化
- 知识补充
- 2015年学习计划
- 黑马程序员_IO流操作1
- 用R制作渐变背景图片
- 第一行 swift
- 重建二叉树
- linux内核SPI总线驱动分析(一)