一种数据包恢复方法

文档序号:7884010阅读:196来源:国知局
专利名称:一种数据包恢复方法
技术领域
本发明涉及一种数据包恢复方法,尤其涉及实时通信中数据包出错或者丢失的恢复方法。
背景技术
在实际信道上传输数字信号时,由于信道传输特性不理想及噪声的影响,信号波形会变坏,接收节点所收到的数据包就有可能被损坏。同时,由于网络中排队、拥塞等影响,数据包在传输过程中也有可能会发生丢失。为了恢复传输过程中出错或者丢失的数据包,必须使用有效的差错控制方法。
1990年6月,第九届IEEE计算机和通信协会联合会(INFOCOM′90)第1卷124-131页公开了一篇文章,作者是N.Shacham,P.McKenney等,文章名称为“高速网络中使用编码和缓冲管理的数据包恢复方法”(Packet recovery in high-speed networks using coding andbuffer management),给出了多种前向纠错数据包恢复方法,其中单个数据包的恢复方法描述如下。
图1是现有的冗余纠错包生成方法的示意图。在发送节点,每个数据包组中冗余纠错包是由本组中的k个数据包根据一定的编码方法生成的,可以看出,每组的冗余纠错包只与该组中的数据包相关联。该纠错包生成方法包括以下步骤1)、时间上连续的k个数据包作为一组,发送的数据包带有序列号字段和循环冗余检查(Cyclic Redundancy check,CRC)校验字段;2)、在发送节点,将一组中的k个数据包按位异或操作(Exclusive-Or,XOR)生成纠错包Cc,i=Σj=0k-1Cj,i,i=0,1,2,···m-1]]>
其中,Cj,i是第j个数据包的第i位,CC,i是纠错包的第i位,m表示每个数据包有m个比特位。图中的f0( )表示一种编码方法,这里使用了奇偶校验编码方法。
上述方法的编码效率为k/k+1,k是一组中所有数据包个数,k+1是一组中所有数据包个数和冗余包个数之和。可见,冗余包越少,编码效率越高。
数据包接收过程中恢复出错或者丢失的数据包的方法包括以下步骤1)、对每个接收到的数据包进行CRC校验,并且根据序列号判断是否有数据包丢失;2)、如果接收节点收到的该组数据包中,没有数据包出错或者丢失,忽略跟随的冗余纠错包;3)、如果接收节点收到的该组数据包中,有且仅有一个数据包出错或者丢失,根据序列号可以知道该数据包的位置,假设为数据包组中的第t个数据包,利用数据包之间的异或关系,则Ct,i=(Σj=0k-1cj,i+cc,i),i=0,1,2,···,m-1,]]>且j≠t出错或者丢失的数据包能够完全恢复。
由上述内容可知,现有的前向纠错(Forward Error Collection,FEC)数据包恢复方法有其不足的地方冗余的纠错数据包仅仅和自己所在组中的数据包有关联,纠错能力完全依赖于该组中纠错包的纠错能力;一个数据包组中所能恢复的数据包的个数,受到该组中的纠错数据包的纠错能力的限制;为了提高纠错能力,必然增加纠错包的长度,那么就要增加带宽消耗的负担;由于一个数据包组中纠错包的纠错能力有限,该方法并不适合连续的数据包的出错或者丢失。

发明内容
本发明提出了一种冗余纠错包的生成方法,其中一个数据包组中的纠错包不仅仅与本组的数据包相关联,而且与多个数据包组中的数据包相关联,也就是说任何一个数据包组由分布在多个数据包组中的纠错数据包来保护,因而提供了更大的纠错能力。
下面是发送节点冗余纠错包生成的步骤。在本发明中,要发送的每个数据包都带有差错校验能力,用于检验数据包本身的误码。每个数据包还有序列号字段,用于指示数据包在序列中的位置。
首先,将连续的数据包流分段,时间上连续的若干个数据包的集合作为一组数据包。然后,在每个数据包组中添加一个用于纠错的冗余数据包,称为纠错包。纠错包是由当前一组数据包的全部数据包和前面至少一个数据包组的数据包根据一定的数学规则计算得出的。参与计算的当前数据包组和前面至少一个数据包组被认为相互关联。最后,在一组中所有数据包发送完后,纠错包紧跟着发送。
本发明还提供了一种数据包恢复方法,在接收节点接收到一个数据包组后,对其差错检测和恢复的步骤是这样实现的。
首先,对每个接收到的数据包进行差错校验,并且根据序列号是否连续判断是否有数据包丢失。假设前面相关的数据包组中没有出现差错,或者有差错但是已经成功恢复,如果接收节点收到的该组数据包中,没有数据包出错或者丢失,则忽略跟随的冗余纠错包;如果任何一组数据包中的出错或者丢失的数据包的个数小于或者等于该组纠错包的纠错能力,则通过该组纠错包恢复出错或者丢失的数据包。例如,当前数据包组中有且仅有一个数据包出错,并且当前数据包组的纠错能力是一个数据包,则通过当前组的纠错包恢复出错或者丢失的数据包。
如果任何一组数据包中的出错或者丢失的数据包的个数大于该组中的纠错包的纠错能力时,仅仅靠该组自己的纠错包已经无法完全恢复所有的错误。因为该数据包组和后续的数据包组的纠错包也建立了数学关联,这样接收节点等待下一个数据包组的纠错包到达,联合当前组的纠错包和后续组的纠错包能提供更大的纠错能力,这里假设后续到达的数据包都是正确的。
本发明方法能够快速、有效的恢复出错或者丢失的数据包,从而降低传输过程中的差错率。并且,本发明尤其能够恢复连续的数据包出错或丢失。


图1是现有的冗余纠错包生成方法的示意图;图2是根据本发明一个实施例的冗余纠错包生成方法的示意图;图3是根据本发明一个实施例的第j组数据包对当前组纠错包的贡献Bj,u的计算示意图;图4(a)是通过相关联的l个数据包组对第u1个数据包组进行纠错的示意图;
图4(b)是通过相关联的l个数据包组对两个数据包组中出错进行纠错的示意图。
具体实施例方式
下面结合附图和具体实施方式
对本发明作详细说明。
图2是根据本发明一个实施例的冗余纠错包生成方法的示意图。本实施例中,共有l个数据包组相关联,即每个数据包组和前面l-1个数据包组相关联,并用奇偶校验编码方法生成本组的纠错包。
下面说明在发送节点生成冗余纠错包的过程。
本发明中要发送的每个数据包都带有CRC校验字段,用于检验数据包本身的误码。每个数据包还有序列号字段,用于指示数据包在序列中的位置。当数据包丢失时,可以通过检查序列号获知哪个数据包丢失了。为简单起见,本实施例中规定每个数据包的长度固定为mbits。当然这不是必须的,数据包的长度是可以变化的。
首先,将连续的数据包流分段,时间上连续的k个数据包作为一个数据包组。这里规定每个数据包组中的数据包个数是固定的,但这也不是必须的。u作为组序号(u≥0),假设k<m。
然后,在每个数据包组中添加一个用于纠错的冗余数据包,称为纠错包。该纠错包是由当前数据包组和前面l-1个数据包组的信息用奇偶校验编码方法计算得出的,也就是说在本实施例中时间上连续的l个数据包组相互关联。由于本实施例采用的编码方法,每一个纠错包只有一个数据包的恢复能力。
假设第u个数据包组为当前数据包组,当前数据包组和前面l-1个数据包组相关联,根据奇偶校验编码方法产生当前数据包组中的纠错包Bu的公式如下Bu=Σj=u-l+1uBj,u·····················································(1)]]>其中,Bj,u(u-l+1≤j≤u)定义为相关联的l个数据包组中第j个数据包组中的数据包对于Bu的贡献。可见Bu和l个数据包组的每个数据包组的信息都有关。
那么Bj,u是如何得到的呢?Bj,u通过对第j组的所有数据包Aj,n(0≤n≤k-1)进行偏移异或操作(XOR)得到,
Bj,u=Im0s(k-1)×mAj,0+0s×mIm0s(k-2)×mAj,1+02s×mIm0s(k-3)×mAj,2+···+0ns×mIm0s(k-n-1)×mAj,n+···+0s(k-1)×mImAj,k-1.---(2)]]>其中,s表示数据包偏移的比特位,s的计算方法将在下面详细描述。Aj,n(0≤n≤k-1)表示第j个数据包组中的第n个数据包,其在公式(2)中为一个m行单列的向量 Aj,n,0表示第j个数据包组中的第n个数据包的第0比特位,...,依此类推,Aj,n,m表示第j个数据包组中的第n个数据包的第m比特位。
Im表示单位对角阵,m为行数和列数;0s(k-1)×m表示s(k-1)行m列的0矩阵,...,0s(k-n-1)×m表示s(k-n-1)行m列的0矩阵;0s×m表示s行m列的0矩阵,...,0ns×m表示ns行m列的0矩阵。
本实施例中,出于简单,数据包的长度固定为m比特位,每个数据包组的数据包个数也都是k个,但这只是为了便于说明本发明,本领域的技术人员通过本发明应该能够了解本发明中的数据包长度和数据包组的数据包个数都是可以变化的。
图3是根据本发明一个实施例的第j组数据包对当前组纠错包的贡献Bj,u的计算示意图。该示意图的计算结果和公式(1)和(2)得到的结果是相同的,图3是用具体的数据包的示意图形式,而公式(1)和(2)是用数学方程的形式。Bi,u的计算是对于Ai,n(0≤n≤k-1)的偏移异或操作(XOR)。第j个数据包组中的第1个数据包(n=0)放在第1行;第2个数据包(n=1)放在第2行,并向右偏移s比特位,其中s=jmod(l),也就是j除以l的余数,这里l是相关联的数据包组个数,j是接收节点接收到的数据包组的序号;相对应,第n个数据包放在第n行,并向右偏移ns比特位。所产生的空位用0填充,得到一个矩阵。对这个矩阵用异或操作就得到Bj,u。
本实施例中应用了奇偶校验编码方法计算纠错包,也可以用其它编码方法,如里德·索罗门编码方法或者其它的编码方法。
在本实施例中,可以得到该编码方法的冗余率Rc,冗余率定义为总的冗余包长度与总的数据包长之比,根据公式(1),Rc=ml+Σi=0l-1(k-1)·ik·m·l=2ml+(l2-l)(k-1)2k·m·l]]>
传统的具有一个数据包恢复能力的数据包FEC方法,冗余率Rt定义为Rt=1k]]>对于大部分的应用,数据包长度m远远大于k和l,这样Rc很接近Rt。与传统的数据包恢复方法的冗余率相比,本发明方法的冗余率基本上没有变大。特别是当l等于1,也就是说冗余数据包仅仅依赖于本数据组产生,我们得到Rc=Rt。
当纠错包生成后,在一组中所有数据包发送完后,该组的纠错包紧跟着发送。
下面说明相应的数据包恢复方法。接收节点接收到一个数据包组后,就进行差错检测和恢复。
首先,对每个接收到的数据包进行CRC校验,并且根据序列号是否连续判断是否有数据包丢失。这里假设当前数据包组前面相关的数据包组中没有出现差错,或者有差错但是已经成功恢复出错或者丢失的数据包。
如果接收节点收到的当前组数据包中,没有数据包出错或者丢失,忽略跟随的冗余纠错包。
如果当前数据包组中有且仅有1个数据包出错,根据上面的假定,纠错包有恢复一个数据包的能力,则通过该纠错包能够恢复出错或者丢失的数据包,设该出错或者丢失的数据包序号为k1。
根据假设,前面相关联的l-1个数据包组中没有数据包丢失、出错或者丢失、出错的数据包已经恢复,第u个数据包组为当前数据包组,Bu为当前数据包组的纠错包,则根据纠错包的生成方法可知,前面l-1个数据包组对于Bu的贡献Bj,u(u-l+1≤j≤u-1)是已知的,将它们代入公式(1),得到当前组数据包对当前组纠错包的贡献Bu,u,Bu,u=Bu-Σj=u-l+1u-1Bj,u,---(3)]]>然后将Bu,u代入公式(2),得到Bj,u=Im0s(k-1)×mAj,0+0s×mIm0s(k-2)×mAj,1+02s×mIm0s(k-3)×mAj,2+···+0ns×mIm0s(k-n-1)×mAj,n+···+0s(k-1)×mImAj,k-1.---(2)]]>则任一个数据包Aj,n丢失或者出错都能从公式(4)中得到恢复。
如果当前数据包组中有n(2≤n≤l)个数据包出错,并且当前数据包组的纠错能力是一个数据包,则必须等待后续的数据包组的纠错包到达,联合多个纠错包提供至多l(l≥2)个数据包的恢复能力假设第u个数据包组为当前数据包组,当前数据包组中丢失的数据包是Cn0,Cn1,Cn2,…Cn(l-1),(0≤n0<n1<…<n(l-1)≤k-1),并且后面l-1个数据包组没有数据包丢失;将当前数据包组的纠错包Bu,和当前数据包组相关联的前面l-1个数据包组中所有数据包对第u个数据包组的贡献代入公式(1),可以得到当前数据包组中的数据包对当前组的纠错包的贡献Bu,u,见公式(3),在后续l-1个数据包组到达后,将第u+1个数据包组的纠错包Bu+1,和第u+1个数据包组相关联的前面l-1个数据包组中除当前组u外的所有数据包对第u+1个数据包组的贡献代入公式(1),可以得到当前数据包组对第u+1个数据包组的纠错包的贡献Bu,u+1,Bu,u+1=bu+1-Σj=u-l+2u+1Bj,u+1,j≠u,---(5)]]>同样,可以得到当前数据包组对第u+2个数据包组的纠错包的贡献Bu,u+2,...,当前数据包组对第u+l-1个数据包组的纠错包的贡献Bu,u+l-1,将上述这些值、已知的相关数据包值、和纠错包值代入到公式(2),化解后得到下式, 该公式中,Be0,Be1,Be2...Be(u+l-1)是已知的值,求解该方程组可以得到Cn0,Cn1,Cn2,…Cn(l-1)),(0≤n0<n1<…<n(l-1)≤k-1)。
上文涉及的情况是这样的如果当前数据包组中有n1(2≤n1≤l)个数据包出错,并且当前数据包组的纠错能力是一个数据包,则必须等待后续的n1个数据包组的纠错包到达,联合多个纠错包提供n1个数据包的恢复能力。如图4(a)所示为通过相关联的l个数据包组对第u1个数据包组进行纠错的示意图。那么如果后续的n1个数据包组也有数据包出错或者丢失呢?如果出现这种情况,则必须先恢复其中最后一个出错数据包组,依次类推,直到将所有的数据包组中的出错或者丢失都恢复。这在上文已作了详细说明,,图4(b)表示通过相关联的l个数据包组对两个数据包组中出错进行纠错的示意图。图中所示,假设在u1的后续n1-1数据包组中也有数据包丢失,如在第u2个数据包组中(u1<u2≤u1+n1-1)有n2个数据包丢失。因为u1数据包组的恢复必须要用到u2数据包组的信息,所以u1数据包组的恢复必须等到u2数据包组恢复成功之后进行。u1数据包组有数据包差错,而根据纠错包的生成算法,ui数据包组(u2≤ui≤u1+l-1)中的纠错包生成都和u1数据包组有关,这样ui数据包组(u2≤ui≤u1+l-1)中的纠错包都不能用于其它数据包纠错。仅仅序号(u1+l-1)之后的数据包组能用于u2数据包组的纠错。如果满足u1+l+n2-1≤u2+l-1,或者u1+n2≤u2...........................(7)则从序号(u1+l)到(u1+l-1+n2)的n2个数据包组可以联合用于u2数据包组的纠错,即所选的用于纠错的相关联数据包组不能有出错,否则,数据包的丢失不能被恢复。其它的后续数据包组中的出错也能用同样的方法恢复。
相比于传统的数据包恢复方法,在相近的编码效率和冗余度的情况下,本发明方法具有明显的优点。传统的数据包恢复方法在一个数据包组中的所能恢复的数据包的个数,受到该组中的纠错数据包的纠错能力的限制,如果出错超过纠错包的纠错能力时就没法恢复了。而本发明的方法中,当一个数据包组中的出错数据包超过该组中纠错包的纠错能力时,通过联合后续的纠错包,提供更大的纠错能力,相比于原有的方法,有更大的纠错能力。并且本发明能够有效恢复出错或者丢失的数据包,从而降低传输过程中的差错率。
虽然已经结合特定实施例对本发明加以描述,然而根据前面的描述,许多替代、修改与变更对于本领域的技术人员来说是显而易见的。因此,本发明将包括所有落在后附的权利要求的构思与范围之内的这种替代、修改与变更。
权利要求
1.一种冗余纠错包的生成方法,其特征在于,所述方法包括以下步骤由当前数据包组的全部数据包和前面至少一个数据包组的全部数据包或者部分数据包根据一定的编码方法计算得到冗余纠错包;将所述冗余纠错包添加到所述当前数据包组。
2.如权利要求1所述的方法,其特征在于,所述编码方法包括但不限于下述方法奇偶校验编码方法,及里德·索罗门编码方法。
3.如权利要求2所述的方法,其特征在于,假定时间上连续的k个数据包的集合作为一个数据包组,u为组序号(u≥0),Au,n(0≤n≤k-1)表示第u数据包组中的第n个数据包,当前数据包组和前面l-1个数据包组相关联,则根据奇偶校验编码方法产生当前数据包组中的纠错包Bu的公式如下Bu=Σj=u-l+1uBj,u---(1)]]>其中,Bj,u(u-l+1≤j≤u)定义为第j个数据包组中的数据包对于Bu的贡献;Bj,u通过对第j组的所有数据包Aj,n(0≤n≤k-1)进行偏移异或操作(XOR)得到,Bj,u=Im0s(k-1)×mAj,0+0s×mIm0s(k-2)×mAj,1+02s×mIm0s(k-3)×mAj,2+···+Ons×mIm0s(k-n-1)×mAj,n+···+0s(k-1)×mImAj,k-1.---(2)]]>其中,m表示数据包的长度,s表示偏移的比特位,Aj,n在公式(2)中为一个单列向量Aj,n,0Aj,n,1...Aj,n,m-1,]]>Aj,n,r(0≤r≤m-1)表示第j个数据包组中的第n个数据包的第r位;Im表示单位对角阵;0s(k-1)×m表示s(k-1)行m列的0矩阵,...,0s(k-n-1)×m表示s(k-n-1)行m列的0矩阵;0s×m表示s行m列的0矩阵,...,0ns×m表示ns行m列的0矩阵。
4.如权利要求3所述的方法,其特征在于,s=j mod(l),即j除以l的余数,j是指接收节点接收到的第j个数据包组。
5.如权利要求3所述的方法,其特征在于,所述数据包的长度可以变化,每个数据包组中的数据包个数也可以变化。
6.一种数据包恢复方法,其特征在于,包括步骤如果当前组数据包中出错或者丢失的数据包个数小于或者等于当前组冗余纠错包的纠错能力,则通过当前组冗余纠错包恢复出错或丢失的数据包;如果当前组数据包中的出错或者丢失的数据包个数大于当前组冗余纠错包的纠错能力,则联合当前组的纠错包和至少一个后续组的纠错包恢复出错或丢失的数据包。
7.如权利要求6所述的方法,其特征在于,在前面相关联的数据包组中没有数据包丢失、出错或者丢失、出错的数据包已经恢复的情况下,如果当前数据包组中有且仅有一个数据包出错,则通过当前组的纠错包恢复出错或者丢失的数据包假设第u个数据包组为当前数据包组,Bu为当前数据包组的纠错包,则根据相应的纠错包生成方法,当前数据包组前面l-1个数据包组对于Bu的贡献Bj,u(u-l+1≤j≤u-1)是已知的,将它们代入公式(1),得到当前组数据包对当前组纠错包的贡献Bu,u,Bu,u=Bu-Σj=u-l+1u-1Bj,u,---(3)]]>然后将Bu,u代入公式(2),得到Bu,u=Im0s(k-1)×mAu,0+0s×mIm0s(k-2)×mAu,1+02s×mIm0s(k-3)×mAu,2+···+0ns×mIm0s(k-n-1)×mAu,n+···+0s(k-1)×mImAu,k-1.---(4)]]>其中,m表示数据包的长度,k表示一个数据包组的数据包个数,u表示数据包组的组序号(u≥0),s表示偏移的比特位,Au,n(0≤n≤k-1)表示第u个数据包组中的第n个数据包;则任一个数据包Au,n(0≤n≤k-1)丢失或者出错都能从公式(4)中得到恢复。
8.如权利要求6所述的方法,其特征在于,如果当前数据包组n(2≤n≤l)个数据包出错,并且当前数据包组的纠错能力是一个数据包,则必须等待后续的数据包组的纠错包到达,联合多个纠错包提供至多l个数据包的恢复能力假设第u个数据包组为当前数据包组,当前数据包组中丢失的数据包是Cn0,Cn1,Cn2,…Cn(l-1),(0≤n0<n1<…<n(l-1)≤k-1),并且后面l-1个数据包组没有数据包丢失将当前数据包组的纠错包Bu,和当前数据包组相关联的前面l-1个数据包组对Bu的贡献Bj,u(u-l+1≤j≤u-1)代入公式(1),可以得到当前数据包组中的数据包对当前组的纠错包的贡献Bu,u,见公式(3),在后续的第u+1个数据包组到达后,将Bu+1,和Bj,u+1(u-l+2≤j≤u+2,j≠u)代入公式(1),可以得到Bu,u+1,Bu,u+1=Bu+1-Σj=u-l+2u+1Bj,u+1,j≠u,---(5)]]>同样,可以得到Bu,u+2,,,....,Bu,u+l-1,将上述这些值、已知的相关数据包值、和纠错包值代入到公式(2),化解后得到下式, Be0,Be1,Be2...Be(u+l-1)是已知的值,因此求解该方程组可以得到Cn0,Cn1,Cn2,…Cn(l-1),(0≤n0<n1<…<n(l-1)≤k-1);
9.如权利要求8所述的方法,其特征在于,还包括步骤如果当前数据包组中有n1(2≤n1≤l)个数据包出错,并且当前数据包组的纠错能力是一个数据包,则必须等待后续的n1个数据包组的纠错包到达,联合多个纠错包提供n1个数据包的恢复能力;如果后续的n1个数据包组有数据包出错或者丢失,则先恢复其中最后一个出错数据包组,依次类推。
全文摘要
本发明针对数据包传输过程中的出错和丢失现象,公开了一种数据包恢复的方法,能有效降低数据包传输过程中的差错。在发送节点,时间上连续的若干个数据包的集合称为一组数据包,在每组数据包的末尾添加一个或者多个用于纠错的冗余数据包,该纠错包是由当前数据包组的全部数据包和前面至少一个数据包组的全部数据包或部分数据包根据一定的编码方法计算得出,任何一个纠错包都和一个以上的数据包组相关联。相应的,在接收节点,能够联合多个数据包组中的纠错包对出错的数据包组进行纠错,因而与传统的数据包纠错方法相比,本发明方法提供了更强大的纠错能力。
文档编号H04L12/56GK1622504SQ20031010887
公开日2005年6月1日 申请日期2003年11月26日 优先权日2003年11月26日
发明者沈钢, 刘儿兀, 桂洛宁 申请人:上海贝尔阿尔卡特股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1