基于网络编码的数据重传方法

文档序号:7994352阅读:616来源:国知局
专利名称:基于网络编码的数据重传方法
技术领域
本发明涉及无线通信领域,特别是涉及一种提高数据重传效率的方法。
技术背景
由于无线链路的高比特出错率以及干扰的因素,因而无线通信与传统的有线通信相比有较为严重的丢包率。为了提高传输的可靠性,目前已有的解决方案包括自动重传请求(Automatic Repeat Request,简称 ARQ)禾口前向纠错(Forward Error Correction,简称FEC)。将ARQ和FEC技术结合使用,就是混合自动重传请求(Hybrid AutomaticRetransmission-reQuest,简称 HARQ)。在 ARQ 和 HARQ 技术下,接收节点反馈原始数据包的接收情况,源节点根据反馈信息重传丢失的数据包,直到成功发送数据包或达到最大重传次数。但是在无线通信中,由于接收节点数量较多、数据包丢失较分散、重传数据包可能再次丢失等因素,传统重传技术需要数量很大的传输次数,因此对无线信道的占用率很高,从而降低了信道有效利用率。
针对上述问题,出现了一种将网络编码(Network Coding,简称为NC)与ARQ相结合的重传技术,即网络编码。在网络编码技术下,源节点把对应于不同目标节点的多个数据包编码成一个编码数据包,然后通过一次传输发送该编码数据包。目标节点通过之前接收到的原始数据包来解码该编码数据包得到所需要的原始数据包。相比传统重传技术,使用网络编码技术可以增加单位时间内传输的信息量,从而减少重传数据包的数量和无线信道的占用率。
实际应用中,源节点需要根据一定的调度策略决定先重传哪些数据包。调度策略的好坏与系统的性能有很大的关系,只有通过合理调度,才能充分发挥网络编码在提高无线信道利用率上的优势。由于无线链路的不可靠性以及广播传输特性,数据包在重传过程中不仅可能再次丢失,而且各个节点对该数据包的接收情况也可能发生改变。这样就导致了网络中的编码机会随着数据的传输在不断变化着。但是,现有网络编码的调度方法仅是从重传队列中依次取出数据包进行重传,并没有考虑通过寻找这种变化的规律来充分的挖掘网络中的编码机会,从而影响了网络编码算法的效率。
另外,在现有网络编码方法中,由于接收节点不对解码失败的编码数据包进行反馈,因此源节点需要保证每个编码数据包中最多只能含有某个接收节点丢失的一个原始数据包(当包含有该一个接收节点丢失的2个或2个以上丢失的原始数据包时,接收节点无法解码)。这样不仅减少了网络中的编码机会,而且可能无法选择出最佳的编码组合方式, 从而大大降低了网络编码算法的效率。发明内容
本发明为解决上述技术问题所采用的技术方案是,提供一种网络编码效率更高的基于网络编码的数据重传方法。
基于网络编码的数据重传方法,包括以下步骤
统计步骤源节点发送数据包之后,接收并统计接收节点反馈回的各数据包的接收情况,进入判断步骤;所述数据包为原始数据包或编码数据包;判断步骤源节点判断是否有需要重传的数据包,如是,则进入编码步骤;如否, 则结束重传;编码步骤源节点按编码规则优先对接收情况最差的数据包进行网络编码,得到本次重传的最新的编码数据包,进入发送步骤;发送步骤源节点向所有接收节点广播本次需要重传的数据包,返回统计步骤。本发明优先使用当前接收情况最差的数据包进行网络编码,可增加编码增益,当编码增益越大,重传次数就会越小。并且,本发明根据每一次的接收情况反馈信息来体现网络中编码机会变化,再根据网络中编码机会变化规律,动态地对重传数据进行调度,能有效地提高网络编码效率。具体的,源节点接收并统计接收节点反馈回的数据包的接收情况的具体方法是源节点为每个已发送的数据包建立接收向量;所述接收向量中每一个元素对应一个接收节点对该数据包的接收情况;所述接收情况包括接收成功、接收失败、待确认;源节点每接收到一个接收节点反馈的接收情况之后,更新数据包对应的接收向量;当源节点未收到接收节点对数据包的反馈信息,则保持该数据包的接收向量中对应该接收节点的元素为现有状态;具体的,源节点优先对接收情况最差的数据包进行网络编码的具体方法是源节点统计需要重传的数据包对应的接收向量中接收成功元素和接收失败元素的个数,根据接收成功元素和接收失败元素的个数将数据包放入对应的优先级重传队列中;数据包对应的接收向量中接收失败元素的个数越多对应放入的优先级重传对列的优先级越高;源节点按编码规则,以优先级从高到低的顺序,从优先级重传队列中依次取出数据包进行编码。本发明可遵循现有的网络编码规则,即编码数据包中最多只能含有各接收节点丢失的一个原始数据包。优选的,本发明为了更进一步地提高网络编码效率,在按优先级重传的基础上,改进了编码规则。改进后的编码规则为编码数据包中每个原始数据包都至少能恢复一个接收节点丢失的原始数据包。为了适应改进的编码规则,接收节点反馈数据包的接收情况的具体方法是当接收节点能通过接收到的数据包恢复自己丢失的原始数据包,则向源节点反馈该解码恢复出的原始数据包接收成功;当接收节点不能解码接收到的编码数据包,则向源节点返回编码数据包接收成功;当接收节点不能从接收到的编码数据包中恢复自己丢失的原始数据包,则不向源节点反馈任何接收信息;当接收节点未接收到数据包,则该接收节点向源节点反馈该数据包接收失败。源节点执行的判断步骤具体为源节点分别统计各数据包对应的接收向量中接收成功元素和接收失败元素的个数,如有接收向量所有元素都是接收成功元素,则丢弃该收向量对应的数据包;如所有接收向量中所有元素都是接收成功元素,则结束重传;
如有原始数据包对应的接收向量中至少有一个接收失败元素,则需要对该原始数据包进行重传;
如源节点判断当编码数据包中至少包含有一个原始数据包不能恢复任何一个接收节点丢失的原始数据包,则丢弃该编码数据包;如源节点判断当编码数据包中包含的每个原始数据包都至少能恢复一个接收节点丢失的原始数据包,则该编码数据包需要重传, 并暂停将该编码数据包中包含的所有原始数据包作为需要重传的原始数据包放入优先级队列中;所述编码数据包中包含的原始数据包是组成该编码数据包的原始数据包。
本发明的有益效果是,最大限度的挖掘网络中的编码机会,提高网络编码算法的效率,从而减少重传次数,减少无线信道的占用率。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面参考附图并结合实施例对本发明作进一步详细描述。
本实施例采用2元域上的加法运算来生成和解析编码数据包,操作简单,对系统软硬件没有任何特殊要求。需要注意的是,参与编码运算的数据包数目可以为η个,η为不小于2的自然数。因此根据高斯定理,接收节点当且仅当已知其中的η-1个数据包,才可以根据所述线性变换从η个数据包形成的编码数据包中解出自己丢失的数据包,得到全部的 η个数据包。如果接收节点已知的数据包数目为m个,(m< η-1),那么接收节点至少需要再接收(n-1-m)个数据包才能解出所有的η个数据包。
源节点的传输过程分为两个阶段原始数据发送阶段和数据重传阶段。
在原始数据发送阶段,源节点依次发送K个原始数据包。由于无线信道的不可靠性,某些原始数据包不能正确到达某些接收节点。因此,源节点在数据重传阶段对丢失的原始数据包进行重传。
为了清楚地说明本发明重传方法的实现过程,首先引入如下符号
R1, 1 = 1,2,... ,N =N为接收节点总个数,R1表示第1个接收节点;
Pi, i = 1,2, ... , K :K表示源节点生成的原始数据包的总个数,Pi表示源节点生成的第i个原始数据包;
Pen 编码数据包;
V(P)数据包P所对应的接收向量,其维数为N;
M⑵V(P)中“1”元素的个数,即成功接收到P的接收节点的个数;
S(P) =V(P)中“-1”元素的个数,即没有成功接收到P的接收节点的个数;
C(P)数据包P中包含的原始数据包的集合;
D(P)能通过解码数据包P得到自己丢包的接收节点的集合。
如果P为原始数据包,则C(P) = {P},D(P) = (R1 =R1没有成功接收到P}。其中 “,,表示集合D (P)的元素札都满足条件“札没有成功接收到P”。
实施例1
本实施的改进基于现有网络编码规则的网络编码重传
图2是本发明提出的数据重传方法实施例的流程图,重传方法包括以下步骤步骤201、源节点发送数据包P之后,为每个没有接收向量的数据包建立接收向量 (这里的数据包P即可以是原始数据包Pi (i = 1,2,...,K),也可以是当前发送的编码数据包PJ ο

图1是本发明提出的数据包P的接收向量示意图。接收向量中包括N个元素,每一个元素对应一个接收节点的接收情况。当接收向量的第1(1 = 1,2,...,N)个元素为1, 则表示接收节点&成功接收到了 P ;或者,如果第1个元素为-1,则表示札丢失了 P ;或者, 如果第1个元素为0,则表示待确认,Ii1没有反馈对P的接收情况信息。接收向量中每个元素的初始值为0。步骤202、接收节点接收数据包P,当接收的数据P为编码数据包Pen时,还需要对编码数据包进行解码。接收节点向源节点反馈数据包的接收情况为接收成功或接收失败。 接收节点每收到一个编码数据包,就通过解码算法,尝试从该编码数据包中恢复自己丢失的原始数据包,如果接收节点无法从该编码数据包中恢复自己丢失的原始数据包,则直接丢弃该编码数据包(按现有的编码规则,该数据包对该接收节点无用,该接收节点不是此次数据传输的目标节点),不向源节点反馈接收情况。这里把数据包P看成由2元域上元素排列而成的向量,然后对其使用2元域上的加法运算来生成新的向量,即使用模2和(异或运算)来生成编码数据包Pm。因此,接收节点也同样使用模2和运算来对接收的编码数据包Pm进行解码。步骤203、源节点接收节点反馈的接收情况更新各接收向量,判断是否需要进行重传,如是,再根据各接收向量将需要恢复的数据包分配到不同优先级的重传队列中,再进入步骤204 ;如否,结束重传步骤。源节点使用接收向量来存放所有接收节点的接收情况信息,因此每接收到来自某个接收节点的反馈信息,就需要对所述接收向量进行更新;所述更新接收向量的步骤包括在接收到来自接收节点R1的接收情况信息时,将其中记录为成功接收的原始数据包所对应的接收向量的第1个元素置1,并将其中记录为没有成功接收的原始数据包所对应的接收向量的第1个元素置为-1。源节点统计各原始数据包中接收成功元素(“1”元素)的个数M(P)和接收失败元素(“-1”元素)的个数S(p),如有接收向量的接收成功元素的个数M(P)为N,则丢弃该收向量对应的数据包;如所有接收向量的接收成功元素个数为N,则结束重传;如有原始数据包对应的接收向量中至少有一个接收失败元素,则需要对该原始数据包进行重传。本实施例将重传队列设置为N个优先级,即优先级级别B (1) 优先级级别B (N), N为接收节点总个数。源节点统计需要重传的原始数据包中接收失败元素的个数S (P),根据接收失败元素的个数S(P)将数据包放入对应的优先级重传队列B[S(P)]中;原始数据包对应的接收向量中接收失败元素的个数越多对应放入的优先级重传对列的优先级越高。本发明根据每一次的接收情况反馈来体现网络中编码机会变化,再根据网络中编码机会变化规律,合理地对重传数据进行调度。即通过对各数据包对应的接收向量中各元素的统计,将接收情况差的数据包输入较高优先级的重传队列中。步骤204、源节点根据本发明规定编码规则提取出优先级重传队列中的数据包并进行网络编码生成编码数据包Pm,再将该编码数据包Pm广播给所有接收节点,之后,返回步骤201。
源节点按照优先级从高到低的顺序,从优先级重传队列中依次取出一个原始数据包,将该原始数据包与预设数据包进行网络编码,判断编码结果是否满足编码规则;预设数据包的初始值为全零。
如满足,则以当前的编码结果作为新的预设数据包,再判断是否所有优先级重传队列中的原始数据包已被检查,如是,将当前的预设数据包作为本次重传的最新的编码数据包,本次编码结束,如否,则返回本步骤;
如不满足,判断是否所有优先级重传队列中的原始数据包已被检查,如是,将当前的预设数据包作为本次需要重传的数据包,本次编码结束,如否,则返回本步骤;
本实施例的网络编码过程保证了接收情况较差的原始数据包得到了较早的传输机会。先传输接收情况差的原始数据包,即先重传被较少节点接收到的原始数据包,能够最大限度地挖掘网络中的编码机会,从而减少重传次数,节省系统资源。
如图3所示的一种一对多的无线传输示意图。源节点通过无线链路向N = 3个接收节点R1, R2和R3发送了 3个原始数据包P1, P2和P3。接收节点队丢失了原始数据包P1, 接收节点&丢失了原始数据包I32和P3,接收节点民丢失了原始数据包P3。&和民都没有正确接收到了 P3。按照现有的NC-ARQ方法,源节点从重传队列中顺次取出,对P1* P2进行模2和运算得到编码数据包Pm为P1 P2。⑴如接收节点R1, R2和R3均成功接收到 Ρεη,可恢复2个原始数据包,下一次重传仅传送P3即可;(2)如只有R3正确接收到了该编码数据包Ρεη,则源节点依然需要重传?: !^,再次重传也最多恢复2个原始数据包;(3)如R1 和&中一个或者两个正确接收到了该编码数据包,则网络中需要重传的原始数据包最多只有2个(P1和P3、或者P2和P3,或者P3),再次重传最多可恢复2个或1个原始数据包。能够看出,从重传队列中顺次取出数据包进行网络编码带来的编码增益最多只有2,即一次传输最多只能恢复2个原始数据包。
以图3为例来进行重传
1、源节点通过无线链路向N = 3个接收节点R1A2和R3发送了 3个原始数据包P1, P2 和 P3。
源节点本地建立数据包的接收向量如下
V(P4) =

V(P5) =

V(P6) =

2、各接收节点向源节点返回各自的接收情况=R1丢失了原始数据包P1,接收节点 &丢失了原始数据包P2、P3,接收节点R3丢失了原始数据包Ρ3。
3、源节点根据反馈回的接收情况更新接收向量如下
V(P1)=[-1,1,1];
V(P2)=[1,--1,1];
V(P3)=[1,--1,-1]
4、由于有原始数据包未被成功接收,需要进行重传;第一次重传过程如下
401、利用各接收向量得到S(P1) = 1,S(P2) = 1,S(P3) = 2,设置源节点当前的优先级重传队列为B [3]:无;B[2] =P3 ;B[l] =P1^P2 ;402、源节点开始进行网络编码设置Pen为全零向量,D(Pen) = Φ ;由于Β[3]无原始数据包,从Β[2]中取出第1个原始数据包Pt = P3,Pe :P3 = :P3,由于D(P3) η D(Pen)= Φ,所以满足编码数据包Pe,Ij3中最多只能含有各接收节点丢失的一个原始数据包,则更新 Pen = P3, D (Pen) = {Ρ2、Ρ3};403、从B [1]中取出第1个原始数据包Pt = P1,判断PeP1满足编码规则,PeP1 只含有R1丢失的数据包P1,只含有&丢失的数据包P3,只含有民丢失的数据包P3,则更新 Pe =P3 Pi;405、从B[1]中取出第2个原始数据包Pt = P2,判断:P3 P1 K不满足编码规贝U, 且已检查完优先级队列中的所有原始数据包;5、源节点将^ P1作为第一次重传编码数据包Pml 当源节点优先重传包括接收情况最差的P3W编码数据包,本实施例使用为编码数据包Pen,(1)如接收节点R1, R2和R3均成功接收到Pen,R1可恢复出P1, R2可恢复出P3,R3可恢复出P3,(Pen可恢复2个原始数据包)下一次重传仅传送P2即可;(2)如只有 &正确接收到了该编码数据包Pm,下一次重传可以将P1^hffiIj3作为新编码数据包,这样再次重传就能够恢复3个原始数据包。能够看出,优先使用接收情况最差的P3进行网络编码带来的编码增益最多为3。当编码增益越大,重传次数就会越小。6、源节点将:P3 ^P1作为第一次重传编码数据包Pml,重传Pml之后,根据反馈回的接收情况(只有&正确接收到了该编码数据包PJ更新接收向量如下V(P1) = [-1,1,1];V(P2) = [1, -1,1];V(P3) = [1,1, -1];7、由于有原始数据包未被成功接收,需要再次进行重传,并根据与上述编码判断过程类似的判断之后,确定第二次重传的编码数据包为Ij3 Ij2 P1。8、如接收节点R1A2和R3均成功接收,则三个节点均完成各自的数据恢复,重传过程结束。实施例2如图2所示,重传方法包括以下步骤步骤201、源节点发送数据包P之后,为每个没有接收向量的数据包建立接收向量 (这里的数据包P即可以是原始数据包Pi (i = 1,2,...,K),也可以是当前发送的编码数据包PJ ο步骤202、接收节点接收数据包P,当接收的数据P为编码数据包Pen时,还需要对编码数据包进行解码;接收节点每收到一个编码数据包,就通过解码算法,尝试通过该编码数据包恢复自己丢失的原始数据包。如果接收节点不能从该编码数据包中恢复自己丢失的原始数据包,则不向源节点反馈任何信息;如果接收节点不能对该编码数据包进行解码,则将其存储在缓存中。此时,其发送的反馈信息包中还包括对该编码数据包的接收情况信息;如果接收节点能从该编码数据包中恢复自己丢失的原始数据包,则其发送的反馈信息包中只包括对解码出得数据包的接收情况信息,而不包括对该编码数据包的接收情况信息。
可选的,每当接收节点收到数据包之后,即向源节点反馈接收情况。优选的,为了降低反馈信息带来的开销,可采用异步反馈的方式,即接收节点每收到M个数据包时,就发送一个反馈信息包,向源节点报告该接收节点当前的接收情况。这样能够大大减少对无线信道的占用,提高能量和带宽利用率。门限值M可由每个接收节点根据信道质量等因素自行设定,每个接收节点对应的门限值M可以不同。
接收节点的异步反馈方式可以通过以下子步骤来实现
初始化子步骤Al 预置接收变量η = 0,以及门限值M ;
接收子步骤Α2:当接收到一个数据包时,如果该数据包是未曾收到过的数据包, 则令η = η+1 ;
检测子步骤A3 判断是否满足η <Μ,则是,则返回接收子步骤Α2,否则,令η = 0, 并执行反馈子步骤Α4;
反馈子步骤Α4:根据收到的所有数据包,找到未成功接收的数据包信息,并将成功接收到的和未成功接收到的数据包信息以反馈报告的形式反馈到发送节点。
步骤203、源节点接收节点反馈的接收情况更新各接收向量,判断是否需要进行重传,如是,再根据各接收向量将需要恢复的数据分配到不同优先级的重传队列中,再进入步骤204;如否,结束重传步骤。
源节点使用接收向量来存放所有接收节点的接收情况信息,因此每接收到来自某个接收节点的反馈信息,就需要对所述接收向量进行更新;
所述更新接收向量的步骤包括
在接收到来自接收节点R1的接收情况信息时,将其中记录为成功接收的数据包对应的接收向量的第1个元素置1,并将其中记录为没有成功接收的数据包对应的接收向量的第1个元素置为-1。
在掌握各接收节点的接收情况后,源节点的下一步工作是判断哪些数据包需要再次重传
对于原始数据包Pi,只要该数据包没有被所有接收节点正确接收到,源节点就需要再次重传该原始数据包。
本实施例对编码数据包进行是否需要重传的判断原则是只有当某个编码数据包被非目标节点接收时,源节点才有可能需要对该编码数据包进行重传。所以,也只有当接收节点不能对接收的编码数据包进行解码时,才需要向源节点反馈对该编码数据包的接收情况信息。所述目标节点是能够从当前接收到的数据包中恢复自己丢包的接收节点。
为满足上述原则,实施例对编码数据包进行是否需要重传的判断可以通过以下子步骤实现
判断子步骤Bl 判断是否有非目标节点成功接收到该编码数据包,如果是,则执行判断子步骤Β2 ;否则,执行丢弃子步骤Β4 ;
判断子步骤Β2 判断是否该编码数据包中包含的每个原始数据包都至少能恢复一个接收节点丢失的原始数据包,如是,执行存储步骤Β3 ;如否,则执行丢弃步骤Β4 ;
存储子步骤Β3 将该编码数据包放入队列TrsQueue中,将该编码数据包中包含的所有原始数据包放入队列PenQueue中;
丢弃子步骤B4:丢弃该编码数据包,将该编码数据包中包含的所有原始数据包放入队列TrsQueue中。
本实施例将重传队列设置为N个优先级,即优先级级别B (1) 优先级级别B (N), N为接收节点总个数。
根据各数据包对应的接收向量将需要恢复的数据包分离到多个优先级队列具体可以通过以下子步骤实现
判断子步骤Cl 如果某数据包P是队列TrsQueue中的元素,并且该数据包的接收向量V(P)中没有0元素,则进入步骤C2 ;否则,保持数据包P当前状态;
统计子步骤C2 根据数据包P所对应的接收向量,统计其中接收失败元素(“_1” 元素)的个数S(P),当S(P) =0,则表示该数据包P已被所有接收节点成功接收,丢弃P; S(P) Φ 0,则表示数据包P需要进行重传,进入步骤C3 ;
分离子步骤C3 根据S(P)的值,将数据包P依次划分到相应的优先级重传队列 B[S(P)]中。
步骤204、源节点根据本发明规定编码规则提取出优先级重传队列中的数据包并进行网络编码生成编码数据包Pm,再将该编码数据包Pm广播给所有接收节点,之后,返回步骤201。
源节点首先取出最高优先级队列中的第一个数据包;然后在当前最高优先级队列中选择可以进行编码组合的数据包;如果已搜索完所述优先级队列中所有数据包,则在下一优先级队列中根据网络编码规则选择需要组合的数据包;或者,如果已查找完所有优先级重传队列,则对所述需要组合的数据包进行逐位异或运算,得到编码数据包;最后,源节点将生成的编码数据包广播给接收节点。
本发明的网络编码过程保证了接收情况较差的数据包得到了较早的传输机会。先传输接收情况差的数据包,即先重传被较少节点接收到的数据包,能够最大限度地挖掘网络中的编码机会,从而减少重传次数,节省系统资源。
为了提高网络编码的效率,本实施例的编码方案遵循如下原则,即源节点不保证其生成的编码数据包Pm能被网络中所有的接收节点成功解码,而只是保证Pm满足如下条件所述生成的编码数据包中包含的每个原始数据包都至少能恢复一个接收节点丢失的原始数据包,即
V P, e C(Pen),D(P1) η D(Pen)乒(K(1)
其中,VP, eC(Pen)表示Pi为是集合C(Pm)中的任意一个元素。
如图4所示,源节点通过无线链路向N = 3个接收节点R1, R2和R3发送了 3个原始数据包p4,P5和p6。接收节点队丢失了原始数据包P4,接收节点&丢失了原始数据包P5, 接收节点R3丢失了原始数据包P4,P5和P6。如按照现有的NC-ARQ方法,由于接收节点对不能解码的数据包会直接进行丢弃,所以源节点需要保证编码数据包最多只能含有某个接收节点丢失的一个原始数据包(当包含有该接收节点2个或2个以上丢失的原始数据包时, 该接收节点无法解码,只能丢弃该编码数据包),因此在如图4所示的情况下,源节点第一次重传时只能传送一个原始数据包。按照本发明的编码策略,在如图4所示的情况下,源节点首先对接收情况最差的数据包P4和P5作模2和运算,生成编码数据包P4 P5 (第一次重传时,将= :P4 P5 :P6不符合编码策略,因为在这种编码组合下,P6 e C(Pen),MD(P6)= {R3},D(PJ = (R1, R2I, D (P6) Π D(Pen) = Φ),然后广播给接收节点。本发明的接收节点R3 虽然不能解码该编码数据包,但是当民正确接收到该编码数据包,如果民在本地存储该数据包并向源节点反馈了这一接收信息,则源节点就可以在下次重传中把P4,P5和P6编码在一起,生成新的编码数据包P4^P5 否则,源节点只能再次重传Ρ4 Ρ5。
图5是本发明提出的基于优先级队列进行网络编码的流程图,具体包括
步骤501、初始化重传队列的最高优先级g为接收节点总个数N,变量t = 1,并设置预设数据包Pm为全零向量,D (PJ = {R1:l = 1,...,N},之后进入步骤502;
步骤502、判断g是否等于0,如果是,则执行步骤511 ;否则,执行步骤503 ;
步骤503、判断优先级队列B(g)是否有数据包存在,如果是,则执行步骤505 ;否则,执行步骤504;
步骤504、设置 g = g-Ι ;
步骤505、取出优先级队列B(g)中的第t个数据包Pt(Pt可以是原始数据包也可以是编码数据包);
步骤506、判断Pt是否能与Pen编码在一起,即判断编码数据包1^ 朽是否满足条件(1) :VP; eCiVen Pf),D(P1) ηD(Pe Pf) Φ 6其中 Pi 是集合C(Pe Pf)中的任意一个元素,如果是,则执行步骤507,否则,执行步骤508 ;当Pen为全零时,PePf = Pf,集合 C(Pe Pf)={Pf}, |C(P) I = 1,符号I · I表示集合的势,即为集合中元素的个数;
步骡507、对Pt和Pen作逐位异或运算,生成编码数据包Pe = Pen Pt;
步骤508、判断是否已经查找完优先级队列B (g)中的所有数据包,即判断等式t = |B(g) I是否成立,如果是,则执行步骤510 ;否则,执行步骤509 ;
步骤509、设置t = t+Ι,返回步骤505 ;
判断是否已经查找完优先级队列B(g)中的所有数据包,即判断等式t = |B(g) 是否成立,如果是,则执行步骤510 ;否则,执行步骤505 ;
步骤510、重置t = 1,返回步骤504 ;
步骤511、判断是否需要重传Pm,即判断Pm是否为全零向量,如果是,则执行步骤 512;否则,执行步骤513;
步骤512、Pen为全零向量表明网络中已经没有需要重传的数据包,则源节点结束重传阶段;当然,也可不进行步骤511的判断,因为在编码步骤之前的步骤203中就能对是否重传完毕做出判断。
步骤513、重传 Pen。
在实际应用中,如果Pm是编码数据包,则在重传Pm前,还需要为其加上编码数据包头(coding header)。图6是本发明提出的编码数据包头的格式。编码数据包头的CodeNum域用来表示该数据包是否为编码数据包以及包含多少个原始数据包。如果 CodeNum = 1,表示非编码数据包;如果CodeNum > 1,表示该包是编码数据包,并且里面包含CodeNum个原始数据包;CodeSeq域用来记录Pen的ID,即Pen是源节点在本次重传阶段中传输的第CodeSeq个编码数据包;CodePkt域用来记录Pen包含的所有原始数据包的ID。 接收节点通过提取编码数据包的编码数据包头来解码该编码数据包。
本实施例采用优先级重传队列来存放所有需要重传的数据包,并在生成编码数据包时遵循如下原则,(1)先重传具有较高优先级的数据包;(2)参与编码运算的不仅有原始数据包,还包括编码数据包;C3)不需要保证生成的编码数据包Pm能被网络中所有的接收节点成功解码,但需要保证Pen满足条件VP; eC(Pe ),D(Pi) Π D(Pen) Φ Φ。这样,本实施例能够最大限度的挖掘网络中的编码机会,提高网络编码算法的效率,从而减少重传次数无线信道的占用率。
以下用图4为例,来完整地描述应用本实施例方法实现的数据包传输过程
1、源节点通过无线链路向N = 3个接收节点R1A2和R3发送了 3个原始数据包P4, P5 和 P6。
源节点本地建立数据包的接收向量如下
V(P4) =

V(P5) =

V(P6) =

2、各接收节点向源节点返回各自的接收情况=R1丢失了原始数据包P4,接收节点 R2丢失了原始数据包P5,接收节点民丢失了原始数据包P4,P5和Ρ6。
3、源节点根据反馈回的接收情况更新接收向量如下
V(P4) = [-1,1, -1];
V(P5) = [1,-1,-1];
V(P6) = [1,1, -1];
4、由于有原始数据包未被成功接收,需要进行重传;第一次重传过程如下
401、利用各接收向量得到S(P4) = 2,S(P5) = 2,S(P6) = 1,设置源节点当前的优先级重传队列为
B [3]:无;
Β[2]:Ρ4、Ρ5;
B[l] =P6 ;
TrsQueue : ;
PenQueue 无;
402、源节点开始进行网络编码初始化t = l,g = N = 3,设置Pen为全零向量;由于B[3]无数据包,更新t = l,g = g-1 = 2,此时,IB[2] I为2,从B[2]中取出第1个数据包 Pt = P4,由于 D (P4) = (R1,R3I,Pen P4 = P4,D(PeP4) Π D(P4) Φ φ,判断PePf满足编码规则,则更新= Pen P4 = P4;
403、由于t乒B[2] I,更新t = t+1 = 2,从B[2]中取出第2个数据包Pt =P5,由于 D (P4) = (R1, R3I, D(P5) = (R2, R3I, PeP5 = P4 P5, D(Pen P5) = (Ri, R2), D(Pe P5)nD(P4)={Ri}^P5)ηD(P5) =(R2) Φ 0,判断Pe Pf满足编码规贝1J, 则更新 = P4^P5;
404、由于 t=旧[2]|,更新1= l,g = g-1 = 1,此时,B[l]为 1,从 B[l]中取出第 1 个数据包 Pt = P6,由于 D(P6) = {R3}, Ven P6 = P4 P5 P6,D(Pe P6) = (Ri, R2), D(PeP6) HD(P6) = φ,判断 :P6不满足编码规则;
405、由于t = |B[1] | = 1,更新t = l,g = g-1 = 0,无其它数据包可以参与编码,则重传符合编码规则的编码数据包= P4 P5;
5、源节点将P4^P5作为第一次重传编码数据包Penl,重传Penl之后,为当前发送的编码数据包Pml建立接收向量
源节点本地建立数据包的接收向量如下
V(P4) = [-1,1, -1];
V(P5) = [1, -1, -1];
V(P6) = [1,1, -1];
V(Pe i = P4 P5) =
;
6、各接收节点向源节点返回各自的接收情况接收节点礼、&未接收到编码数据包Pml,向源节点反馈未成功接收的情况,接收节点R3成功接收了编码数据包Pml,但无法解码,将其存储在本地,接收节点民向源节点返回未成功接收到编码数据包Pml,接收节点队、 R2均向源节点返回未成功接收到编码数据包Pml的信息。
7、源节点根据反馈回的接收情况更新接收向量如下
V(P4) = [-1,1, -1];
V(P5) = [1, -1, -1];
V(P6) = [1,1, -1];
V(Pe i = P4 P5) [-1,-1,1];
8、由于有原始数据包未被成功接收,需要再次进行重传;并且,由于有非目标节点成功接收到该编码数据包,且D(Penl) = (R1,RJ,D(Pen) HD(P4) = {RJ Φ Φ,D(Pen) HD(P5) ={RJ Φ Φ,即编码数据包Pml中包含的每个原始数据包都至少能恢复一个接收节点丢失的原始数据包,判断出编码数据包Penl需要重传,将编码数据包Penl放入队列TrsQueue中, 并将P4和P5放入队列PenQueue中。
第二次重传过程如下
801、利用各接收向量得到 S(P4) = 2,S(P5) = 2,S(P6) = 1,S(Penl) = 2,对于队列TrsQueue中编码数据包Penl,由于V(Penl)中没有0元素,根据S(Penl)的值,将编码数据包Penl从队列TrsQueue中取出放入优先级重传队列B [2]中;
源节点当前的优先级重传队列为
Β[3]:无;
B [2] =Penl ;
B[l] =P6 ;
TrsQueue : ;
PenQueue :P4、P5 ;
802、源节点开始进行网络编码初始化t = Lg = N = 3,设置Pen为全零向量;由于B[3]无数据包,更新t = l,g = g-1 = 2,此时,IB[2] I为1,从B[2]中取出第1个数据包Pi = Pe i =P4 P5,由于 D (Penl) = (R1, RJ , PeP enl = P enl,D(PeP enl) Π D(Peni) φ 0,判断Pen Pi满足编码规则,则更新Pe = Pe i Ven = P4 P5;
803、由于 t = B[2] | = 1,更新 t = 1,g = g_l = 1,此时,|B[1] | 为 1, 从 B[l]中取出第 1 个数据包 Pt = P6,D(Pe P6) = D(P4 P5 P6) = {Ri, R2, R3},D(Pe P6)nD(P4)={Ri}^ φ,D(Pe P6)ΠD(P5) = (R2) ^ φ,D(PeP6) ηD(P6) = {R3} φ Φ,判断Pe:P6满足编码规则,则更新Pe = P4 P5 P6;
804、由于t = |B[1] |,更新t = l,g = g_l = 0,无其它数据包可以参与编码,则重传符合编码规则的编码数据包= P4 P5 P6;
9、源节点将P4 Θ P5 Θ :p6作为第2次重传编码数据包Pen2,重传Pen2之后,为更新的当前发送的编码数据包接收向量为编码数据包Pm2的接收向量
源节点本地建立数据包的接收向量如下
V(P4) = [-1,1, -1];
V(P5) = [1, -1, -1];
V(P6) = [1,1, -1];
V(Pen2) =

10、各接收节点向源节点返回各自的接收情况接收节点R1未接收到编码数据包 Pm2,向源节点返回未成功接收编码数据包Pm2的信息;接收节点&接收到编码数据包Pm2, 并能解码出丢失的原始数据包P5,不向源节点返回成功接收编码数据包Pm2的信息,仅返回成功接收原始数据包P5的信息;接收节点R3成功接收了编码数据包Pm2,并能解码出丢失的原始数据包P6,返回成功接收原始数据包P6的信息。
11、源节点根据反馈回的接收情况更新接收向量如下
V(P4) = [-1,1, -1];
V(P5) = [1,1, -1];
V(P6) = [1,1,1];
V(Pen2) = [-1,1,1];
12、由于有原始数据包P4、P5未被成功接收,需要再次进行重传;没有非目标节点成功接收到编码数据包Pm2,丢弃该编码数据包,将组成该编码数据包的所有原始数据包 P4、P5、P6放入队歹丨J TrsQueue中;
第三次重传过程如下
1201、利用各接收向量得到 S(P4) = 2,S(P5) = 1,S(P6) = 0,将队列 TrsQueue 中的数据包取出,按照S(P)值放入相应的B[S(P)]优先级重传队列中,由于S(P6) =0,则表示该数据包P6已被所有接收节点成功接收,丢弃P6 ;
源节点当前的优先级重传队列为
B [3]:无;
B[2] =P4 ;
B[l] =P5 ;
TrsQueue 无;
PenQueue 无;
1202、源节点开始进行网络编码初始化t = Lg = N = 3,设置Pen为全零向量; 由于B[3]无数据包,更新t = l,g = g-1 = 2,此时,IB[2] I为1,从B[2]中取出第1个数据包 Pt 为 P4,由于 D(P4) = (R1, R3I, Pen P4 = P4,D(PeP4) ΠD(P4) φ ^,判断Pen Pi满足编码规则,则更新Pen = P4;
1203、由于 t = |B[2] |,更新 t = 1,g = g_l = 1,此时,B[l] | 为 1,从 B[l] 中取出第 1 个数据包 Pt = P5,由于 D(P4) = (R1, R3I, D(P5) = {R3},PeP5 = P4 P5, D(PeP5) = {Ri},D(PeP5) η D(P5) = 0,判断PePf不满足编码规则;
1204、由于t = |B[1] |,更新t = 1,g = g_l = 0,无其它数据包可以参与编码,则重传符合编码规则的编码数据包Pm = P4 ;
13、由于源节点已为P4建立了接收向量,所以在重传P4后,源节点不再为P4重新建立接收向量
14、各接收节点向源节点返回各自的接收情况接收节点队接收到原始数据包P4, 从而能恢复丢失的原始数据包P4,接收节点R1向源节点返回成功接收原始数据包P4的信息;接收节点R3成功接收了原始数据包P4,从而能恢复解码出丢失的原始数据包P4,并且还能通过解码编码数据包Pm= P4 P5恢复出P5,返回成功接收原始数据包P4和P5的信息。
15、源节点根据反馈回的接收情况更新接收向量如下
V(P4) = [1,1,1];
V(P5) = [1,1,1];
V(P6) = [1,1,1];
16、由于没有原始数据包未被成功接收,无需再次进行重传,重传结束。
需要说明的是,实施例中的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,本发明的实施例并非用于限定本发明的保护范围,对于本领域的技术人员来说,具体的实施方式可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.基于网络编码的数据重传方法,其特征在于,包括以下步骤统计步骤源节点发送数据包之后,接收并统计接收节点反馈回的各数据包的接收情况,进入判断步骤;所述数据包为原始数据包或编码数据包;判断步骤源节点判断是否有需要重传的数据包,如是,则进入编码步骤;如否,则结束重传;编码步骤源节点按编码规则优先对接收情况最差的数据包进行网络编码,得到本次需要重传的数据包,进入发送步骤;发送步骤源节点向所有接收节点广播本次需要重传的数据包,返回统计步骤。
2.如权利要求1所述基于网络编码的数据重传方法,其特征在于,所述编码规则为编码数据包中最多只能含有各接收节点丢失的一个原始数据包。
3.如权利要求2所述基于网络编码的数据重传方法,其特征在于,所述接收节点反馈数据包接收情况的具体方法是当接收节点能通过接收到的数据包恢复自己丢失的原始数据包,则仅向源节点反馈该解码恢复出的原始数据包接收成功;当接收节点不能从接收到的编码数据包中恢复自己丢失的原始数据包,则不向源节点反馈任何接收信息;当接收节点未接收到数据包,则该接收节点向源节点反馈该数据包接收失败。
4.如权利要求3所述基于网络编码的数据重传方法,其特征在于,源节点接收并统计接收节点反馈回的数据包的接收情况的具体方法是源节点为每个已发送的原始数据包建立接收向量;所述接收向量中每一个元素对应一个接收节点对该原始数据包的接收情况;所述接收情况包括接收成功、接收失败、待确认; 源节点每接收到一个节点反馈的接收情况之后,更新原始数据包对应的接收向量;当源节点未收到接收节点对原始数据包的反馈信息,则保持该原始数据包的接收向量中对应该接收节点的接收状态; 所述判断步骤具体为源节点分别统计各原始数据包对应的接收向量中接收成功元素和接收失败元素的个数,如有接收向量所有元素都是接收成功元素,则丢弃该接收向量对应的原始数据包;如所有接收向量中所有元素都是接收成功元素,则结束重传;如有接收向量中至少有一个接收失败元素,则需要对该接收向量对应的原始数据包进行重传。
5.如权利要求1所述基于网络编码的数据重传方法,其特征在于,所述编码规则为编码数据包中每个原始数据包都至少能恢复一个接收节点丢失的原始数据包。
6.如权利要求5所述基于网络编码的数据重传方法,其特征在于,所述接收节点反馈的数据包的接收情况的具体方法是当接收节点能通过接收到的数据包恢复自己丢失的原始数据包,则向源节点反馈该解码恢复出的原始数据包接收成功;当接收节点不能解码接收到的编码数据包,则向源节点返回编码数据包接收成功; 当接收节点不能从接收到的编码数据包中恢复自己丢失的原始数据包,则不向源节点反馈任何接收信息;当接收节点未接收到数据包,则该接收节点向源节点反馈该数据包接收失败。
7.如权利要求6所述基于网络编码的数据重传方法,其特征在于,源节点接收并统计接收节点反馈回的数据包的接收情况的具体方法是源节点为每个已发送的数据包建立接收向量;所述接收向量中每一个元素对应一个接收节点对该数据包的接收情况;所述接收情况包括接收成功、接收失败、待确认;源节点每接收到一个接收节点反馈的接收情况之后,更新数据包对应的接收向量;当源节点未收到接收节点对数据包的反馈信息,则保持该数据包的接收向量中对应该接收节点的接收状态;所述判断步骤具体为源节点分别统计各数据包对应的接收向量中接收成功元素和接收失败元素的个数,如有接收向量所有元素都是接收成功元素,则丢弃该接收向量对应的数据包;如所有接收向量中所有元素都是接收成功元素,则结束重传;如有原始数据包对应的接收向量中至少有一个接收失败元素,则需要对该原始数据包进行重传;如源节点判断当编码数据包中至少包含有一个原始数据包不能恢复任何一个接收节点丢失的原始数据包,则丢弃该编码数据包;如源节点判断当编码数据包中包含的每个原始数据包都至少能恢复一个接收节点丢失的原始数据包,则该编码数据包需要重传,并暂停将该编码数据包中包含的所有原始数据包作为需要重传的原始数据包放入优先级队列中;所述编码数据包中包含的原始数据包是组成该编码数据包的原始数据包。
8.如权利要求7所述基于网络编码的数据重传方法,其特征在于,所述源节点优先对接收情况最差的数据包进行网络编码的具体方法是源节点统计得到的接收成功元素和接收失败元素的个数将数据包放入对应的优先级重传队列中;数据包对应的接收向量中接收失败元素的个数越多对应放入的优先级重传对列的优先级越高;源节点按编码规则,以优先级从高到低的顺序,从优先级重传队列中依次取出数据包进行编码。
9.如权利要求8所述基于网络编码的数据重传方法,其特征在于,所述源节点按编码规则,以优先级从高到低的顺序,从优先级重传队列中依次取出数据包进行编码的具体方法是源节点按照优先级从高到低的顺序,从优先级重传队列中依次取出一个数据包,将该数据包与预设数据包进行网络编码,判断编码结果是否满足编码规则;如满足,则以当前的编码结果作为新的预设数据包,再判断是否所有的优先级重传队列中的数据包已进行了编码检查,如是,将当前的预设数据包作为本次需要重传的数据包, 本次编码结束,如否,则返回本步骤;如不满足,判断是否所有的优先级重传队列中的数据包已进行了编码检查,如是,将当前的预设数据包作为本次需要重传的数据包,本次编码结束,如否,则返回本步骤;所述预设数据包的初始值为全零。
10.如权利要求1所述基于网络编码的数据重传方法,其特征在于,各接收节点通过异步反馈方式将数据包的接收情况反馈至源节点。
全文摘要
本发明提供一种网络编码效率更高的基于网络编码的数据重传方法,包括步骤统计步骤源节点发送数据包之后,接收并统计接收节点反馈回的各数据包的接收情况,进入判断步骤;所述数据包为原始数据包或编码数据包;判断步骤源节点判断是否有需要重传的数据包,如是,则进入编码步骤;如否,则结束重传;编码步骤源节点按编码规则优先对接收情况最差的数据包进行网络编码,得到本次重传的最新的编码数据包,进入发送步骤;发送步骤源节点向所有接收节点广播本次需要重传的数据包,返回统计步骤。本发明优先使用当前接收情况最差的数据包进行网络编码,可增加编码增益,当编码增益越大,重传次数就会越小。
文档编号H04L1/00GK102497248SQ201110390209
公开日2012年6月13日 申请日期2011年11月30日 优先权日2011年11月30日
发明者周亮, 周志恒 申请人:电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1