一种不稳定网络下可靠数据通信方法与流程

文档序号:19413594发布日期:2019-12-14 00:41阅读:342来源:国知局
一种不稳定网络下可靠数据通信方法与流程

本发明涉及通信技术领域,尤其是涉及一种不稳定网络下可靠数据通信方法。



背景技术:

卫星通信系统链路具有传输距离远、覆盖范围广等特点,在通信运营商网络未覆盖的外海、荒漠等区域使用卫星链路进行数据通信具有显著优势。同时,卫星通信链路存在高时延、低带宽、稳定性差等问题。如果使用可靠连接的tcp协议进行通信,会因为时延高、稳定性差等因素造成tcp连接时间长,有时甚至无法连接,导致数据通信失败。因此,理想的选择是基于无连接的udp协议进行卫星链路数据通信。udp协议为不可靠通信协议,udp数据包在传输过程中可能造成数据丢失,所以需要在udp协议之上构建可靠数据通信过程。

与本发明最为接近的现有技术为专利发明“一种基于udp的可靠传输方法”(授权公告号:cn106130693b)。该发明主要采用了与tcp协议相似的超时重发和拥塞控制等可靠通信机制,仅适用于稳定性较好的网络。对于卫星链路等网络稳定性较差的网络,在网络抖动严重时,会出现严重丢包现象,导致频繁的数据包超时重发,加剧数据传输压力,形成网络拥塞,影响传输效率。



技术实现要素:

为解决上述现有技术的问题,本发明提供一种不稳定网络下可靠数据通信方法。

本发明的技术方案提供一种不稳定网络下可靠数据通信方法,将可靠数据通信分为核心数据通信模式和非核心数据通信模式,

所述非核心数据通信模式,用于在上层收发应用程序之间进行普通数据通信,发送端仅负责发送数据,接收端对收到的数据按顺序向上层应用程序提交,数据的完整性交由上层应用程序保障;

所述核心数据通信模式,用于在上层收发应用程序之间进行可靠的数据通信,提供数据确认、前向纠错和数据重传通信机制,实现方式如下,

在核心数据发送端设置数据帧封装模块、数据帧发送模块、数据帧重传模块和确认帧接收模块,核心数据发送端工作流程如下,

1)发送端通信层收到上层应用程序交付的数据后,数据帧封装模块根据数据帧容量限制进行拆分,并按照数据帧格式进行封装,将封装好的数据帧送入发送缓冲队列,然后通过控制信号通知数据帧发送模块负责发送数据;所述数据帧格式中包括ldpc前向纠错检验码;

2)发送端的数据帧发送模块检查发送缓冲队列,将发送缓冲队列中的数据帧按先进先出的顺序通过网络接口发送出去,然后将发送出去的数据帧从发送缓冲队列移入重传缓冲队列,并开启该数据帧重传计时;

3)发送端的数据帧重传模块周期性地检查重传缓冲队列,对队列头部计时已到期的数据帧通过网络接口重新发送该数据帧,然后移至重传缓冲队列尾部;并在这种超时重传的情况下,调整增加重传定时时间rto;

4)确认帧接收模块在收到某一确认帧后,根据帧内ldpc前向纠错检验码对数据进行纠错处理,然后与重传缓冲队列中的数据帧逐一比较数据序列号,若找到相应的数据帧,则将该数据帧从重传缓冲队列删除;

在核心数据接收端设置数据帧接收模块和数据整理模块,核心数据接收端工作流程如下,

1)接收端通信层的数据帧接收模块在收到数据帧以后,根据数据帧内ldpc前向纠错检验码对数据进行纠错处理,然后比较数据序列号;

如果是重复数据帧,说明发送端可能因为未接收到该数据帧的确认帧而重发了该数据帧,所以丢弃该重复数据帧,并向发送端通信层重发确认帧;

否则,接收到的为新数据,将数据保存到接收缓冲队列,向发送端通信层发送确认帧,并通知数据整理模块对数据进行处理,核心数据确认帧格式中包括已接收时间戳和ldpc前向纠错校验码;

2)数据整理模块检查一批数据是否全部正确接收,如果尚未正确接收全部数据,则数据整理模块挂起;如果已正确接收全部数据,则按数据序列号先后顺序对数据进行整理,向上层应用程序提交所接收的完整数据。

而且,在超时重传的情况下,调整增加重传定时时间rto时,将重传定时时间rto修改为之前的2倍。

而且,若一个数据经过n次重传仍然未能成功发送,则认为网络不可达,终止整个数据传输过程,向应用程序报告传输错误,其中n为预设的最大重传次数。

而且,发送端每次收到确认帧后,进行以下操作,

1)通过比较明确对应的数据帧后,已接收时间戳及收到确认帧的时间计算这个数据帧的传输往返时间rtt,并更新;

2)更新加权平均往返时间rtts,计算公式为:

新的rtts=0.875×旧的rtts+0.125×新的rtt

3)计算rtt的加权平均值rttd,计算公式如下:

新的rttd=0.75×旧的rttd+0.25×|rtts-新的rtt|

4)修改重传定时时间rto,计算公式如下:

rto=rtts+4×rttd

其中,rtts和rttd采用步骤2)和3)所得结果。

而且,发送端通过发送窗口sw对核心数据通信进行数据流量控制,防止网络拥塞。发送窗口sw限制一次能够发送的数据帧的数量,初始设置为10,每收到一个有效的确认帧,发送窗口sw增1;而数据每重传一次,发送窗口sw减1。

和现有技术相比,本发明的优点是:

1)通信协议可保障数据的稳定传输,在网络抖动情况下仍能保障核心数据的传输;

2)使用前向纠错编码,缓解数据重传问题,提升传输效率。

附图说明

图1为本发明实施例不稳定网络下可靠数据通信协议框架示意图;

图2为本发明实施例核心数据发送端工作流程示意图;

图3为本发明实施例核心数据接收端工作流程示意图;

图4为本发明实施例核心数据帧格式示意图;

图5为本发明实施例核心数据确认帧格式示意图;

图6为本发明实施例非核心数据帧格式示意图。

具体实施方式

为了更好地理解本发明的技术方案,下面结合附图和实施例对本发明做进一步的详细说明。

本发明提出了一种不稳定网络下可靠数据通信方法。如图1所示,具体实施时,所述可靠数据通信方法可采用协议方式应用,提供一种在udp协议之上的可靠数据通信协议(下称“通信层”),该框架从底层开始由数据链路层协议、ip协议、udp协议、可靠数据通信协议和应用程序5层组成。本发明提供在udp协议之上的可靠数据通信协议。

本发明实施例提供的一种不稳定网络下可靠数据通信方法,包括将可靠数据通信分为核心数据通信和非核心数据通信两种模式。具体实施时,核心数据与非核心数据由应用层用户程序确定,本通信方法根据数据类型选择不同的模式进行数据通信。

所述核心数据通信模式,用于在上层收发应用程序之间进行可靠的数据通信,提供数据确认、前向纠错、数据重传等可靠数据通信机制。

所述非核心数据通信模式,用于在上层收发应用程序之间进行普通数据通信,发送端仅负责发送数据,接收端对收到的数据按序列号从小到大顺序向上层应用程序提交,数据的完整性交由上层应用程序保障。

进一步,所述核心数据通信模式中,核心数据发送端工作流程如图2所示、核心数据接收端工作流程如图3所示。

参见图2中核心数据发送端工作流程,具体实施时,可在核心数据发送端设置数据帧封装模块、数据帧发送模块、数据帧重传模块和确认帧接收模块,预先建立发送缓冲队列和重传缓存队列。虚线箭头表示控制信号的连接,实线箭头表示数据的流向。实施例的核心数据发送端工作流程如下:

1)发送端通信层收到上层应用程序交付的数据后,数据帧封装模块根据数据帧容量限制进行拆分,并按照图4所示的数据帧格式进行封装,将封装好的数据帧送入发送缓冲队列,然后通过控制信号通知数据帧发送模块负责发送数据。

图4是实施例设置的核心数据通信帧格式,包括数据类型、信道编号、数据起始标志s、数据结束标志e、数据序列号、数据长度、ldpc前向纠错校验码和传输数据。数据类型占3bit,001表示核心数据。信道编号占3bit,用于指定发送数据的信道。数据起始标志s占1bit,0表示该帧为非起始数据帧,1表示该帧为起始数据帧。数据结束标志e占1bit,0表示该帧为非结束数据帧,1表示该帧为结束数据帧。数据序列号占1字节,对数据帧进行编号。数据长度占2字节,指明数据帧中携带了多少个字节的数据。ldpc前向纠错校验码占4字节,负责对整个数据帧(包括帧首部)进行校验、纠错,在发送端进行校验码计算前,该4字节全部置0,计算得到的校验码填入该位置,供接收端对收到的数据帧进行校验、纠错,减少数据重传机率,减轻网络负载。

2)发送端的数据帧发送模块检查发送缓冲队列,将发送缓冲队列中的数据帧按先进先出的顺序通过网络接口发送出去,然后将发送出去的数据帧从发送缓冲队列移入重传缓冲队列,并开启该数据帧重传计时(timer)。实施例中优选设置系统启动时缺省重传计时时间rto(retransmissiontime-out)为3秒。

3)发送端的数据帧重传模块周期性地检查重传缓冲队列,对队列头部计时已到期的数据帧通过网络接口重新发送该数据帧,将其移至重传缓冲队列尾部,重新进行重传定时,本发明进一步提出,在这种超时重传的情况下,并调整增加重传定时时间rto,优选地,将重传定时时间rto修改为2倍的旧rto时间。

并且,本发明提出可设置最大重传次数。实施例中设定,若一个数据经过10次重传仍然未能成功发送,则认为网络不可达,终止整个数据传输过程,向应用程序报告传输错误。

rto时间是所有数据帧共享的,每一个数据帧的每一次重传都会影响该参数。在网络通畅、稳定的情况下,会大致收敛到一个较优时间。

4)确认帧接收模块在收到某一确认帧后,根据帧内ldpc前向纠错检验码对数据进行纠错处理,然后与重传缓冲队列中的数据帧逐一比较数据序列号,若找到相应的数据帧,则将该数据帧从重传缓冲队列删除。

考虑到数据帧从发送出去到收到确认帧,往返的时间动态反映了网络状况,对于核心数据通信,本发明提出收到确认帧以后调整rto设置。发送端每次收到确认帧后,进行以下操作:

1)通过比较明确对应的数据帧后,已接收时间戳及收到确认帧的时间计算这个数据帧的传输rtt(roundtriptime,往返时间)时间,计算方式为收到确认帧时间减去对应数据帧发送时刻时间,再除以2,即得到新的rtt时间。

2)更新加权平均往返时间rtts,计算公式为:

新的rtts=0.875×旧的rtts+0.125×新的rtt

3)再计算rtt的加权平均值rttd,计算公式如下:

新的rttd=0.75×旧的rttd+0.25×|rtts-新的rtt|

4)然后修改重传定时时间rto,计算公式如下:

rto=rtts+4×rttd

发送端通过发送窗口sw对核心数据通信进行数据流量控制,防止网络拥塞。发送窗口sw限制一次能够发送的数据帧的数量,初始设置为10,每收到一个有效的确认帧,发送窗口sw增1;而数据每重传一次,发送窗口sw减1。非核心数据通信模式则不需要这种数据流量控制,由上层应用层解决即可。

参见图3中核心数据接收端工作流程,具体实施时,可在核心数据接收端设置数据帧接收模块和数据整理模块,预先建立接受缓存队列。虚线箭头表示控制信号,实线箭头表示数据的流向。实施例的核心数据接收端工作流程如下:

1)接收端通信层的数据帧接收模块在收到数据帧以后,根据数据帧内ldpc前向纠错检验码对数据进行纠错处理,然后比较数据序列号。

如果是重复数据帧,说明发送端可能因为未接收到该数据帧的确认帧而重发了该数据帧,所以丢弃该重复数据帧,并向发送端通信层重发确认帧(格式如图5所示);

否则,接收到的为新数据,将数据保存到接收缓冲队列,向发送端通信层发送确认帧(格式如图5所示),并通知数据整理模块对数据进行处理。

图5是实施例设置的核心数据确认帧格式,包括数据类型、信道编号、数据起始标志s、数据结束标志e、已接收数据序列号、数据长度、已接收时间戳和ldpc前向纠错校验码。数据类型占3bit,001表示核心数据。信道编号占3bit,用于指定发送数据的信道。数据起始标志s占1bit,0表示该帧为非起始数据帧,1表示该帧为起始数据帧。数据结束标志e占1bit,0表示该帧为非结束数据帧,1表示该帧为结束数据帧。已接收数据序列号占1字节,为接收端已正确接收的数据帧的编号。数据长度占2字节,指明已接收到数据帧包含多少个字节的数据。ldpc前向纠错校验码占2字节,负责对整个数据确认帧进行校验、纠错,在发送端进行校验码计算前,该2字节全部置0,计算得到的校验码填入该位置,供接收端对收到的数据确认帧进行校验、纠错。

2)数据整理模块根据数据帧起始标志s、数据结束标志e和数据序列号检查一批数据是否全部正确接收。如果尚未正确接收全部数据,则数据整理模块挂起。如果已正确接收全部数据,则按数据序列号先后顺序对数据进行整理,向上层应用程序提交所接收的完整数据。具体实施时,数据整理模块可由定时器(timer)和数据帧接收模块启动运行。定时器启动数据整理模块是一个定时器中断服务处理过程,可启动数据整理模块运行,并完成相关操作(一段数据完整接收时启动数据整理操作,否则再次挂起)。定时器中断服务处理过程优先级高,在其处理过程中数据帧接收模块处于暂停状态。

进一步,所述非核心数据通信模式中,发送端通信层收到上层应用程序交付的数据后,数据帧封装模块根据数据帧容量限制进行拆分,并按照图6所示的数据帧格式进行封装,将封装好的数据帧送入发送缓冲队列。发送端数据帧发送模块检查发送缓冲队列,将队列中的数据帧按先进先出的顺序通过网络接口发送出去。即非核心数据通信模式中,发送端通信层只需涉及封装和发射模块。非核心数据通信不校验、不重传,数据可靠性由上层应用程序保证。

图6是非核心数据通信帧格式,包括数据类型、信道编号、数据起始标志s、数据结束标志e、数据序列号、数据长度和传输数据。数据类型占3bit,002表示非核心数据。信道编号占3bit,用于指定发送数据的信道。数据起始标志s占1bit,0表示该帧为非起始数据帧,1表示该帧为起始数据帧。数据结束标志e占1bit,0表示该帧为非结束数据帧,1表示该帧为结束数据帧。数据序列号占1字节,对数据帧进行编号。数据长度占2字节,指明数据帧中携带了多少个字节的数据。

接收端通信层中,数据帧接收模块在收到数据帧以后,将数据保存到接收缓冲队列,并通知数据整理模块对数据进行处理。数据整理模块根据数据帧内数据结束标志e检查数据,按数据序列号先后顺序对数据进行整理,向上层应用程序提交所接收的数据。

具体实施时,可采用软件方式实现流程的自动运行。运行流程的装置也应当在本发明的保护范围内。

本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1