TCP 保活机制(keepalive)

1.TCP保活机制简介

TCP保活机制是内核提供的一个心跳机制,当TCP连接异常时,能够通过保活机制释放TCP连接,确保资源不泄露。

2.TCP keepalive相关套接字选项

SO_KEEPALIVE选项:SOL_SOCKET级别选项,用于开启和关闭TCP保活机制。

TCP_KEEPIDLE选项:IPPROTO_TCP级别选项,保活探测报文发送时间,简单理解就是多长时间没有收到TCP报文开始发送保活探测报文,单位为秒。

TCP_KEEPINTVL选项:IPPROTO_TCP级别选项,保活探测报文发送间隔周期,第一个探测报文发送完后,如果没有收到对端应答,则间隔TCP_KEEPINTVL时间后继续发送探测报文,单位为秒。

TCP_KEEPCNT选项:IPPROTO_TCP级别选项,探测失败后,总共发送多少个探测报文。

3.TCP keepalive选项设置

  • 系统设置

        a.查看系统级别参数:sysctl -a | grep "keepalive"

        b.设置系统级别参数:sysctl -w

sysctl -w net.ipv4.tcp_keepalive_time=10
sysctl -w net.ipv4.tcp_keepalive_probes=3
sysctl -w net.ipv4.tcp_keepalive_intvl=3
  • 单个连接设置
int on = 1;
setsockopt(sock_fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on));
int idle = 10;
setsockopt(sock_fd, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof(idle));
int intvl = 3;
setsockopt(sock_fd, IPPROTO_TCP, TCP_KEEPINTVL, &intvl, sizeof(intvl));
int cnt = 3;
setsockopt(sock_fd, IPPROTO_TCP, TCP_KEEPCNT, &cnt, sizeof(cnt));

4.保活探测过程分析

情况1:对端程序状态正常,双方能正常通信。

规定时间内,本端未接收到对端任何报文,将会发送TCP保活探测报文至对端,对端应答TCP保活探测报文,双方维持原来连接。

情况2:对端程序状态正常,双方无法正常通信。

规定时间内,本端未接收到对端任何报文,发送TCP保活探测报文至对端,由于无法和对端通信,保活探测报文无法生效,本端将重发TCP保活探测报文,超过重发次数后,仍未收到对端应答报文,本端将释放TCP连接,并发送RST报文。

情况3:对端程序异常,双方能正常通信。

a.对端程序异常退出。

本端发送保活探测报文,对端内核收到后回复RST报文。

b.对端程序异常退出,又重新起来。

对端内核收到探测报文后,未查询旧的连接信息,将回复RST报文。

情况4:对端程序异常,双方无法正常通信。

同情况2。

5.TCP 保活机制抓包调试

开启keepalive功能,发送时间:10秒,发送间隔:3秒,发送次数3次。

情况1:对端程序状态正常,双方能正常通信。

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物联网心球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值