王 亮 徐开来 马良荔
北斗是我国自行研制的卫星导航系统,具有定位、授时、短报文功能,且成本低、体积小,非常适合广域物联网网络层的解决方案,其中短报文功能为解决远海和偏远地区通信提供了双向信道。北斗卫星导航系统的短报文功能在设计之初并未考虑到大于单条报文长度以及多对多的应用,在数据大于短报文的情况下无法实现有效的传输,且目前尚无同等价格、同等体积的通信设备替代北斗卫星的功能。从具体应用方面来看,北斗的短报文通信在传输中还存在限制,具体如下:
1)单次通信容量有限,每次进行短报文通信所能传输的数据量是有限的,普通用户最高传输速度为120字节/分钟,数据如果超过最大报文长度,必须进行分包传送;
2)通信频度有限,北斗系统每发送完一条报文后需等待很长的时间才能进行下一次传输;
3)北斗卫星通信是不可靠的通信链路,在连续传输中丢包率较高。
文献[1~5]均对常规短报文协议进行扩展,一定程度增加了传输性能,但其定义的分包传输协议仅解决了点对点的传输方案,实际应用中不可能有如此理想的传输环境,尤其是在多对多的物联网环境中,某点在长时间接收分包数据的同时还有可能接收到其他点数据或同一点的第二份数据(加装复数北斗卡的发送端),由于没有标识符,接收端无法分辨数据来源,这就造成了数据混淆,使得分包数据无法还原,得不到最终数据。本文将传统的短报文分包传输协议进行改进,加入WEB服务器中的“会话控制”和“队列控制”方法,融合重传和确认机制保证数据可靠传输,以满足物联网中多对多传输的实际需求,使北斗通信在物联网平台能发挥更好的功效。
物联网应用架构下,其采集端的数据种类包括控制指令、文字信息、图像信息等,且数据交互频繁,对于数据长度大于单次报文最大度120字节的数据,通常利用分包传输,但传输等待时间长,在等待时间内为避免多份数据之间混淆,设定一个全网唯一标识符进行区别。
接受端向发送端请求数据后,结合发送端和接收端的用户ID生成的全网唯一标识符“会话ID”(具体生成算法不在本文研究范围中),之后发送确认包,包含本次传输的会话ID、是否分包且分包数量等信息,之后开始数据包传输。与此同时,接收端仍可以实时接收其他或同一发送端的数据包,区分规则即为会话ID。这样,当接收端收到另一发送端的数据时,为不同会话ID开辟独立内存空间进行接收存储,直至数据传输完毕,从内存中销毁会话ID,将数据写入硬盘。
发送端在进行数据传输时,会遇到上一会话还没有完成,又接收新的发送指令,此时应根据请求创建会话队列,检测是否有空闲的信道,有则分配信道开始传输,否则挂起传输请求,等待前次传输完成。在等待期间若接收到接收端的“取消请求数据”的请求包,根据其携带的会话ID,查询相应的传输进程,若传输未完成则终止传输,否则取消请求数据失败,两种情况均插队向接收端发送一条确认包,并销毁会话ID,记入日志。
接收端只有在收到确认包,识别到会话ID后才可知本次传输是否在队列、预计排队时间、预计完全接收完毕的时间,告知用户,由用户决定是否取消本次传输。若取消,则发送带有“取消请求数据”和本次传输“会话ID”的请求包,之后收到取消成功的确认包即完成取消请求操作;不取消,则等待传输完毕。
在发送端接收到接收端请求数据的请求包后,创建“会话ID”作为本次传输的唯一标识符,根据“数据标识符”找到要传输的数据,分析所请求的数据体积,若超出单次报文最大长度则拆分为子数据包,并对每个小数据包添加包含“会话ID”和“数据包ID”的包头,依次发送,直至全部发送完毕。若发送期间再次接收到请求数据的请求包,则依然创建“会话ID”,开启队列模式,暂时挂起本次会话ID传输,等待信道空闲,并插队发送一条确认包,告知接收端会话ID。接收端可依照会话ID,发送“取消请求数据”的请求包,发送端会根据会话ID取消在队列中的传输,并插队发送一条确认包,告知接收端该会话ID的传输取消成功。
数据发送完毕后,等待接收端回执包,识别回执包中“类型”若为1(完成)则,将本次会话相关信息存入硬盘后,销毁会话ID,清空缓存;若为2(补发)则识别“回执包总条数”,确认要接收的回执包个数,等待全部回执包接收完毕,统计“缺失数据包序号”,重新发送相应的子数据包,重复此过程直至回执包“类型”为1。若为3(超时)或等待超过一定时间,则判定为超时,将本次“会话”相关数据挂起存入硬盘,写入日志,等待人工操作,之后销毁“会话ID”,清空缓存。
向发送端发送请求包后,等待“确认包”,收到后识别“本次传输数据包总量”,查询“会话ID”,若无则创建,之后持续接收数据包,分析包头,并将数据包按照“会话ID”存储于缓存中,直至接收完毕,比对缓存中数据包,记录丢包编号,向发送端发送回执包,标注“类型2(补包)”,同时继续接收数据包,重复此过程直至数据包完整,向发送端发送回执包“类型1(完成)”,重新组合数据包。接收过程中,一定时间未收到数据包或确认包则判定为超时,将本次“会话”相关数据挂起存入硬盘,写入日志,等待人工操作,之后销毁“会话ID”,清空缓存。发送端、接收端整体流程图如图1所示。
本文设计的各种扩展协议,均是在标准报文的数据段建立新的扩展字段头,并将整条报文重新定义为“XX包”,以实现相应功能,具体定义如下:
1)请求包
图1 发送、接收流程图
接收端向发送端请求获取某项数据,数据标识符定义需要获取的数据类型便于发送端查找,还可以携带时间、经纬度、用户资料等附加信息;接收端在收到确认包后,得到本次传输的会话ID,可以向发送端取消该会话ID的数据请求。
表1 请求包包头字段定义
2)确认包
发送端接收到请求包之后,向接收端发送一个确认包,包含本次传输数据包数量与“会话ID”,接收端查询相应的“会话ID”,对数据包进行存储。附加信息中会携带本次会话ID是否在队列,预计排队时间,预计传输完成时间等信息。
表2 确认包包头字段定义
3)数据包
未超过单次短报文传输最大字节数的数据直接传输即可,超过的则拆分为多个子数据包,并自定义数据包编号,赋予会话ID,接收端接收到数据包后,依据包头里的“数据包ID”暂存于缓存中,等本次传输全部数据包到齐后,重新组包。数据包的格式如表3所示。
表3 数据包包头字段定义
4)回执包
接收端收到本次传输的最后一个数据包后,进行数据包序号校验,若缺失某些数据包,则判定为丢包,并将缺失数据包ID计入回执包中,统计完成后发送给发送端。实际应用中回执包可能出现多个,因此添加“回执包总数”,以便系统识别所有回执包后进行补包处理。各字段头含义如表4所示。
1)实验目的
对本文设计的会话控制与队列控制协议进行测试,相对成熟的分包传输协议不作为实验重点。
2)实验环境
民用北斗通信模块2套(含SIM卡160044、160048两张)、PC机2台、基于Windows环境的传输控制软件。
3)实验数据
以传输1KB长文本为例,总计传输时间约12分钟,期间进行多次请求数据与取消请求数据,观察会话ID的创建与队列模式情况。其中会话ID代码以最简单算法生成,实际运用中可根据需求改进。
表4 回执包包头字段定义
表5 实验数据
4)实验分析
会话、队列创建功能测试:接收端端连续发送4次“请求数据”,发送端开始传输,并将之后3次请求添加至队列;
会话取消功能测试:接收端主动取消,排队中的某个会话,反馈成功,之后主动取消正在传输的会话,反馈成功;
队列传输功能测试:接收端无任何用户指令,发送端连续完成2个会话的传输任务。
结论:发送端同时创建4个传输会话成功,且互不干扰;取消正在传输的会话成功,取消排队中的会话成功;连续传输两组会话成功。
本文设计的传输协议不局限于北斗通信,也适用于其他低速信道,客观上北斗短报文并不是数据传输的最佳方案,也不是北斗卫星的发展方向,但目前北斗通信模块覆盖广、成本低、体积小在远海和山区依旧有应用价值,本文是基于低速信道提供一种物联网网络层通用解决方案。
[1]颜晓星,车明,高小娟.基于北斗卫星的可靠远程通信系统设计[J].计算机工程,2017,43(3):62-68.
[2]戴胜,曹菁菁,方芳.一种基于北斗短报文的远程终端监控方法[J].数字通信世界,2016(12):10-13.
[3]任娜.北斗卫星导航系统在AIS中的应用研究[D].厦门:集美大学,2016.
[4]郭丹.北斗卫星短报文通信控制系统研究[D].西安:西北大学,2015.
[5]沈华飞.北斗卫星一代短报文通信技术及应用[J].电子制作,2014(23):106-106.
[6]于龙洋,王鑫,李署坚,等.基于北斗短报文的定位数据压缩和可靠传输[J].电子技术应用,2012,38(11):108-111.
[7]李文金,苏凯雄.基于存储管理的北斗报文传输协议设计与应用[J].微型机与应用,2015,34(24):63-65.
[8]吴海乐,冯涛,沈兵,等.基于北斗的海事长报文传输解决方案[J].全球定位系统,2015(4):37-40.
[9]史向阳.北斗系统在海上多媒体数据传输中的应用研究[D].大连:大连海事大学,2014.
[10]邹李兵.基于北斗报文的动态影像传输关键技术研究[D].成都:成都理工大学,2009.
[11]成方林,张翼飞,刘佳佳.基于“北斗”卫星导航系统的长报文通信协议[J].海洋技术学报,2008,27(1):26-28.
[12]赵娜,吕成兴.基于北斗通信的海洋监测数据实时监控系统设计[J]. 中国水运月刊,2015,15(11):143-144.
[13]彭伟,徐俊臣,杜玉杰,等.基于北斗系统的海洋环境监测数据传输系统设计[J].海洋技术学报,2009,28(3):13-15.
[14]邓玉芬,张博,沈明,等.基于北斗卫星的海洋测量数据传输系统[J].海洋测绘,2009,29(4):67-69.