TCP/IP协议是计算机通信网络中目前使用最多的协议,同时也融入了生活的方方面面,不管是浏览网页使用的http/https协议、物联网设备使用的MQTT/MQTTS协议与下载文件使用的ftp协议、工业以太网中使用的Modbus TCP协议等很多应用层协议,都是基于TCP/IP协议簇。
前文我们介绍了TCP流控机制的详解,本文我们将介绍TCP keep-alive(保活)机制详解。
TCP Keepalive机制是一种用于检测TCP连接是否仍然活跃的机制。当TCP连接在一段时间内没有数据传输时,Keepalive机制会发送探测报文来检测对方是否仍然在线。如果对方正常响应,连接将被重置,等待下一个探测周期;如果对方没有响应,连接将被认为是死连接,并最终被关闭。
当TCP连接在一段时间内没有数据传输时,Keepalive机制会发送探测报文。如果对方正常工作并响应这个探测报文,连接将被重置,等待下一个探测周期。如果对方没有响应,连续几次探测后,TCP会认为连接已经死亡,并关闭该连接。
TCP Keepalive机制涉及几个关键参数:
keepidle:无数据传输时开始发送探测报文的时间间隔。
keepinterval:发送探测报文的间隔时间。
keepcount:发送探测报文的次数,如果对方没有响应,连接将被关闭。
一般的,TCP的客户端与服务器的连接类型可以分为:
1、短链接:客户端连接到服务器后,即开始与服务器交互,请求资源,上报数据等,交互完毕后即断开与服务器的连接,如Http协议等。
2、长连接:客户端连接到服务器后,不一定会立即进行数据的传递,而是一直保持连接状态,且双方一般不会主动断开连接,如MQTT协议等。
需要注意的是,不管是长连接还是短连接都不是TCP协议本身所规定的,TCP只是给应用层提供了建立与断开连接的方法与资源管理。
可以想到,当客户端与服务器处于长连接状态下,如果服务器突然断电了,服务器也无法通知客户端异常状况,客户端就无法察觉服务器异常。只有当客户端向服务器发送数据时,由于超时机制,客户端才能知道服务器异常。并且数据也自然丢弃了。而且如果异常连接无法释放,也会导致系统资源的消耗与浪费。所以在长连接下,就可以启用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次数的探测包都未收到响应后,本地将会释放当前连接资源,并且通知应用层连接断开
正常探测包
掉线过程
接下来测试KeepAlive断开:正常TCP建立连接 后,拔掉网线:重新抓包如下图所示:
今天的分享就到这里啦,EBYTE每一天都致力于更好的助力物联化、智能化、自动化的发展,提升资源利用率,更多无线通信技术资料信息,感兴趣的小伙伴可以登录我们的亿佰特官网进行了解,也可以直接拨打400电话咨询技术专员!
更多物联网通信协议相关文章推荐:
7 X 24 销售服务热线
4000-330-990深圳办事处柯经理:18218726658 杭州办事处戴经理:17512568697
常州办事处崔经理:15906110783 南京办事处葛经理:17626012283
业务邮箱:support@cdebyte.com
全国销售投诉电话:19934352316
地址:四川省成都市高新西区西区大道199号B5栋(前台座机:028-61543675)
©© 成都亿佰特电子科技有限公司【版权所有】 蜀ICP备13019384号-3