APP下载

一种应用层可靠组播传输控制方法

2023-07-05曹雪君

航天控制 2023年3期
关键词:按序发送数据应用层

曹雪君,童 心

北京航天自动控制研究所,北京 100854

0 引言

随着航天领域业务的发展,战术及运载领域对试验数据的实时处理效率不断地提出新的要求。由于试验数据的种类和数量越来越多,多屏显示的需求日益增加。数据既需要在多个终端之间实现可靠传输,又需要保证传输的效率。利用TCP通信技术,发送方与多个终端同时建立多条TCP传输通路可以保证传输的可靠性,但TCP的三次握手及确认机制,使网络传输的压力较大,由此产生的延迟无法满足航天领域对数据处理实时性的要求;基于UDP的组播传输能够解决传输效率问题,但由于航天型号试验中时序数据的重要性较高,必须保证传输的可靠性,因此组播的不可靠传输又无法满足此要求。另外,航天领域的特殊性质使得设备的国产化要求日益激增,虽然目前已有一些针对国产化数据处理技术的优化方法[1-2],但对于数据传输的优化研究却较少。因此,航天领域的数据处理对数据传输提出了更高的要求。

本文提出了一种应用层可靠组播传输控制方法,该方法在发送数据时添加额外的序号信息、并定时发送心跳信息,接收方反馈对数据的接收情况,通过收发双方不断地进行信息交互,实现组播传输的可靠性。

1 应用层可靠组播传输控制技术研究

1.1 现有应用层组播方法

目前对应用层组播的研究成果方面,文献[3-6]主要对应用层组播算法进行了研究和优化,提高了组播传输的效率、稳定性等,但并不能保证数据传输的可靠性。在提升可靠性方面,目前有M-THROM[7]模型,该模型适用于低时延的情况,但由于模型实现的底层依赖TCP协议,因此开销过大;主动随时较发[8]通过环结构提高数据传输的可靠性,但该方法依赖概率论,并不保证绝对可靠;此外,基于心跳机制的差错控制模型[9]采用了心跳与序列号控制的方法,该方法仍只提供合理保证。本文在该方法的基础上进行扩展,进一步保证应用层组播传输的可靠性。

1.2 可靠组播实现思路

基于UDP的组播发送方只负责发送数据,不考虑接收方对数据的接收情况,若要实现可靠传输,需要收发双方进行额外的信息交互,互相反馈各自收发情况。

对于发送方,需要定期向接收方反馈已发送的数据报文信息。对于接收方,需要判断是否存在丢失的数据报文,当存在丢失的数据时,将丢包信息反馈给发送方进行重新发送。发送方每发送一包数据报文时,需要先缓存该数据报文,以便丢包时重发。但缓存数据又不宜过多,必须定期清除缓存中所有接收方均已收到的数据报文。因此,接收方还需要向发送方反馈已收到的报文信息。基于上述机理,将可靠组播传输思想阐述如下:

发送方在发送数据时,对数据报文进行连续按序递增编号,即数据报文中携带报文序号。发送方定期广播心跳报文,心跳报文携带已发送的最大报文序号。接收方接收到心跳报文后,根据心跳报文中携带的序号,判断是否存在丢包。如若丢包,则向发送方反馈丢包的数据报文序号,以便发送方在收到丢包信息时重新发送该序号的数据。

发送方在发送数据后将数据在本地进行缓存。接收方定期向发送方反馈已连续按序收到的最大报文序号。发送方根据所有接收方反馈的序号判断可以清除的缓存数据。

接收方接收到的数据可能存在丢包和乱序,为了提高处理效率,接收方也采用了缓存机制,将非按序接收到的报文数据内容进行缓存。直到接收到的数据包使缓存中的数据连续,则从缓存中取数据进行处理并将该数据从缓存清除。

2 应用层可靠组播设计与实现

2.1 报文分类与结构

传统的组播传播方式中,发送方直接将数据内容发送即可,不考虑接收方丢包及乱序的情况。为了实现组播传输的可靠性,首先对应用层的传输报文进行扩展。在本文提出的可靠组播传输模型中,发送方的报文分为2类:数据报文和心跳报文。接收方为了反馈接收到的数据情况,向发送方反馈的报文也分为2类:NAK重发报文和ACK确认报文。

2.1.1 发送方报文

数据报文:发送方的数据报文携带数据内容和报文序号,其中报文序号从1开始递增,用来控制组播传输数据的可靠性与有序性。

心跳报文:发送方定时发送心跳报文,用于通知接收方目前已发送的最大数据报文序号。

发送方报文的具体格式见表1。

表1 发送方报文格式

2.1.2 接收方报文

NAK重发报文:接收方反馈的NAK重发报文携带丢失的报文序号,用于通知发送方重新发送该序号的数据报文,以实现丢包重传机制。

ACK确认报文:接收方反馈的ACK确认报文携带已按序且连续收到的最大报文序号,用于发送方清除缓存中的数据报文。

接收方报文的具体格式见表2。

表2 接收方报文格式

2.2 发送方对报文的处理策略

1)发送数据报文的处理逻辑

发送方每发送一包数据报文,首先更新当前已经发送的最大报文序号,用于后续发送心跳报文时使用;其次缓存该数据报文内容,以便在接收方丢包时重发。

2)发送心跳报文的处理逻辑

发送方定时发送心跳报文,心跳报文携带发送方已经发送的最大报文序号。

3)接收NAK重发报文的处理逻辑

每当发送方收到一条NAK重发报文,根据NAK重发报文中的序号,在缓存中查找该序号对应的数据内容,将该数据内容重新进行广播发送。

4)接收ACK确认报文的处理逻辑

ACK确认报文携带该接收方已按序收到的最大报文序号,用于发送方删除数据报文缓存。由于组播存在多个接收方,每个接收方收到的最大报文序号可能不同,因此需要分别记录。

每当发送方收到一条ACK确认报文,记录该报文发送者的IP地址、发送时间、以及携带的最大报文序号。由于接收方可能中途退出或掉线,当发送方清除数据报文缓存时,首先需要判断当前在线的接收方。判断某个接收方是否在线时,根据当前时间以及最后收到该接收方ACK确认报文的时间,当两者之间的时间差超过一定域值时,认为该接收方已经退出。其次,比较所有在线接收方的最大报文序号,取最小值作为发送方可以删除的最大报文序号,这样可保证所有当前在线的接收方均已收到该序号前的所有数据报文。发送方清除该序号前的所有缓存报文。

2.3 接收方对报文的处理策略

2.3.1 接收数据报文处理逻辑

应用层可靠组播传输的核心在于接收方对数据报文的处理。当收到乱序甚至丢包的数据报文时,如何对报文进行缓存、重排处理,是整个可靠组播技术的关键所在。

接收方收到数据报文后,根据该数据报文的序号,有如下几种操作方式:丢弃处理、缓存处理、正常处理该报文、处理该报文及缓存报文。

1)丢弃处理:由于存在多个接收方,某一接收方丢失数据并要求发送方重发数据报文时,其他接收方可能会收到重复的数据报文,对于收到的重复报文,直接丢弃即可。

2)缓存处理:当收到一条未收到过的非按序的数据报文时,将该报文内容进行缓存,待接收到全部连续按序报文时再进行处理。例如,已收到序号为4~6的数据报文,然后收到了序号为8的数据报文,则将该报文内容缓存,待收到序号为7的数据报文后再进行处理,以防止乱序。

3)正常处理该报文:当已收到的所有报文序号均连续,且下一条收到的数据报文序号也是按序的,则正常处理该报文即可。例如已收到序号为1~5的报文,接下来收到序号为6的数据报文。

4)处理该报文及缓存报文。针对上述2)中缓存数据报文的情形,当收到的报文使缓存报文按序且连续时,属于该情形。如2)中的示例,已收到序号为4、5、6和8的数据报文(序号为8的报文已缓存),当收到序号为7的数据报文时,依次处理序号为7和8的数据报文,即处理序号为7的该报文以及序号为8的缓存报文。

2.3.2 接收心跳报文处理逻辑

接收方收到心跳报文后,根据心跳报文中的序号,判断该序号前的数据报文是否有未收到的情形,若存在未收到的数据报文,则向发送方发送携带丢失数据报文序号的NAK重发报文。

2.4 发送方与接收方处理流程

2.4.1 发送方流程

发送方的处理包括以下几个流程:

1)发送数据:发送数据报文并缓存,其中报文序号从1开始按序递增。

2)发送心跳:定时广播当前已发送最大数据报文序号的心跳报文。

3)监听反馈报文:若收到NAK重发报文,优先发送丢失的数据报文;若收到ACK确认报文,记录该接收方已按序收到的最大报文序号。

4)清除缓存:根据接收方反馈的ACK确认报文序号,定时清除缓存中所有当前在线接收方均已收到的数据报文。

发送方的具体处理流程如图1所示。

图1 发送方处理流程

2.4.2 接收方流程

接收方的处理包括以下几个流程:

1)监听报文:根据接收到的报文类型,判断该报文的处理逻辑。

2)处理数据报文:根据报文序号进行相应的处理(包括丢弃、正常处理、缓存等)。

3)处理心跳报文:首先根据心跳报文中的报文序号和目前已经接收到的数据报文序号,判断是否丢失数据,在丢失数据时发送NAK重发报文。其次根据已按序收到的最大报文序号发送ACK确认报文。

接收方的具体处理流程如图2所示。

图2 接收方处理流程

3 实验与应用

3.1 实验参数设置

实验部分,通过不同的实验组合验证组播传输的可靠性。分别在1~3个接收端的情况下,发送方连续发送700万条组播数据,数据载荷长度不等,分为长、中、短3个级别。短级别载荷长度包括几个字节数据,中级别载荷长度包括几十个字节数据,长级别载荷长度包括几百个字节数据。

实验中,人为地模拟丢包情形。在发送方模拟丢包场景,丢包率分别为2%、1%和0.5%。为了更有效地接近真实的丢包场景,实验中不仅在发送原始数据包时模拟丢包,在发送重发数据包时也模拟丢包情形。

3.2 实验结果

为了直观地看到接收方是否完整且有序地收到数据包,某次实验中,令发送方按序发送从1开始递增的数字,使发送报文编号与数据内容一致,便 于记录每包数据对应的报文序号。观察发送方的重发数据包与接收方收到的数据内容。

实验中,发送方模拟丢包并重发了部分数据报文,如编号为562、567和573的报文;观察接收方收到的数据,接收方能够按序且完整地收到发送方重发的所有数据报文。

此外,对3.1节不同实验参数下,分别进行了各组实验。当数据载荷长度分别为几字节、几十字节和几百字节时,发送方连续发送700万条组播数据,在不同丢包率情形下,所有接收方均能收到完整有序的数据。因此,实验验证了本文提出的应用层可靠组播传输方法的有效性。

3.3 航天领域应用

目前组播主要应用于航天型号的运载和战术领域的数据处理。型号在试验过程中,同时存在多个终端显示不同的试验数据。发送方通过组播发送数据,多个客户端同时接收数据,并对本客户端所需展示的数据进行筛选、处理、显示等操作。

4 结论

基于重传与确认机制的应用层可靠组播传输方法结合了TCP和UDP传输的优点,实现了可靠、按序、快速的数据传输。该方法在较低的网络开销下,有效地满足了航天运载和战术领域多个客户端同时、可靠、高效地显示不同数据的需求。

猜你喜欢

按序发送数据应用层
深圳翼虎投资董事长余定恒:兔年市场围绕车联网、创新药、消费复苏等“按序”展开
阅读光阴
原料自动化立体仓库按序均衡投料系统设计
一种车载自组织网络的媒体接入控制协议
基于马尔科夫链的LoRaWAN网络节点性能分析
带标记方式的CRDSA++协议性能分析*
基于分级保护的OA系统应用层访问控制研究
使用IPSec安全传输数据
基于双线性对的多重数字签名方案
新一代双向互动电力线通信技术的应用层协议研究