基于喷泉码的Semi-TCP分组批量确认回复方法转让专利

申请号 : CN202010142755.0

文献号 : CN111262659B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 官权升陈炜璋

申请人 : 华南理工大学

摘要 :

本发明属于多跳无线网络的TCP技术领域,涉及一种基于喷泉码的Semi‑TCP分组批量确认回复方法。该方法包括:①、在Semi‑TCP的发送端和接收端在收发TCP分组时,通过对传输层数据进行喷泉码编译码,实现对数据分组的批量确认与回复,从而在确保可靠性传输的同时压缩ACK分组的发送数量,减少正反向数据流对无线信道的竞争,提高网络的吞吐量性能;②、对整个数据块进行ACK回复,可以有效减小反向ACK对正向数据流的竞争;③、预估接收端译码所需的发送端发送编码分组数,在发送端实际发送编码分组数超过预估值后进行延时降速发送,防止因反向的ACK分组无法得到及时回传而造成的网络资源浪费。

权利要求 :

1.基于喷泉码的Semi-TCP分组批量确认回复方法,其特征在于,发送端和接收端通过对数据进行喷泉码编译码实现对数据分组的批量确认与回复;采用的喷泉码为Raptor码,具体地,在发送端的喷泉码编码过程包括对数据分组进行纠错码预编码和对预编码后数据进行LT码编码两个部分,在接收端的喷泉码译码过程包括对接收到的数据分组进行LT码译码和纠错码译码两个部分;

发送端发送数据的过程包括:

(1)在需要发送数据前应用层数据划分为若干个数据块,并对数据块进行编号,每个数据块包含N个数据分组,数据块大小N和预编码后数据块增加的大小K在三次握手时预先告知接收节点;最后一个数据块通过补充空白数据分组的方式补齐到与其他数据块相同大小;

(2)对第一个待发送的数据块进行纠错码预编码,然后在传输层申请缓存作为编码区,最后将预编码后的数据块存入编码区;

(3)在发送过程中预估使接收端译码成功所需要发送的数据分组数作为预估值M,预估值M作为检测延时发送定时器是否需要启动的判断条件;

(4)当MAC层通知可以发送数据时,如果当前数据块实际发送编码分组数小于预估值M,则利用编码区进行LT码编码生成一个新数据分组,然后将LT编码后的新数据分组发送出去;否则将检测延时发送定时器是否启动,如果定时器未启动,则利用编码区进行LT码编码,然后启动延时发送定时器,延时发送LT码编码后的分组;如果定时器已启动,则不进行编码和发送;

(5)若发送节点收到的ACK的期待接收数据块序号比编码区数据块序号大,则对下一个数据块进行预编码,然后缓存到编码区,并更新编码区数据块的块序号;

接收端处理接收数据的过程包括:

(1)在传输层申请两个缓存区,用作接收区和译码区;

(2)用一个变量记录当前期待接收数据块的块序号,块序号的初始值为0;

(3)每次接收到TCP分组时,若TCP分组的块序号等于期待接收数据块的块序号,则将分组缓存到接收区;否则丢弃分组,并用一个计数器记录收到过期分组的次数,当次数大于过期分组阈值时,重传ACK并重置计数器;

(4)若接收区缓存分组数超过0.5*N,则进行LT码译码,并将接收区中译码成功的分组缓存至译码区;

(5)若译码区译码成功的数据分组数小于N,则继续接收TCP分组和译码;否则对译码区进行纠错码译码,将译码后的数据块上传至应用层,并将下一个期待接收数据块序号写入ACK的首部,然后对整个数据块进行一次确认回复给发送端,同时清空接收区和译码区。

2.根据权利要求1所述的Semi-TCP分组批量确认回复方法,其特征在于,发送端的预估值M采用如下方法确定:用一个计数器记录当前已发送数据的分组数,若收到接收端回复的新ACK,则记录此时计数器的值作为预估值M,然后重置计数器;预估值M的初始值设为1.05*N。

3.根据权利要求1所述的Semi-TCP分组批量确认回复方法,其特征在于,发送端的LT码编码过程包括:(1)通过给定的度分布随机生成一个数据分组的度degree,然后通过均匀分布随机生成一个随机数种子seed;

(2)以seed为种子连续生成degree个随机数,随机数的取值范围为0到N+K-1的整数;

(3)读取编码区中在该预编码后数据块内排列次序对应这些随机数的各数据分组,用它们进行异或运算生成新的数据分组;

(4)将degree、seed和当前编码区数据块的块序号写入新数据分组的TCP报头。

4.根据权利要求1所述的Semi-TCP分组批量确认回复方法,其特征在于,发送端延时发送LT码编码后的分组的延时时间设置为:MAC层的数据发送时间MST,MST在每次发送MAC数据时,由收到MAC层确认ACK的时刻减去发送握手信息RTS的时刻进行计算。

5.根据权利要求1所述的Semi-TCP分组批量确认回复方法,其特征在于,数据块大小N根据不同应用层协议进行设置。

6.根据权利要求1所述的Semi-TCP分组批量确认回复方法,其特征在于,发送端编码区的大小与预编码后的数据块大小一致。

7.根据权利要求1所述的Semi-TCP分组批量确认回复方法,其特征在于,接收端的接收区大小比数据块大小N稍大,初始值设为1.2*N,若空间不足则进行扩容,每次扩大5个数据分组的存储空间。

8.根据权利要求1所述的Semi-TCP分组批量确认回复方法,其特征在于,接收端的译码区大小与发送端的编码区大小一致。

9.根据权利要求1所述的Semi-TCP分组批量确认回复方法,其特征在于,接收端的过期分组阈值为10。

10.根据权利要求1所述的Semi-TCP分组批量确认回复方法,其特征在于,接收端的LT码译码采用后向传播译码或高斯消元译码。

说明书 :

基于喷泉码的Semi-TCP分组批量确认回复方法

技术领域

[0001] 本发明涉及多跳无线网络的TCP(Transmission Control Protocol,传输控制协议)技术领域,具体涉及一种用于准TCP,即Semi-TCP的分组批量确认回复方法。

背景技术

[0002] 在无线网络中,TCP经常会误判网络的拥塞情况,导致它的性能表现并不理想。对于有线网络而言,数据包的丢失通常意味着网络发生了拥塞。然而对无线网络而言,还有许多其它造成丢包的原因,如无线信道的高误码率、信道的竞争与冲突,以及由于终端移动所造成的路径不可达。无线网络频繁的丢包将会阻止TCP拥塞窗口的增大,导致发送速率始终维持在较低水平,因而大大降低网络的吞吐量。
[0003] Semi-TCP是针对无线网络改进方案的其中一种。大多数的改进方案对原来的TCP协议改变不大,仍是在传输层进行网络的拥塞控制,这限制了它们性能的进一步提高。而Semi-TCP则将拥塞控制功能从传输层搬到了MAC层,从而实现了跨层的逐跳拥塞控制。Semi-TCP采用检测网络节点自身缓存占用率的方法来判断网络是否发生了拥塞,并对传输的速率进行相应的调整。当网络发生拥塞的时候,发生拥塞的节点将检测出自身的拥塞状况,并逐跳地将拥塞信息反馈到源端,从而实现对拥塞的控制。
[0004] 由于Semi-TCP对拥塞的判断标准不再是拥塞窗口,即不再依赖于ACK,而用于确认回复的ACK也在消耗着网络资源。因此如果能对ACK进行压缩,将能有效地提高网络的吞吐量。现有的压缩ACK做法是自适应确认分组延迟发送,它能有效提高网络的吞吐量,但也存在一定的缺陷:正向数据流一直较大,接收端难以及时回传反向的ACK,发送端难以及时得知丢包信息,因此无法及时重传丢失的数据包,导致不连续的数据包在收发双方的缓存大量地累积。

发明内容

[0005] 针对现有技术的不足,本发明提供一种基于喷泉码的Semi-TCP分组批量确认回复方法。本发明通过划分数据块进行喷泉码编译码,压缩ACK分组的发送数量,从而减小反向流对无线信道的竞争,同时通过预估和延时降速发送,防止正向数据流一直过大导致反向ACK无法及时传输,有效减轻网络资源的浪费现象。
[0006] 本发明采用如下技术方案实现:
[0007] 基于喷泉码的Semi-TCP分组批量确认回复方法,包括:
[0008] 发送端和接收端通过对数据进行喷泉码编译码实现对数据分组的批量确认与回复;采用的喷泉码为Raptor码,具体地,在发送端的喷泉码编码过程包括对数据分组进行纠错码预编码和对预编码后数据进行LT码编码两个部分,在接收端的喷泉码译码过程包括对接收到的数据分组进行LT码译码和纠错码译码两个部分;
[0009] 发送端发送数据的过程包括:
[0010] (1)在需要发送数据前应用层数据划分为若干个数据块,并对数据块进行编号,每个数据块包含N个数据分组,数据块大小N和预编码后数据块增加的大小K在三次握手时预先告知接收节点;最后一个数据块通过补充空白数据分组的方式补齐到与其他数据块相同大小;
[0011] (2)对第一个待发送的数据块进行纠错码预编码,然后在传输层申请缓存作为编码区,最后将预编码后的数据块存入编码区;
[0012] (3)在发送过程中预估使接收端译码成功所需要发送的数据分组数作为预估值M,预估值M作为检测延时发送定时器是否需要启动的判断条件;
[0013] (4)当MAC层通知可以发送数据时,如果当前数据块实际发送编码分组数小于预估值M,则利用编码区进行LT码编码生成一个新数据分组,然后将LT编码后的新数据分组发送出去;否则将检测延时发送定时器是否启动,如果定时器未启动,则利用编码区进行LT码编码,然后启动延时发送定时器,延时发送LT码编码后的分组;如果定时器已启动,则不进行编码和发送;
[0014] (5)若发送节点收到的ACK的期待接收数据块序号比编码区数据块序号大,则对下一个数据块进行预编码,然后缓存到编码区,并更新编码区数据块的块序号;
[0015] 接收端处理接收数据的过程包括:
[0016] (1)在传输层申请两个缓存区,用作接收区和译码区;
[0017] (2)用一个变量记录当前期待接收数据块的块序号,块序号的初始值为0;
[0018] (3)每次接收到TCP分组时,若TCP分组的块序号等于期待接收数据块的块序号,则将分组缓存到接收区;否则丢弃分组,并用一个计数器记录收到过期分组的次数,当次数大于过期分组阈值时,重传ACK并重置计数器;
[0019] (4)若接收区缓存分组数超过0.5*N,则进行LT码译码,并将接收区中译码成功的分组缓存至译码区;
[0020] (5)若译码区译码成功的数据分组数小于N,则继续接收TCP分组和译码;否则对译码区进行纠错码译码,将译码后的数据块上传至应用层,并将下一个期待接收数据块序号写入ACK的首部,然后对整个数据块进行一次确认回复给发送端,同时清空接收区和译码区。
[0021] 优选地,发送端的预估值M采用如下方法确定:
[0022] 用一个计数器记录当前已发送数据的分组数,若收到接收端回复的新ACK,则记录此时计数器的值作为预估值M,然后重置计数器;预估值M的初始值建议设为1.05*N。
[0023] 优选地,发送端的LT码编码过程包括:
[0024] (1)通过给定的度分布随机生成一个数据分组的度degree,然后通过均匀分布随机生成一个随机数种子seed;
[0025] (2)以seed为种子连续生成degree个随机数,随机数的取值范围为0到N+K-1的整数;
[0026] (3)读取编码区中在该预编码后数据块内排列次序对应这些随机数的各数据分组,用它们进行异或运算生成新的数据分组;
[0027] (4)将degree、seed和当前编码区数据块的块序号写入新数据分组的TCP报头。
[0028] 优选地,发送端延时发送LT码编码后的分组的延时时间设置为:MAC层的数据发送时间MST,MST在每次发送MAC数据时,由收到MAC层确认ACK的时刻减去发送握手信息RTS的时刻进行计算。
[0029] 优选地,数据块大小N根据不同应用层协议进行设置。
[0030] 优选地,发送端编码区的大小与预编码后的数据块大小一致。
[0031] 优选地,接收端的接收区大小比数据块大小N稍大,初始值设为1.2*N,若空间不足则进行扩容,每次扩大5个数据分组的存储空间。
[0032] 优选地,接收端的译码区大小与发送端的编码区大小一致。
[0033] 优选地,接收端的过期分组阈值为10。
[0034] 优选地,接收端的LT码译码采用后向传播译码或高斯消元译码。
[0035] 相对于现有技术,本发明包括如下有益效果:
[0036] 1、Semi-TCP依靠MAC缓存占用情况控制发送速率,源节点不需要依赖ACK分组来调整发送窗口,ACK分组仅起可靠性控制的作用。如果按照TCP的确认回复机制对每个TCP分组都进行ACK回复,网络将需要消耗不少资源来传输这些反向的ACK分组,造成一定的浪费。本发明通过对TCP分组进行喷泉码编码,对整个数据块进行ACK回复,可以有效减小反向ACK对正向数据流的竞争,提高网络的吞吐量性能。
[0037] 2、现有的Semi-TCP对ACK压缩的做法是自适应确认分组延迟发送,该方法也能有效减小反向ACK对正向数据流的竞争和提高网络的吞吐量性能,但也有一定的缺陷:正向数据流一直较大,反向的ACK分组容易因为竞争的原因无法及时传回发送端;发送端无法及时得知丢包信息,仍在源源不断发送新的数据包,而不是及时去重传丢失的数据包;由于接收端收到的是序号更大的新数据包而不是期望的丢失数据包,按照该方法的规则不会进行ACK的回复,反向的ACK分组会进一步减少,正向数据流获得更多的传输机会;最终会导致恶性循环,收发双方的缓存都将累积大量不连续的数据包,且不满足实时性要求,而本发明基于喷泉码编译码进行ACK的压缩,传输层缓存占用为与数据块大小相关的参数,能有效避免这种情况的发生。
[0038] 3、与上面提到的自适应确认分组延迟发送方法类似,采用喷泉码编码后,ACK得到压缩,正向的数据流一直较大,同样容易出现ACK传输不够及时的情况,导致在接收端译码成功后发送端仍在源源不断地发送过期编码数据包,浪费了大量的网络资源。本发明通过预估和延时降速发送机制,在实际发送值超过预估值后降速发送数据包,减少网络资源的占用,使反向的ACK得以尽快回传,有效减少网络资源的浪费现象。

附图说明

[0039] 图1为本发明一个实施例中数据分组收发示意图;
[0040] 图2为本发明一个实施例中发送端工作流程图;
[0041] 图3为本发明一个实施例中接收端工作流程图。

具体实施方式

[0042] 下面结合附图对本发明的具体实施进行说明,但本发明的实施方式不限于此。
[0043] 本发明的基于喷泉码的Semi-TCP分组批量确认回复方法,应用于多跳无线网络,该方法在Semi-TCP的源节点(发送端)和目的节点(接收端)在收发TCP分组时,通过对数据进行喷泉码编译码,实现数据的批量确认与回复,从而在确保可靠性传输的同时压缩ACK分组的发送数量,减少正反向数据流对无线信道的竞争,提高网络的吞吐量性能。同时,预估接收端译码所需的发送端发送编码分组数,在发送端实际发送编码分组数超过预估值后进行延时降速发送,防止因反向的ACK分组无法得到及时回传而造成的网络资源浪费。
[0044] 在一个优选的实施例中,采用的喷泉码为Raptor码(纠错码+LT码);在发送端的编码过程分为对应用层数据进行纠错码预编码和对纠错码预编码后数据进行LT码编码两个部分,在接收端的译码过程分为对接收到的数据分组进行LT码译码和纠错码译码两个部分。
[0045] 发送端按以下步骤发送数据分组:
[0046] (1)在需要发送数据前将应用层数据划分为若干个数据块,并对数据块进行编号,每个数据块包含N个数据分组,数据块大小N和预编码后数据块增加的大小K在三次握手时预先告知接收节点。最后一个数据块通过补充空白数据分组的方式补齐到与其他数据块相同大小。
[0047] 需要说明的是,数据块的大小N根据不同应用层协议进行选择,优选设置20-2000。若实时性要求较高(如视频流),则应设置为一个较小的值;否则(如FTP)应设置为一个较大的值。
[0048] (2)对第一个待发送的数据块进行纠错码预编码,然后在传输层申请缓存作为编码区,缓存大小与预编码后的数据块大小(N+K)一致,最后将预编码后的数据块存入编码区。
[0049] (3)在发送过程中预估使接收端译码成功所需要发送的数据分组数作为预估值M,预估值M作为检测延时发送定时器是否需要启动的判断条件。
[0050] 发送端预估使接收端译码成功所需要发送的数据分组数的方法如下:
[0051] 用一个计数器记录当前已发送数据分组数,若收到接收端回复的新ACK,则记录此时计数器的值作为预估值M,然后重置计数器;预估值M的初始值建议设为1.05*N。
[0052] (4)当MAC层通知可以发送数据时,如果当前数据块实际发送编码分组数小于预估值,则利用编码区进行LT码编码生成一个新数据分组,然后将LT码编码后的新数据分组发送出去;否则将检查延时发送定时器,如果定时器未启动,则利用编码区进行LT码编码,然后启动定时器,延时发送LT码编码后的分组;如果定时器已启动,则不进行编码和发送。
[0053] 其中,LT码编码包括如下步骤:
[0054] ①、通过给定的度分布p(d)随机生成一个数据分组的度degree,然后通过均匀分布随机生成一个随机数种子seed。
[0055] ②、以seed为种子连续生成degree个随机数,随机数的取值范围为0到N+K-1的整数。
[0056] ③、读取编码区中在该预编码后数据块内排列次序对应这些随机数的各数据分组,用它们进行异或运算生成新的数据分组。
[0057] ④、将degree、seed和当前编码区数据块的块序号seq写入新数据分组的TCP报头。
[0058] ⑤、若发送节点收到的ACK的期待接收数据块序号比编码区数据块序号大,则对下一个数据块进行预编码,然后缓存到编码区,并更新编码区数据块的块序号。
[0059] 在一个优选的实施例中,延时发送LT码编码后分组的延时时间设置为MAC层的数据发送时间MST,MST可由收到MAC层确认ACK的时刻减去发送该MAC层数据的握手信息RTS的时刻进行计算,即MST在每次发送MAC数据时,由收到MAC层确认ACK的时刻减去发送握手信息RTS的时刻进行计算。
[0060] 在接收端按以下步骤处理接收到的数据分组:
[0061] (1)在传输层申请两个缓存区,用作接收区和译码区。接收区的大小应比数据块大小N稍大,初始值可设为1.2*N,若空间不足则进行扩容,每次扩大5个数据分组的存储空间;译码区大小与发送端的编码区大小(N+K)一致。
[0062] (2)用一个变量记录当前期待接收数据块的块序号,序号的初始值为0。
[0063] (3)每次接收到TCP分组时,若分组的块序号seq等于期待接收数据块的块序号,则将分组缓存到接收区,否则丢弃分组,并用一个计数器记录收到这种过期分组的次数,当次数大于过期分组阈值时,重传ACK并重置该计数器。
[0064] (4)若接收区缓存分组数超过0.5*N,则进行LT码译码,并将接收区中译码成功的分组缓存至译码区。
[0065] (5)若译码区译码成功的数据分组数小于N,则继续接收TCP分组和译码;否则对译码区进行纠错码译码,将译码后的数据块上传至应用层,并将下一个期待接收数据块序号写入ACK的首部,然后对整个数据块进行一次确认回复,同时清空接收区和译码区。
[0066] 下面参照图1-图3对本发明的一个具体实施例进行说明。
[0067] 如图1、2所示,发送端按以下步骤发送数据分组:
[0068] (1)设定数据块大小N,将延时发送预估值的初始值设置为1.05*N、编码区数据块序号的初始值设置为0。
[0069] (2)对应用层数据进行划分和编号,并对最后一个数据块的大小进行补齐。
[0070] (3)选定度分布p(d),常见选择为鲁棒孤波分布。
[0071] (4)编码区缓存第一个数据块,并对数据块进行纠错码预编码处理,准备发送数据。
[0072] (5)MAC层通知可以发送数据分组时,检测已发送数据分组数,若小于预估值,则对编码区进行一次LT码编码,生成新数据分组,然后将数据分组发送出去;若大于等于预估值,则检测延时发送定时器是否已工作,若未工作,则在进行LT码编码后获取MAC层的数据发送时间MST,启动定时器,延时MST后发送新数据分组;若定时器已工作,则不进行编码和发送。
[0073] 其中,发送端的LT码编码流程如下:
[0074] ①、由已定的度分布p(d)随机生成一个数据分组的度degree,然后再随机生成一个随机数种子seed。
[0075] ②、以seed为种子连续生成degree个随机数,随机数的取值范围为0到N+K-1的整数。
[0076] ③、读取在编码区的排列次序对应这些随机数的各数据分组,用它们进行异或运算生成新的数据分组。比如在某次编码中degree选2,利用seed为种子生成了两个随机数r1、r2,则对应选取编码区的第r1和第r2个数据分组进行异或运算。
[0077] ④、将degree、seed和编码区数据块的块序号seq写入新数据分组的TCP报头。
[0078] 发送端按以下步骤处理接收端的确认ACK:
[0079] 收到ACK后,检测ACK的期待接收数据块编号,若比编码区数据块序号大,则记录当前实际发送数据分组数作为预估值,并对实际发送分组数进行重置,然后对下一个数据块进行纠错码预编码,缓存预编码后的数据块至编码区,并更新编码区数据块序号。
[0080] 如图1、3所示,接收端按以下步骤处理接收到的数据分组:
[0081] (1)从发送端的握手数据中获取数据块大小N,将期待接收数据块序号的初始值设置为0。
[0082] (2)申请缓存,建立接收区和译码区,准备接收数据。
[0083] (3)收到数据分组后,检测数据分组的数据块编号,若比期待接收数据块序号小,则过期分组计数器加1,若计数器的值大于10,则重传ACK并重置计数器;若等于期待接收数据块序号,则将数据分组缓存至接收区。若接收区已缓存的数据分组数大于数据块大小N,则进行LT码译码,并将译码成功的分组缓存至译码区。若译码区已缓存的数据分组数大于等于数据块大小N,则对译码区进行纠错码译码,并将译码后的结果上传给应用层,然后期待接收数据块序号加1,并对整个数据块回复一次ACK。
[0084] 其中,LT码译码操作可以采用后向传播译码算法或高斯消元译码算法来实现。
[0085] 上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。