一种基于数据包的单向可靠传输方法及收发装置 【技术领域】
本发明涉及到数据的单向可靠传输技术,可以有效的解决数据包在单向传输过程中出现包内比特差错和数据包丢失的自校验、自恢复,属计算机网络通信领域。
背景技术
单向信道主要应用场景:隔离网闸的信息安全传输系统、深空通信、广播电视通信系统等。单向信道下传输信息不可靠性包括数据包内比特的错误和数据包的丢失两个方面。
为了保证数据的可靠传输,目前较常用的技术:自动重传请求(ARQ)技术和前向纠错(FEC)技术。ARQ技术:通过反馈信道,将丢失的数据段信息反馈给发送方,发送方重新发送丢失的数据段;FEC技术:通过对数据包分组添加冗余包,使得发送的数据包组具有一定的丢包恢复能力。FEC技术包括基于纠错码和基于纠删码的。纠错码是不知道差错的位置,需要足够多的冗余信息,以便能在接收端能自动纠正传输差错,如汉明码、里德-所罗门码(RS码)、卷积码、LDPC码等。纠删码应用于删除信道,如在网络中传输数据,可以通过包号信息判断出差错的位置,发送端可以少发一些冗余包,提高数据传输效率。目前常用RS纠删码,奇偶校验码等码型,但是现有的纠删码方案对于连续丢包的恢复性能很差。
单向信道的典型特点是发送端和接收端的信息传输时只能单向传递,发送端和接收端没有任何的信息交互,当接收端的接收到的数据包出现比特错误或包丢失的情况下,发送端不能将差错信息反馈给发送端。所以不能通过自动重传来解决传输的过程中数据包的丢失和出错。只能采用FEC的方法,在发送端添加一些冗余信息,利用数据的相关性,在接收端自动纠正在传输中包内的错误和数据包丢失。
由于单向信道的特殊性,目前国际国内都没有一个十分完美的解决方案来完善解决单向信道下的数据包可靠传输问题。现有技术中虽然可以通过纠错码的技术恢复出数据,但对数据包的丢失恢复能力差,特别是连续丢包的恢复能力比较差,而且现有的技术没有很好的兼顾单向信道下数据包内信息的纠错和丢包恢复。
发明内容:
鉴于上述种种原因,本发明的目的之一是提供一种基于数据包的单向可靠传输的方法,解决数据单向传输时不能很好的兼顾包内纠错和丢包恢复的技术问题。
为了达到上述的目的,本发明的技术方案这样实现的:
一种基于数据包的单向可靠传输方法,其特征在于,包括以下步骤:
(1)、发送端将信息数据块分成相等大小的信息数据包序列,作为一个编码包组;
(2)、将一个编码包组划分成几个子编码包组的联合,再按照纠删码的编码规则生成每个子编码包组的冗余包,每个子编码包组加上生成的冗余包构成一个子包组;
(3)、对每个数据包进行CRC码(循环冗余码)编码,得到校验信息;
(4)、对各组数据包和该组的冗余包进行编号,使每个数据包有唯一的ID号,包括两级编号:包组号和子包组号;
(5)、对所有数据包包内进行FEC(前向纠错)编码;
(6)、将所述的编码包组发送到接收端,发送时传输协议选择UDP协议(用户数据报协议);
(7)、接收端缓存下接收到的数据,再对接收到的所有数据包进行包内FEC解码,选用的码型与发送端的对应;
(8)、将数据包进行排序,对每个数据包进行CRC校验;
(9)、通过每个数据包的ID号信息判断是否丢包,如果子包组内没有数据包丢失或丢失的数据包为冗余包,进入步骤(10);如果发现非冗余包丢失,则在子包组内利用编码时建立的数据包相关性恢复出丢失的信息数据包;
(10)、提取每个子包组的信息数据包,去除冗余包,还原出一个编码包组,将信息数据包传递给上层应用。
基于上述方案,步骤(2)中的子编码包组的联合是指:设定要对M个子编码包组进行包组联合,则将信息数据包的序列编号每相差为M的数据包组成包含N-1个数据包的子编码包组;所述包层纠删码选用的为(N-1,N)的奇偶校验码,数据包相同位进行模2加生成冗余包。
基于上述方案,步骤(5)中,选用线性分组码、卷积码、turbo码、LDPC码等码型对数据包内数据进行编码,用来对抗传输过程中数据包内比特层错误。
基于上述方案,步骤(6)中,首先将这些信息包发送出去,再发送冗余包。一般采用UDP协议,在一些特定场合如隔离网闸传输系统中,使用自定义的无反馈传输协议。
基于上述方案,步骤(8)中,将接收端的每个数据包的信息/CRC生成多项式(二进制除法),如果能除尽说明在完成包内FEC解码后数据包内数据没有错误,否则说明数据包内信息仍然有错,将其看成是丢包。
基于上述方案,步骤(9)中,有信息数据包丢失的子包组完成包层纠删码解码,这里选用纠删码是奇偶校验码;当超过所述的子包组的丢包恢复能力时,接收端向上层报告不能恢复的数据包的包号。
本发明的另一目的是:提供一种基于数据包的单向可靠传输的装置。为了达到上述目的,本发明的技术方案是这样实现的:
一种基于数据包的单向可靠传输的发送端装置,包括:
数据包产生模块,用于将待发送的信息数据包按顺序划分成信息数据包序列,作为一个编码包组,将编码包组进行分组,形成多个子编码包组的联合;
包层纠删码编码模块,用于将每个子编码包组按照纠删码编码方式,生成冗余包;
CRC编码模块,用于将每个数据包内的数据进行CRC编码,生成的校验信息;
数据封装模块,用于将CRC校验信息、二级编号的信息和数据包组大小信息等封装在数据包的包头;
包内FEC编码模块:用于建立包内比特之间的相关性,对抗传输过程中数据包内部出现的比特级错误,选用线性分组码、卷积码、turbo码、LDPC码等码型;
传输模块,用于将数据包发送到接收端,可以采用UDP协议或自定义的无反馈传输协议。
基于上述技术方案,其特征在于数据包产生模块中每个子编码包组是将每相差为M的信息包构成,其中M表示设定的能恢复的连续丢包的个数;所述包层纠删码编码模块是指能对每个子包组的信息数据包按照(N-1,N)的奇偶检验码编码。
一种基于数据包的单向可靠传输的接收端装置,包括:
数据缓存模块:接收数据包分组,在一段时间内缓存接收到的数据包;
包内FEC解码模块,用于纠正数据包传输过程中的数据包内出现的比特错误,恢复出每个数据包包内FEC编码前的数据;
CRC校验模块,用于将接收端的每个数据包的信息除以CRC生成多项式(二进制除法),判断数据包的信息位在包层FEC解码是否还有错误;
数据包检测模块,用于确定在传输过程中哪些数据包丢失,并将丢失数据包的包号和丢失数据包的总数保存下来;
包层纠删码解码模块,用于恢复出每个子包组的丢失的信息数据包;
数据提取模块,用于将每个数据包组中的信息包提取出来,去除冗余包,并去除每个包头的CRC校验信息、包号信息和数据包组大小信息。
基于上述技术方案,所述的包层纠删码解码模块进一步包括:
恢复判决模块,用于判断是否超出了所选码型的丢包恢复能力;
丢包恢复模块,用于利用冗余数据包恢复出每个子包组中丢失的数据包
本发明提供基于数据包的单向可靠传输方法及收发装置,具有以下的优点:
(1)兼顾了包内信息纠错和丢包恢复,还对每个数据包进行了自校验,为单向信道下数据的可靠传输提供了保障;
(2)通过信息数据包的包组联合,使得相邻的数据包在空间上进行了分离,在网络传输情况变坏的情况下,对连续丢包具有很好的抵抗作用;
(3)接收端在信息数据包没出错时直接丢弃冗余包,使得解码的速度远远快于发送端编码的速度,这样避免了因发送端发送过快导致接收端缓存溢出而造成数据包丢失的情况;
(4)根据不同的网络环境,不同的性能需求,可以灵活的调整纠删码编码的效率和丢包恢复性能。
【附图说明】
图1为本发明的系统框架图
图1a为本发明接收端的纠删码解码模块组成图
图2为本发明的处理流程图
具体实施方式:
下面通过附图和实施例对本发明进行详细阐述。
图1示例了本发明的系统框架,该系统包括发送端和接收端两部分,发送端进一步包括数据包产生模块、包层纠删码编码模块、CRC编码模块、数据封装模块、包内FEC编码模块、传输模块。其中数据包产生模块用于将待发送的信息数据包按顺序划分成信息数据包序列,将编号的数据包进行分组。包层纠删码编码模块用于将每个子编码包组按照纠删码编码方式,生成冗余包。CRC校验模块。用于将每个数据包内的数据进行CRC编码,生成的校验信息。数据封装模块用于将CRC校验信息、二级编号的信息和数据包组大小信息封装在数据包的包头。包内FEC编码模块选用汉明码,卷积码等纠错码型,用来对抗传输过程中数据包内比特错误。传输模块用于将数据包发送到接收端,可以采用UDP协议或自定义的无反馈传输协议。
接收端进一步包括数据缓存模块、包内FEC解码模块、CRC校验模块、数据包检测模块、包层纠删码解码模块和数据提取模块。其中,数据缓存模块用于接收数据包分组,在一段时间内缓存收到的数据包。包内FEC解码模块用于恢复出每个数据包包内FEC编码前的数据,纠正数据包传输过程中的数据包内比特错误。CRC校验模块用于用于将接收端的每个数据包的信息除以CRC生成多项式(二进制除法),判断数据包的信息位在包层FEC解码是否还有错误。数据包检测模块用于确定在传输过程中哪些数据包丢失,并将丢失数据包的包号和丢失数据包总数保存下来。包层纠删码解码模块用于恢复出每个子包组丢失的信息数据包。数据提取模块用于将每个数据包组中的信息包提取出来,去除冗余包,并去除每个包头的CRC校验信息、包号信息和数据包组大小信息。
图1a包层纠删码解码模块又包括恢复判决模块和丢包恢复模块。恢复判决模块,用于判断是否超出了所选码型的丢包恢复能力。丢包恢复模块,用于利用冗余数据包恢复出每个子包组中丢失的数据包,本发明一最佳实例是选用奇偶校验码来解码。
以下结合图2,对本发明提出的单向信道下数据可靠传输的方法进行详细地描述,该方法包括以下步骤:
步骤1:当发送端有数据需发送时,首先将数据块划分成连续的多个信息数据包。
这里的原始数据包的大小由上层应用决定,如文件大小或视频图像的一帧构成原始的数据块,对于上层应用连续输出数据流的情况,也可自行设定。
步骤2:发送端对原始数据包序列分成几个子编码包组,然后按包层纠删码的规则进行编码,生成每个子编码包组的冗余包。
先将数据包组分成几个子编码包组,规则如果要对抗M个连续的丢包,将数据包分成M组,编号相差为M的数据生成一个子编码包组。每个子编码包组按照纠删码的规则进行编码,选用的纠删码为奇偶校验码,生成一个冗余包。可以根据网络环境的好坏来调整M的大小,进而改变对抗连续丢包的性能。冗余包的生成方式有多种,本发明的一最佳实例采用奇偶校验码的包层编码来获得冗余包,即每个子包组内的冗余包由该子包组内的信息数据包按奇偶校验码包层编码规则来得到。
例如:一个原始数据块总共可分为8个连续的数据包,分别是A
1、A
2、A
3、A
4、B
1、B
2、B
3、B
4;根据信道的干扰情况,如果希望对抗连续丢包的能力为4,即形成4个编码包组,每相差为4的数据包形成一个子编码包组,P
1=(A
1,B
1),P
2=(A
2,B
2),P
3=(A
3,B
3),P
4=(A
4,B
4)。每一个子编码包组按照奇偶校验码包组编码规则进行编码,分别得到冗余数据包C
1、C
2、C
3、C
4,其中
![]()
即数据包的对应位取模2加生成冗余包的对应位。编码后形成了四个子包组,分别是:(A
1,B
1,C
1),(A
2,B
2,C
2),(A
3,B
3,C
3),(A
4,B
4,C
4)。根据网络情况不同可以做到丢包恢复性能、编码效率的灵活调整,如果希望对抗连续的10个数据包丢失,要将原始的数据包组分成10个子编码包组,即形成了10个编码包组的联合;若希望调整码率,可以调整每个子编码包组中的信息数据包的数目。
步骤3:对各组数据包及冗余包进行CRC编码,得到校验位信息。
此步骤采用的是CRC-16的编码方案,每个数据包得到两个字节的校验位信息。
步骤4:将所得到的CRC校验信息和每个数据包的包号信息及数据包组的大小信息封装在数据包的包头。
数据包的包号信息:包括编码包组的包号和子编码包组的包号。因为单向信道下,接收端不能判断什么时候接收要结束,只能将数据包大小信息封装在数据包的头部,这样方便接收端获悉何时停止接收数据。
步骤5;数据包内信息进行包内FEC编码,建立起包内信息的比特层的相关性,使数据包具有比特层的差错恢复能力。
此步骤中包内FEC编码可以采用线性分组码、卷积码、Turbo码、LDPC码等码型,在本发明中采用(2,1,7)卷积码或(4,7)汉明码。
步骤6:发送端通过传输信道将信息数据包和冗余数据包发送给接收端。
不限制发送数据的方式,一种最佳的方式是将将信息数据包先发送,再将冗余包发送,这样方便信息数据包的提取。一般采用UDP协议;在一些特定场合如隔离网闸传输系统中,使用自定义的无反馈传输协议。
步骤7:数据包内信息的FEC解码,选用的码型与发送端FEC编码码型对应,还原出FEC编码前的数据,纠正在传输过程中可能出现的数据包内比特错误。
步骤8:接收端对进行CRC校验,每个数据包的信息除以CRC生成多项式(二进制除法),如果能除尽说明在完成包内FEC解码后数据包内数据没有错误,否则说明数据包内信息仍然有错,将其看成是丢包。
步骤9:数据包检测是指通过读取包号信息判断传输过程中是否有数据包的丢失,如果有丢失,将丢失的数据包的包号信息记录下来。
步骤10:将步骤8中数据包内信息不能被CRC生成多项式整除的数据包看作是丢包,将差错数据包的包号信息传递给步骤11。
步骤11:接收端判断是否有信息数据包丢失,如果有信息数据包丢失,则执行步骤12,否则,执行步骤13。
在本发明中,由于每个数据包包头都有包的二级编号,接收端对数据包进行预处理后,可以通过包号信息来判断数据包是否丢失,数据包丢失的另一种情况是,根据CRC校验信息判断的。
步骤12:接收端判断能否恢复丢失的数据包,如果可以恢复则执行步骤13,如果不能回复则执行步骤13。
此步骤中,不可恢复的情况是指:一个数据包组中同时丢失了两个或两个以上的数据包的情况。
如对应步骤2中的例子,数据包A
1、B
1或A
1、C
1同时丢失,这种情况A
1、B
1都不能被恢复出来。
步骤13:显示丢包后不能进行恢复的数据包的包号。
步骤14:利用包层纠删码解码,根据包层纠删码的特性恢复出传输过程中可能丢失的数据包。
本发明的一最佳实例选用的纠删码是奇偶校验码,恢复的方法是:将每一个子包组中未丢失的信息数据包与该包组中的冗余数据包按照包层奇偶校验码的解码规则,恢复出丢失的数据包,奇偶校验码解码就是完成每个数据包相同位取模2加运算。
对应步骤2中的例子,如果数据包A
1在传输过程中丢失,可以通过
![]()
(即C
1,B
1数据包对应位进行模2加)。如果连续丢失四个数据包,如A
3、A
4、B
1、B
2,则可以分别用
![]()
等将丢失的数据包恢复。如果是冗余包中丢失一个或若干个,如C
2、C
3丢失,直接将之丢弃,提取出信息包就完成了解码。
步骤15:提取包组内的信息数据包,删除冗余包。将信息数据包传递给上层,并去除每个包头的CRC校验信息、包号信息和数据包组大小信息,结束当前处理流程。
本发明不限于上述的实施例,凡依本发明权利要求范围内所作的均等变化或修饰,皆应属于本发明权利要求的保护范围。