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:对端程序状态正常,双方能正常通信。
文章来源:https://www.toymoban.com/news/detail-639152.html
文章来源地址https://www.toymoban.com/news/detail-639152.html
到了这里,关于TCP 保活机制(keepalive)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!