心跳信号(百度百科)

出自:https://baike.baidu.com/item/%E5%BF%83%E8%B7%B3%E4%BF%A1%E5%8F%B7?fr=aladdin

心跳信号是每隔一段时间向互联的另一方发送一个很小的数据包,通过对方回复情况判断互联的双方之间的通讯链路是否已经断开的方法。

1、什么是心跳信号

互联的双方中的一方,每隔固定的时间向另一方发送一个很小的数据包,另一方根据需要确定在收到数据包之后是否回复一个很小的数据包。每隔固定时间是很难达到的一个条件,实际情况是不超过某个时间间隔。

2、心跳信号的作用

心跳信号是为了确认一个事实——互联的双方在长时间没有通讯的情况下是否都还在线,或者说存在于互联的双方之间的通讯链路是否已经断开。而不是网上有些人所谓的“用来保持连接”,“用来维持长连接”。连接一旦建立,只能被异常或正常的断开,而不会因为没有数据传输而断开的,所以没有什么长连接的概念,更不需要用发送数据的方式来保持连接

有些防火墙或者电脑管理软件会把超过一定时间没有通讯的连接当作死连接,这些软件会自动将死连接断开或者请求用户将死连接断开。当有心跳时,不会被这类软件当做死连接。看起来心跳信号像是保持了连接,这是只是心跳信号偶然间具有的作用

长连接和短连接是应用层的概念。长连接表示当与某个目标创建应用层的连接后,目标不会因为没有数据通讯而去断开这个连接。短连接表示当需要与目标通信时创建连接,而通讯一结束立刻断开,否则目标有可能也会因为长时间不通讯而将连接断开,ftp服务器就会。

当ftp服务器允许长连接属性开启后,ftp服务器不会因为连接着的客户端没有长时间没有上传或者下载文件而关闭这个连接,对于ftp客户端来说就是不需要采用短连接的方式上传或者下载文件。

3、何时需要心跳信号

显然通过心跳信号的作用就可以知道,当应用层采用了长连接,并且会出现长时间不通讯的情况,并且双方中至少有一方需要知道对方是否仍然在线或者数据链路是否仍然通畅时,才需要使用心跳信号。不管何种通讯协议,只要不是采用传送数据时连接,传送完毕立即断开的方式那么就是在应用层采用了长连接。

不管采用是基于连接的协议(如TCP),还是基于流的协议(如UDP),当在应用层采用了长连接方式时,都可能需要心跳信号。首先让我们来看看这两类协议的区别。

基于流的协议不需要建立连接,也不需要断开,发送方向某个地址(IP加端口)发送数据,收取方从某个地址读取数据。对于基于流的协议来说,发送方是否成功发送数据或者发送的数据是否被成功收取,发送方是不知道的;收取方没有收到数据到底说明发送方没有发送还是发送了但是丢失了,也是不知道的。其实串口通讯协议也算作是一种基于流的协议,虽然有一个打开串口的过程,其实这只是相当于请求独占一个端口,这也是串口不能重复被打开的原因。

基于连接的协议,在通讯前首先要建立连接,建立连接的过程包括一定步骤的双向通讯;断开连接也是一样的,有心情的可以看一下TCP的通讯过程。基于连接的通讯协议每一次发送数据都是一个双向的通讯过程,发送方发送数据,接收放收到数据后回复,如果没收到回复重新发,重发0次或多次后会认为连接无故断开了,报告发送失败。显然基于连接的协议能够保证发送的数据被目标接收到了。数据包中对与应用来说有意义的部分数据是否正确是需要根据具体协议而定的,但是指明目的地址的包头部分有错误肯定会导致重发或者发送失败。

采用基于连接的协议通讯的双方中的一方由于停电、当机、崩溃等原因没有进行或者完成断开连接的过程那么另一方就不知道连接是否断开了。对于基于连接的协议,一旦在应用层采用了长连接绝大多少情况下都需要心跳信号,除非程序不用长时间运行,不在乎死连接的性能损失。

对于基于流的协议,采用了长连接并且有一方需要确认和区分数据的来源地址(ip端口或者其它标识)且需要知道来源方或发送方是否还在线时才需要采用心跳信号。归纳起来就是如果一方需要知道另一方是否在线那么一定需要心跳信号;如果一方需要知道另一方是否在线但是又不需要知道收到的数据来自何处,那么程序肯定设计的有问题。仅仅区分数据来源是没有必要为每一个来源都创建一个独立的连接(其实不应该叫做连接,可以看做tcp、udp通讯采用的socket),更没有必要采用心跳信号。收到数据之后就可以知道端口、IP,其它标识也可以添加到数据包里。

4、怎么建立心跳信号

传送记录类型的数据时

记录类型的数据长短差异不是特别巨大,数据类型多样,拥有一定的结构。发送这种类型的数据一般采用基于连接的协议(TCP),这样可以保证每条数据都能送到目标。此时心跳信号应该算作通讯协议(这是应用层的协议)中的一种数据,和其它数据发送到同一个端口号。在协议设计过程中要考虑到用一种特别的标记将一条条的数据隔开,以防粘包。将心跳信号和其他数据的结构设计成一致的。将某条数据解析出来后通过其中的某个字段来确认这条数据到底是心跳信号还是其他数据。

这种情况下心跳信号可以采用计时器每隔一段时间发送一次,而不用理会是否有其它类型的数据发送。接收方应该在至少经过2到3倍的约定时间没有收到心跳信号时才认为连接断开了。当然也可以有其它类型数据发送时,不发送心跳信号。这样一来双方的处理逻辑都复杂一些。不管采用何种方式,在的通讯协议都应该进行说明。[1]

传送文件或者视频(数据)流时

传送文件时一般采用基于连接的协议。如果采用基于流的协议,就需要自己处理某一个包是否送达目标的过程,而这个过程恰好是基于连接的协议的底层内容。

传送视频流和其它类型的数据流时一般采用基于流的协议。因为网络环境不至于差到每一帧数据中都有丢包。传送视频流时,丢了一包,带来的影响也就是解码出来的图像花屏或者不能解码;花屏没什么大不了,不能解码直接丢弃也没什么影响。

传送其它的数据流,比如从传感器不断发回来的温度、湿度等,从GPS接收机不断发回来的定位信息。这些数据损坏了一帧,还有下一帧可以使用。所以也不在乎丢包。

对于这种流式数据不允许中间插入心跳数据。所以心跳数据的格式必须单独设计。心跳的发送也有两种方式。第一种,不管数据流是否在发送都每隔固定的时间将心跳数据发往不同于发数据流的端口。第二种,当发送数据流时不发送心跳信号。

5、特别说明

TCP已经包含了心跳信号。但是这个心跳信号受实现平台的限制比较多,并且默认是关闭的。如果开发服务器程序尽量不要依赖这个功能。如果开发一些简单的小应用时,并且可以预料到将来没有平台迁移任务时才可以使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269