太阳集团tcy8722

当前位置: 首页 >应用方案 >技术应用 >

关于TCP keep-alive(保活)机制详解

TCP/IP协议是计算机通信网络中目前使用最多的协议,同时也融入了生活的方方面面,不管是浏览网页使用的http/https协议、物联网设备使用的MQTT/MQTTS协议与下载文件使用的ftp协议、工业以太网中使用的Modbus TCP协议等很多应用层协议,都是基于TCP/IP协议簇。

前文我们介绍了TCP流控机制的详解,本文我们将介绍TCP keep-alive(保活)机制详解。

一、TCP Keepalive机制的定义和作用‌

‌TCP Keepalive机制‌是一种用于检测TCP连接是否仍然活跃的机制。当TCP连接在一段时间内没有数据传输时,Keepalive机制会发送探测报文来检测对方是否仍然在线。如果对方正常响应,连接将被重置,等待下一个探测周期;如果对方没有响应,连接将被认为是死连接,并最终被关闭。

1、TCP Keepalive机制的工作原理

TCP连接在一段时间内没有数据传输时,Keepalive机制会发送探测报文。如果对方正常工作并响应这个探测报文,连接将被重置,等待下一个探测周期。如果对方没有响应,连续几次探测后,TCP会认为连接已经死亡,并关闭该连接。

2、TCP Keepalive机制的相关参数

TCP Keepalive机制涉及几个关键参数:

‌‌keepidle‌:无数据传输时开始发送探测报文的时间间隔。

‌‌keepinterval‌:发送探测报文的间隔时间。

‌‌keepcount‌:发送探测报文的次数,如果对方没有响应,连接将被关闭。


二、TCP Keep-alive应用场景

一般的,TCP的客户端与服务器的连接类型可以分为:

1、短链接:客户端连接到服务器后,即开始与服务器交互,请求资源,上报数据等,交互完毕后即断开与服务器的连接,如Http协议等。

2、长连接:客户端连接到服务器后,不一定会立即进行数据的传递,而是一直保持连接状态,且双方一般不会主动断开连接,如MQTT协议等。

需要注意的是,不管是长连接还是短连接都不是TCP协议本身所规定的,TCP只是给应用层提供了建立与断开连接的方法与资源管理。

可以想到,当客户端与服务器处于长连接状态下,如果服务器突然断电了,服务器也无法通知客户端异常状况,客户端就无法察觉服务器异常。只有当客户端向服务器发送数据时,由于超时机制,客户端才能知道服务器异常。并且数据也自然丢弃了。而且如果异常连接无法释放,也会导致系统资源的消耗与浪费。所以在长连接下,就可以启用TCP Keep-alive机制,避免一方可能意外断电、死机、崩溃、重启,还是中间路由网络无故断开,从而导致的异常连接。

三、TCP Keep-alive机制

相关参数如下所示:

SO_KEEPALIVE:是否开启保活

TCP_KEEPIDLE:Start keeplives after this period

TCP_KEEPINTVL:Interval between keepalives

TCP_KEEPCNT:Number of keepalives before death

SO_KEEPALIVE:Keep-alive可以是双向的,即客户端可以主动给服务器发,或服务器主动给客户端发送。在使能了SO_KEEPALIVE后,即启用了保活机制

TCP_KEEPIDLE:当客户端与服务器没有交互数据达到TCP_KEEPIDLE的空闲时间后,TCP将会给对方发送探测包。

TCP_KEEPINTVL:如果上一次的探测包没有得到响应,那么将用TCP_KEEPINTVL作为下一次的探测包间隔

TCP_KEEPCNT:当连续发送了TCP_KEEPCNT次数的探测包都未收到响应后,本地将会释放当前连接资源,并且通知应用层连接断开

四、TCP Keep-alive实例

正常探测包

1 TCP keep-alive(保活)机制详解

掉线过程

2 TCP keep-alive(保活)机制详解

接下来测试KeepAlive断开:正常TCP建立连接 后,拔掉网线:重新抓包如下图所示:

3 TCP keep-alive(保活)机制详解

今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多无线通信技术资料信息,感兴趣的小伙伴可以登录我们的太阳集团tcy8722官网进行了解,也可以直接拨打400电话咨询技术专员!


更多物联网通信协议相关文章推荐:

无线模块通过TCP/IP协议向PC端数据传输解析

基础通信协议栈:TCP协议、IP协议详解

UDP协议与TCP协议区别对比及应用场景方案

浅谈物联网通信协议安全技术

物联网应用中常见通信协议汇总分享




太阳集团tcy8722