一种数据传输方法及装置与流程


一种数据传输方法及装置
1.本技术是分案申请,原申请的申请号是201910229219.1,原申请日是2019年03月25日,原申请的全部内容通过引用结合在本技术中。
技术领域
2.本技术涉及通信技术领域,尤其涉及一种数据传输方法及装置。


背景技术:



3.虚拟现实、增强现实、高清无线投屏以及基于人工智能的新型应用的兴起,催生出广域网和无线局域网上海量数据传输的需求。对带宽的需求越来越大,因此数据包传输要求高吞吐量。而“高吞吐”对确认信息(acknowledgement,ack)机制提出新的挑战。例如,大型企业通常通过在广域网部署专线来保证其部分关键业务的快速、可靠的数据传输。然而,目前大部分的业务仍然是通过公共的、价格相对便宜的公网来进行传输。对于中小型企业来说,采用公网传输的业务所占的比重将会更大。公网具有以下特征:链路容量(带宽)高(例如1gbps或10gbps)、往返时延长(例如国内30ms-60ms,国际100ms-300ms)、存在非拥塞丢包(例如,中间盒策略、路由变化、数据错误导致的丢包)和网络动态变化,难以预测。
4.现有技术中,通常数据的接收端会发送ack包以将数据的接收情况告知发送端。有的ack包中包括该ack包生成时,接收端已经成功接收到且未被确认的数据包的信息(例如数据包的标识),这些数据包是在该ack包生成时仍然保存在接收端的接收缓存中,而未被接收端的应用层处理的数据包。这样,发送端就可以根据ack包重传接收端未收到的数据包,然而,由于网络的复杂性和业务需求的不断提高,现有的ack包发送机制,在丢包重传方面的性能仍然需要提升,这一方面的影响也制约了数据传输的性能的提高。


技术实现要素:



5.本技术提供一种数据传输方法及装置,用以提高数据传输的性能。
6.第一方面,本技术实施例提供一种数据传输方法,包括:数据接收端接收来自数据发送端的多个数据包;所述数据接收端基于所述多个数据包更新所述数据接收端的接收缓存;
7.所述数据接收端根据所述更新的接收缓存,向所述数据发送端发送确认信息;其中,所述确认信息中包括黑名单,或者包括黑名单和白名单,所述黑名单用于指示所述更新的接收缓存中空缺的数据包,所述空缺的数据包为所述数据发送端已发送且所述数据接收端未接收的数据包,所述白名单用于指示所述数据接收端已接收的若干个数据包,所述若干个数据包中包括所述多个数据包。
8.上述设计通过在确认信息中包括黑名单、或者包括黑名单和白名单,也就是说接收端通过反馈确认信息,将多个接收端未接收到的数据包的标识及时的通知给发送端,从而发送端能够更及时地向接收端重传这些的数据包而无需等待到超时再重传,从而提高数据传输性能。另外,接收端向发送端指示白名单,使得发送端能够及时获知发送端新接收到
的数据包,在一定程度上避免发送端由于无效的重传(即重传已被接收的数据包)导致的带宽浪费。
9.在一种可能的设计中,所述白名单包括所述更新的接收缓存中序列号最大的数据包的标识,所述黑名单包括所述空缺的数据包中序列号最小的数据包的标识。
10.数据包的标识可以是数据包的序列号或者序列号偏移量,也可以是其他可以将各个数据包区分开的信息。
11.上述设计中接收端每次至少将造成行头阻塞的未接收到的数据包及时的通知给发送端,从而发送端能够及时向接收端发送造成行头阻塞的数据包,从而提高数据传输性能。另外,接收端向发送端指示接收缓存中序列号最大的数据包的标识,即最新接收到的数据包,使得发送端能够及时获知发送端新接收到的数据包,在一定程度上避免发送端由于重传导致的带宽浪费。
12.在一种可能的设计中,所述白名单还包括所述更新后的接收缓存中优先级较高的数据包的标识,其中,数据包的优先级与数据包的重要程度相关。
13.优先级最高的数据包可以包括乱序包、重传包、队头包等。
14.通过上述设计,冗余指示发送端重要程度较高的已接收到的数据包,从而在一定程度上避免发送端重传导致的带宽浪费。
15.在一种可能的设计中,所述数据接收端向数据发送端发送确认信息,包括:
16.所述数据接收端在满足反馈条件时,向所述数据发送端发送所述确认信息;
17.所述反馈条件包括如下一项或者多项:
18.已接收到的数据包的数量达到第一阈值;
19.已接收到的数据比特数达到第二阈值;或者,
20.达到反馈周期的时间节点。
21.在一种可能的设计中,所述黑名单包括以第一数据包的序列号为基准时第二数据包的序列号的偏移量,所述第二数据包为所述空缺的数据包中的任一数据包,所述第一数据包为所述数据接收端已接收到的一个数据包;或者,
22.所述白名单包括以所述第一数据包的序列号为基准时第三数据包的序列号的偏移量,所述第三数据包为所述若干个数据包中的任一个数据包。
23.上述设计中,通过序列号偏移量作为数据包的标识,编码较简单,并且可以减少编码占用的空间,
24.在一种可能的设计中,所述空缺的数据包中包括n个序列号连续的数据包,所述黑名单还包括n个序列号连续的数据包中序列号最小的数据包的序列号偏移量以及序列号最大的数据包的序列号偏移量;或者,
25.所述若干个数据包中包括n个序列号连续的数据包,所述白名单还包括n个序列号连续的数据包中序列号最小的数据包的序列号偏移量以及序列号最大的数据包的序列号偏移量,n为大于1的整数。
26.上述设计中,提供了一种序列号连续的多个数据包的编码方式,简单且空间占用较少。
27.在一种可能的设计中,所述序列号偏移量通过一个m位无符号整数来编码,第一无符号整数的高l位为第一数值,所述第一数值指示n个序列号连续的数据包的第一个数据
包,所述第二无符号整数的高l位为第二数值,所述第二数值指示n个序列号连续的数据包的第n个数据包,第一无符号整数的低m-l位用于编码所述序列号最小的数据包的序列号偏移量,所述第二无符号整数的低m-l位用于编码所述序列号最大的数据包的序列号偏移量,m和l均为大于1的整数,且m大于l。
28.在一种可能的设计中,所述确认信息中还包括已确认接收到的数据包的序列号最大的数据包的标识。
29.在一种可能的设计中,所述确认信息中还包括当前接收缓存中存储的数据量。
30.上述设计中可以使得发送端根据发送端已经确认的数据包的序列号估算自身需要重传数据量,进一步根据重传数据量确认网络状况,来判断是否执行传输操作。
31.在一种可能的设计中,所述黑名单和所述白名单采用位图编码方式编码。
32.在一种可能的设计中,所述空缺的数据包中包括n1个序列号连续的数据包,所述黑名单中包括由所述n1个序列号中最小序列号和最大序列号构成的序列号范围,n1为大于0的整数;或者,所述若干个数据包中包括n2个序列号连续的数据包,所述白名单中包括由所述n2个序列号中最小序列号和最大序列号构成的序列号范围,n2为大于0的整数。
33.在一种可能的设计中,所述确认信息中包括黑名单和白名单,所述向数据发送端发送确认信息,包括:向数据发送端发送第一反馈报文和第二反馈报文,所述第一反馈报文中包括所述黑名单,所述第二反馈报文中包括所述白名单;或者,
34.向数据发送端发送第三反馈报文,所述第三反馈报文包括所述黑名单和所述白名单。
35.第二方面,本技术实施例提供一种数据传输方法,包括:
36.数据发送端接收来自数据接收端的第一反馈报文,所述第一反馈报文用于反馈所述数据接收端接收来自所述数据发送端的数据包的情况;
37.数据发送端根据所述第一反馈报文,多次向所述数据接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传,其中,所述第一数据包为所述数据发送端应重传的一个数据包,每两个所述副本的发送之间间隔随机的时长。
38.上述方案,在确定接收到未接收到第一数据包后,一轮重传中,冗余重传多次,且一轮重传中的每两次重传之间,间隔随机的时间,当然,这个随机的时间内数据发送端可以发送其他数据包,或者只是等待随机的时间,这样,不会将重传的数据包集中传输,从而提高重传成功率。
39.在一种可能的设计中,完成第一数据包的一轮重传后,所述方法还包括:
40.所述数据发送端根据所述数据接收端发送的第二反馈报文,再次确定所述第一数据包需要重传;
41.所述数据发送端多次向所述数据接收端发送所述第一数据包的副本以完成对所述第一数据包的又一轮重传,其中,所述又一轮对所述第一数据包的重传中,每两个副本的发送也间隔随机的时长,且所述又一轮重传中重传的所述第一数据包的副本的次数大于所述一轮重传的所述第一数据包的副本的次数。
42.上述设计中,随着重传轮数的增加,逐渐增加重传数据包的重传次数,进一步提高重传成功率。
43.在一种可能的设计中,所述第一反馈报文包括黑名单,所述黑名单用于指示所述
更新的接收缓存中空缺的数据包,所述空缺的数据包为所述数据发送端已发送且所述数据接收端未接收的数据包。
44.在一种可能的设计中,所述第一反馈报文包括白名单,所述白名单用于指示所述数据接收端已接收的若干个数据包。
45.在一种可能的设计中,所述第一反馈报文包括黑名单和白名单。
46.在一种可能的设计中,所述第一反馈报文包括黑名单。在接收来自数据接收端的第一反馈报文时,还接收到第三反馈报文,第三反馈报文包括白名单。
47.在一种可能的设计中,所述第一数据包本轮被重传的次数,与所述第一数据包被重传的轮数正相关。
48.在一种可能的设计中,所述第一反馈报文包括所述接收端的接收缓存中存储的数据量,或者白名单,所述白名单指示所述接收缓存中存储的数据包,所述数据发送端根据所述第一反馈报文,多次向所述数据接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传,包括:
49.所述数据发送端根据所述第一反馈报文确定所述第一数据包,以及第一数据量满足小于所述数据发送端的拥塞窗口,所述第一数据量为所述数据发送端根据已经向所述数据接收端发送的数据量以及第二数据量确定的数据量,所述第二数据量为所述接收缓存中存储的数据量或者根据所述白名单确定的所述接收缓存中数据包的数据量;
50.所述数据发送端多次向所述数据接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传。
51.相反,当第一数据量大于或者等于拥塞窗口,禁止向发送端发送第一数据包的副本。也就是说,已经发送的且未被接收端接收到的数据包的比特数已经超过拥塞窗口,表明网络状态恶化,丢包率较高,则禁止向接收端发送数据。现有方案中,重传数据包时,会根据已向接收端发送且接收端未确认接收的数据包的数量来与通告窗口和拥塞窗口的最小值作比较。而本技术实施例根据的是已向接收端发送且接收端未接收到的数据包的数量与通告窗口作比较来确定执行重传。已向接收端发送且接收端未确认接收的数据包,有些已经被接收端到,存储在接收缓存中,而本技术中确定的第一数据量将已经存储在接收缓存中的这部分数据量也排除在外,再与拥塞窗口比较,因此,较现有来说,增大了允许发送的数据量。因此,本技术实施例中,在采用冗余重传的方式,使得重传的数据包有最大概率能够被接收端接收的情况,再采用本设计提供的投机主义的方式,在一定程度上可以释放部分接收缓存,缓解拥塞。
52.第三方面,本技术实施例提供一种数据传输装置,包括:
53.接收模块,用于接收来自数据发送端的多个数据包;
54.更新模块,用于基于所述多个数据包更新所述数据接收端的接收缓存;
55.发送模块,用于数据接收端根据所述更新的接收缓存,向所述数据发送端发送确认信息;
56.其中,所述确认信息中包括黑名单,或者包括黑名单和白名单,所述黑名单用于指示所述更新的接收缓存中空缺的数据包,所述空缺的数据包为所述数据发送端已发送且所述数据接收端未接收的数据包,所述白名单用于指示所述数据接收端已接收的若干个数据包,所述若干个数据包中包括所述多个数据包。
57.在一种可能的设计中,所述白名单包括所述更新的接收缓存中序列号最大的数据包的标识,所述黑名单包括所述空缺的数据包中序列号最小的数据包的标识。
58.在一种可能的设计中,所述白名单还包括所述更新后的接收缓存中优先级较高的数据包的标识,其中,数据包的优先级与数据包的重要程度相关。
59.在一种可能的设计中,所述发送模块,具体用于在满足反馈条件时,向所述数据发送端发送所述确认信息;
60.所述反馈条件包括如下一项或者多项:
61.已接收到的数据包的数量达到第一阈值;
62.已接收到的数据比特数达到第二阈值;或者,
63.达到反馈周期的时间节点。
64.在一种可能的设计中,所述黑名单包括以第一数据包的序列号为基准时第二数据包的序列号的偏移量,所述第二数据包为所述空缺的数据包中的任一数据包,所述第一数据包为所述数据接收端已接收到的一个数据包;或者,
65.所述白名单包括以所述第一数据包的序列号为基准时第三数据包的序列号的偏移量,所述第三数据包为所述若干个数据包中的任一个数据包。
66.在一种可能的设计中,所述空缺的数据包中包括n个序列号连续的数据包,所述黑名单还包括n个序列号连续的数据包中序列号最小的数据包的序列号偏移量以及序列号最大的数据包的序列号偏移量;或者,
67.所述若干个数据包中包括n个序列号连续的数据包,所述白名单还包括n个序列号连续的数据包中序列号最小的数据包的序列号偏移量以及序列号最大的数据包的序列号偏移量,n为大于1的整数。
68.在一种可能的设计中,所述序列号偏移量通过一个m位无符号整数来编码,第一无符号整数的高l位为第一数值,所述第一数值指示n个序列号连续的数据包的第一个数据包,所述第二无符号整数的高l位为第二数值,所述第二数值指示n个序列号连续的数据包的第n个数据包,第一无符号整数的低m-l位用于编码所述序列号最小的数据包的序列号偏移量,所述第二无符号整数的低m-l位用于编码所述序列号最大的数据包的序列号偏移量,m和l均为大于1的整数,且m大于l。
69.在一种可能的设计中,所述确认信息中还包括已确认接收到的数据包的序列号最大的数据包的标识。
70.在一种可能的设计中,所述确认信息中还包括当前接收缓存中存储的数据量。
71.在一种可能的设计中,所述黑名单和所述白名单采用位图编码方式编码。
72.在一种可能的设计中,所述空缺的数据包中包括n1个序列号连续的数据包,所述黑名单中包括由所述n1个序列号中最小序列号和最大序列号构成的序列号范围,n1为大于0的整数;或者,
73.所述若干个数据包中包括n2个序列号连续的数据包,所述白名单中包括由所述n2个序列号中最小序列号和最大序列号构成的序列号范围,n2为大于0的整数。
74.在一种可能的设计中,所述确认信息中包括黑名单和白名单,所述发送模块具体用于:
75.向数据发送端发送第一反馈报文和第二反馈报文,所述第一反馈报文中包括所述
黑名单,所述第二反馈报文中包括所述白名单。
76.第四方面,本技术实施例提供一种数据传输装置,包括:
77.接收模块,用于接收来自数据接收端的第一反馈报文,所述第一反馈报文用于反馈所述数据接收端接收来自所述数据发送端的数据包的情况;
78.重传模块,用于根据所述第一反馈报文,多次向所述数据接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传,其中,所述第一数据包为所述数据发送端应重传的一个数据包,每两个所述副本的发送之间间隔随机的时长。
79.在一种可能的设计中,所述重传模块还用于根据所述数据接收端发送的第二反馈报文,再次确定所述第一数据包需要重传;多次向所述数据接收端发送所述第一数据包的副本以完成对所述第一数据包的又一轮重传,其中,所述又一轮对所述第一数据包的重传中,每两个副本的发送也间隔随机的时长,且所述又一轮重传中重传的所述第一数据包的副本的次数大于所述一轮重传的所述第一数据包的副本的次数。
80.在一种可能的设计中,所述第一反馈报文包括黑名单,所述黑名单用于指示所述更新的接收缓存中空缺的数据包,所述空缺的数据包为所述数据发送端已发送且所述数据接收端未接收的数据包。
81.在一种可能的设计中,所述第一数据包本轮被重传的次数,与所述第一数据包被重传的轮数正相关。
82.在一种可能的设计中,所述第一反馈报文包括所述接收端的接收缓存中存储的数据量,或者白名单,所述白名单指示所述接收缓存中存储的数据包;
83.所述重传模块,具体用于根据所述第一反馈报文确定所述第一数据包,以及第一数据量满足小于所述数据发送端的拥塞窗口,所述第一数据量为所述数据发送端根据已经向所述数据接收端发送的数据量以及第二数据量确定的数据量,所述第二数据量为所述接收缓存中存储的数据量或者根据所述白名单确定的所述接收缓存中数据包的数据量;多次向所述数据接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传。
84.第五方面,本技术实施例提供了一种数据传输装置,所述装置应用于数据的接收端,包括通信接口、处理器和存储器,所述存储器用于存储软件程序,所述处理器用于读取所述存储器中存储的软件程序,通过所述通信接口收发数据,并实现第一方面或上述第一方面的任意一种设计提供的方法。
85.第六方面,本技术实施例提供了一种数据传输装置,所述装置应用于数据的发送端,包括通信接口、处理器和存储器,所述存储器用于存储软件程序,所述处理器用于读取所述存储器中存储的软件程序,通过所述通信接口收发数据,并实现第二方面或上述第二方面的任意一种设计提供的方法。
86.第七方面,本技术实施例提供了一种数据处理系统,所述系统包括第三方面所述的装置以及第四方面所述的装置。或者系统包括第五方面所述的装置和第六方面所述的装置。
87.第八方面,本技术实施例中还提供一种计算机存储介质,该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时可实现第一或者第二方面的任意一种设计提供的方法。
88.第九方面,本技术实施例提供了一种包含指令的计算机程序产品,当其在计算机
上运行时,使得计算机执行上述第一方面或第二方面的任一设计提供的方法。
89.第十方面,本技术实施例提供了一种芯片,所述芯片与存储器相连,用于读取并执行所述存储器中存储的软件程序,以实现第一方面或第二方面的任意一种设计提供的方法。
90.应当理解的是,本技术的第二至第十方面与本技术的第一方面和第二方面的技术方案相同或者类似,各方面及对应的可行实施方式所取得的有益效果相似,不再赘述。
附图说明
91.图1为本技术实施例提供的一种应用场景对应的架构示意图;
92.图2为本技术实施例提供的一种通信系统架构示意图;
93.图3为本技术实施例提供的数据传输方法流程示意图;
94.图4为本技术实施例提供的一种ack包结构示意图;
95.图5为本技术实施例提供的一种delat.seq结构示意图;
96.图6为本技术实施例提供的数据包到达情况示意图;
97.图7为本技术实施例提供的另一种delat.seq结构示意图;
98.图8为本技术实施例提供的数据传输方法流程示意图;
99.图9为本技术实施例提供的冗余重传方法流程示意图;
100.图10为本技术实施例提供的投机主义传输流程示意图;
101.图11为本技术实施例提供的一种应用于接收端的数据传输装置结构示意图;
102.图12为本技术实施例提供的一种应用于发送端的数据传输装置结构示意图;
103.图13为本技术实施例提供的数据传输装置1300结构示意图;
104.图14为本技术实施例提供的场景一下的测试结果示意图;
105.图15为本技术实施例提供的场景二下的测试结果示意图。
具体实施方式
106.本技术实施例提供的方案可用在端到端通信,端云通信以及云到云通信等多种通信场景中。因此,本技术涉及到的数据接收端或者数据发送端可以是终端设备(也可以简称为终端),例如传感器、手机、平板、笔记本电脑、个人计算机、车载终端、机顶盒,电视盒子等;也可以是网络设备,例如网关、接入路由器、核心路由器、前端路由器、负载均衡器、服务器等。例如,端到端场景可以是,手机将一段视频投屏在智能电视或者通过电视盒子或接收器投屏在显示器上。再例如,终端设备之间通过某个应用的视频通话,则其中的一个终端和该应用的服务器,就是很适用本技术描述的方法的端云场景。应理解,本技术中的数据接收端和数据发送端都指设备或者操作系统。例如,数据接收端是指一个连接中,接收数据的设备或者该接收数据的设备中的操作系统,数据发送端是指一个连接中,数据的发送端,则同一个设备可以在一段时间内是数据接收端,而一段时间内是数据发送端,或者,由于一个设备可能是多条连接的端节点,一个设备可以同时是数据接收端和数据发送端。为便于理解,本技术以一条连接的数据发送端和数据接收端为例描述。需要说明的是,为了描述方便,后续描述时,本技术实施例中将数据发送端简称为发送端,数据接收端简称为接收端。
107.而在一些大带宽时延积(bandwidth-delay product,bdp)、有损的广域网或者无
线局域网传输加速的应用场景中(参见图1所示),效果更加明显。需要说明的是,一个具有大带宽时延积的网络也可以被称之为长胖网络(long fat network,lfn)。大bdp、有损的广域网传输加速的应用场景中,所对应的业务有公有云海量数据上传、混合云数据迁移、跨数据中心(cross datacenter,cross-dc)海量数据分发、灾备、企业总部与分支机构的数据传输、2k/4k视频点播、直播等业务。其中,2k/4k表示视频像素的总列数为2000或者4000列。一方面,上述这些业务,对广域网传输加速有着迫切的需求。另一方面,高清视频投屏、基于无线的虚拟现实、增强现实或混合现实等应用,对无线局域网传输加速也有着迫切的需求。在需要传输加速的情况下对带宽需求也越来越大,因此数据包传输要求高吞吐量。
108.本技术描述的方法适用于多种传输协议,如传输控制协议(transport control protocol,tcp)、用户数据协议(user data protocol,udp)、快速udp网络连接(quick udp internet connection,quic),流控制传输协议(stream control transmission protocol,stcp)等等,甚至可以使用在多路径传输场景的子流(subflow)。
109.以传输控制协议(transport control protocol,tcp)为例,传统的以丢包为拥塞信号的方案,例如cubic,遇到非拥塞丢包事件时,会不合理地进行退避,从而无法充分利用带宽。不以丢包为拥塞信号的tcp加速方案,例如瓶颈带宽与往返传输时延(bottleneck bandwidth and round-trip propagation time,bbr)协议和满载管道(fill the pipe,fillp)协议,具有显著的带宽提升,实现高吞吐的目标。然而,这些“高吞吐场景”在提升吞吐的同时,存在其它的问题。
110.首先,“高吞吐场景”的传输加速效果受到发送缓存和接收缓存的制约。传输所需要的发送缓存或者接收缓存的大小由数据包的最大重传次数决定。在相同有损网络条件下,吞吐越高,包最大重传次数越大。而包最大重传次数越大,传输需要的缓存越多。现有方案主要通过调整主机缓存来消除缓存受限的影响,但是实际应用场景中,并不是所有收发节点都是可修改的,而且随着流量增加、网络变化,一次配置可能无法满足永久需求,治标不治本。所以,当缓存受限时,提升重传效率,降低包最大重传次数,是解决这一问题的关键。
111.其次,“高吞吐”对ack机制提出新的挑战。现有的ack包中,有一类ack可以携带的字节长度有限制,比如总字节长度不超过40字节,导致能够携带的已经成功接收到的数据包的信息比较有限。从上可以看出,现在网络的复杂性和业务需求不断提高,从而现有的ack包发送机制,在丢包重传方面的性能仍然需要提升,这一方面的影响也制约了数据传输的性能的提高。
112.基于此,本技术实施例提供一种数据传输方法及装置,用以提高数据的传输性能。其中,方法和装置是基于同一发明构思的,由于方法及装置解决问题的原理相似,因此装置与方法的实施可以相互参见,重复之处不再赘述。
113.以下在介绍本技术提供的具体方案之前,先对本技术实施例涉及的技术概念进行解释说明。
114.1)、白名单:也称数据包白名单,用于记录接收端已经收到的数据包的信息,例如数据包的标识,该标识可以是序列号等。具体的,接收端接收到数据包,一般先存储在接收缓存中,然后按照数据包的序列号顺序从接收缓存取出数据包发送到应用层。比如,已经接收到序列号为1、2、3、5的数据包,并存储到接收缓存中,则序列号1、2、3连续,取出发送到应
用层,但是序列号4的数据包还未接收到,则接收缓存中序列号5的数据包则会存储在接收缓存中,直到接收到序列号为4的数据包。发送到应用层的数据包均为被确定接收的数据包,因此接收缓存存在的数据包是指已经接收到但未被确认接收的数据包。序列号为5的数据包属于白名单,换句话说,白名单中包括序列号5。也就是说,白名单记录的是在该白名单形成时,接收端已经接收到但还未提交的应用层的数据包,换句话说是,接收缓存中的数据包。
115.2)、黑名单:也可以称为数据包黑名单,用于记录接收端未收到的数据包。比如,上述序列号为4的数据包则属于黑名单。
116.3)、包的最大重传次数:重传的数据包可能再次丢失,再次丢失的包将继续被重传直到该数据包成功被接收端所接收。包的最大重传次数表示一个路径中的数据包的最大被重传的次数。一条路径的包的最大重传次数的值可以随着时间的推移而被刷新。
117.4)、数据路径:包括数据发送端到接收端之间的链路。可以认为一条路径(path)是由一个或多个链路(link)组成的。
118.5)、反向路径:也称控制路径,即发送反馈报文(如ack)所使用的路径,是接收端到发送端之间的链路组成的路径。对一条连接,发送数据包的路径和发送反馈报文的路径可以对应不同的链路。
119.6)、投机主义:在本技术实施例中特指重传的数据包在发送时,不受接收缓存大小的限制。具体实现方式后续会详细描述,此处不再重复描述。
120.另外,需要说明的是,本技术中,“至少一个”是指一个或者多个,“多个或者若干”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。应当理解,尽管在本技术实施例中可能采用术语第一、第二等来描述各对象、但这些术语仅用来将各对象彼此区分开。
121.如图2所示,为本技术实施例示例的一种通信系统的具体的架构示意图。通信系统中包括发送端和接收端。示例性的,接收端包括接收处理模块201、丢包检测模块202、编码模块203、构造模块204,反馈控制模块205,发送端包括解析模块206和重传模块207。应理解,图2的架构只是一种举例,本技术不限定接收端和发送端中各自包括的模块。例如,丢包检测可以在发送端,发送端通过分析接收端的ack确定传输丢失的包。
122.其中,接收处理模块201从发送端接收数据包,将接收到的数据包缓存到接收缓存中,换句话说,根据接收到的数据包更新接收端的接收缓存。丢包检测模块202根据接收缓存中的缓存的数据包情况,确定黑名单和/或白名单。在一些实施例中,发送端也可以配置丢包检测模块,接收端可以仅确认白名单,从而发送端的丢包检测模块可以根据发送端发送的白名单确认哪些数据包丢失需要重传。编码模块203对丢包检测模块202确定的白名单和/或黑名单进行编码。在一些实施例中,编码模块203,可以采用通过标记起始数据包序号和结尾数据包序号的方法;或采用位图编码的方法,用0表示数据包未到达,用1表示数据已到达;或采用整数编码的方法,以某个数据包序号为基准,通过序列号偏移量(整数)指示数
据包,从而减少空间占用。后续实施例会对编码模块203所采用的编码方式详细描述,此处不再重复描述。构造模块204,构造ack包,构造的ack包携带黑名单和/或白名单。在一些实施例中,构造模块204可以以接收缓存中左边界数据包(接收缓存中序列号最小的数据包)为基准,基于优先级将黑名单和/或白名单加入ack包中。示例性的,可以优先采用黑名单中序列号最小的数据包的标识构造ack包;或优先采用白名单中序列号最大的数据包的标识构造ack包;或采用黑名单中序列号最小的多个数据包的标识和白名单中序列号最大的多个数据包的标识构造ack包。示例性的,构造ack包时,如果黑名单或者白名单中某几个数据包是连续的,则可以选择仅基于黑名单构造ack包或者基于白名单构造ack包,从而发送端可以通过其中一种名单推断出另外一种名单,比如用黑名单可以推断出白名单。在一些实施例中,ack包中还可以包括接收缓存中存储的数据量。反馈控制模块205将ack包通过反向路径发送给发送端。在一些实施例中,反馈控制模块205,可以采用基于事件的(event-based)反馈控制,比如采用tcp经典的逐包反馈ack,即每收到特定数量的数据包,回复一个ack;或者没收到特定数据量的数据包反馈ack;或采用基于时钟的(timer-based)反馈控制,如fillp的周期性主动反馈ack包,即每经过特定时间间隔,回复一个ack包。还可以结合基于时间的反馈控制和时钟的反馈控制两种方式,只要满足任意一个条件,则回复ack。
123.发送端接收到ack包后,通过解析模块206解析ack包,得到解析白名单和/或黑名单。具体的,解析模块206针对ack包,读取其包头和数据字段。比如编码模块203采用整数编码方式时,解析模块206可以根据ack包定义的偏移,获取已经编码过的黑名单和/或白名单。根据编码规则进行解码,获取黑名单和/或白名单、接收缓存中存储的数据量等信息。重传模块207根据白名单和/或黑名单确定传输丢失的数据包,从而重传丢失的数据包。在一些实施例中重传模块207进行以投机主义的方式对需要重传的数据包进行随机重传。本技术描述的方法和装置,可能只涉及对上述模块中部分模块的改进,而另一些模块可以使用现有的技术。
124.下面介绍本技术提供的具体方案。
125.参见图3所示,为本技术实施例提供的数据传输方法流程示意图。所述方法可以包括:s201、s202和s203,还可以包括s204和s205。
126.s201,接收端接收来自数据发送端的多个数据包。
127.示例性的,接收端通过传输层接收来自发送端的数据包。
128.s202,所述接收端基于所述多个数据包更新所述数据接收端的接收缓存。其中,所述接收缓存中包括已接收到的且未确认接收的数据包。
129.比如,发送端发送10个数据包,10个数据包的序列号分别1-10。由于存在丢包,接收端可能仅接收到5个数据包,序列号分别为1、4、5、6、10。接收端将接收到的5个数据包存储在接收缓存中,并按序列号的顺序调度数据包上传到应用层,序列号为1的数据包上传到应用层,而接收缓存中不包括序列号为2-3的数据包,则不会将序列号4、5、6、10的数据包上传到应用层,当序列号2-3的数据包接收到时,将序列号2-6的数据包上传到应用层。待序列号7-9的数据包接收到时,将序列号7-10的数据包上传到应用层。
130.s203,所述接收端根据所述更新的接收缓存,向所述数据发送端发送确认信息,其中,所述确认信息中包括黑名单,或者包括黑名单和白名单。
131.所述白名单用于指示接收端已接收的若干个数据包,比如,若干个数据包中包括
所述多个数据包。再比如白名单指示所述更新的接收缓存中存在的数据包。所述黑名单用于指示所述更新的接收缓存中空缺的数据包,空缺的数据包为所述发送端已发送且所述接收端未接收到的数据包。
132.示例性的,所述白名单包括所述更新的接收缓存中存在的序列号最大的k1个数据包的标识,所述黑名单包括空缺的数据包中的序列号最小的k2个数据包的标识,k1和k2均为大于0的整数。
133.例如,发送端发送10个数据包,10个数据包的序列号分别1-10。由于存在丢包,接收端仅接收到5个数据包,序列号分别为1、4、5、6、10。接收端将接收到的5个数据包存储在接收缓存中,并按序列号的顺序调度数据包上传到应用层,序列号为1的数据包上传到应用层。接收缓存中包括序列号4、5、6、10的数据包。而未被成功接收的数据包包括序列号为2、3、7、8、9的数据包。基于此,白名单中可以包括序列号4、5、6、10的数据包的标识,黑名单中可以包括序列号为2、3、7、8、9的数据包的标识。示例性的,确认信息所占的总长度较小时,比如k1和k2均为2时,白名单中可以包括序列号为6、10的数据包的标识,黑名单中可以仅包括序列号为2、3的数据包的标识。
134.本技术提供的方案,通过在确认信息中包括黑名单、或者包括黑名单和白名单,也就是说接收端通过反馈确认信息,将多个接收端未接收到的数据包的标识及时的通知给发送端,从而发送端能够更及时地向接收端重传这些的数据包而无需等待到超时再重传,从而提高数据传输性能。另外,接收端向发送端指示白名单,使得发送端能够及时获知发送端新接收到的数据包,在一定程度上避免发送端由于无效的重传(即重传已被接收的数据包)导致的带宽浪费。
135.作为一种示例,在本技术实施例中,在构造ack包时可以遵循如下原则,具体实现中,以下原则可以任选一项或者多项:
136.原则一:尽可能多地携带黑(白)名单中数据包的标识;
137.原则二:以接收缓存中左边界数据包(即接收缓存中序列号最小的数据包)为基准,可以优先在ack包中添加黑名单中最旧的数据包的标识,白名单中最新的数据包的标识。
138.最旧的数据包是指,黑名单中序列号最小的数据包。最新的数据包是指,接收到且未被确认接收的数据包中序列号最大的数据包,也就是接收缓存中序列号最大的数据包。
139.原则三:ack包中用于承载黑白名单的存储空间较大时,可以在存储空间填充白名单中最新的k1个数据包的标识,和/或黑名单中最旧的k2个数据包的标识。再比如,基于重要程度为数据包定义优先级,按照优先级在剩余空间添加白名单(例如,乱序包、重传包、队头包优先级高)。也就是说本技术实施例中发送给发送端的白名单中还可以包括所述接收缓存中存在的k3个优先级最高的数据包的标识,其中,数据包的优先级与数据包的重要程度相关。k3的数量与剩余空间相关。
140.其中,乱序包是指,不按包序号的顺序到达接收端的数据包。例如,序列号分别为1,2,3,4共4个数据包,如果到达接收端的次序为1,3,4,2,则2是一个乱序包。
141.重传包是指经过发送端重传且接收端已经接收到的数据包。
142.队头包是指经过接收端已接收到的数据包中序列号最小的数据包。
143.作为一种示例,可以通过一个反馈报文(也称为ack包)将黑名单和白名单反馈给
发送端,也可以通过不同的反馈报文将黑名单和白名单反馈给发送端,比如第一反馈报文中包括所述黑名单,第二反馈报文中包括所述白名单。
144.本技术实施例中可以通过数据包的序列号来指示对应的数据包是否被成功接收,即基于数据包的序列号对黑名单和白名单进行编码。
145.一种示例中,编码方式采用前后边界序列号(sequence,seq)的方式。前边界序列号是指多个序列号连续的数据包的序列号中的最小序列号,后边界序列号是指多个序列号连续的数据包的序列号中的最大序列号。应理解的是,针对1个单独的序列号来说,与其它序列号不相邻,则前边界序列号与后边界序列号相同。
146.具体的,所述更新的接收缓存中存在的数据包中包括n1个序列号连续的数据包,所述白名单中可以包括由所述n1个序列号中最小序列号和最大序列号构成的序列号范围,n1为大于0的整数。所述空缺的数据包中包括n2个序列号连续的数据包,所述黑名单中包括由所述n2个序列号中最小序列号和最大序列号构成的序列号范围,n2为大于0的整数。
147.应理解的是,n1=1时,则所述白名单包括1个序列号。或者n2=1时,则所述黑名单包括1个序列号。例如,白名单包括序列号为4、5、6、10的数据包,黑名单包括序列号为2、3、7、8、9的数据包,则[4,6],[10]表示编码后的白名单,[2,3],[7,9]表示编码后的黑名单。
[0148]
在另一种示例中,编码方式可以采用位图编码的方式。例如,同样白名单包括序列号为4、5、6、10的数据包,黑名单包括序列号为2、3、7、8、9的数据包,则黑名单和白名单可以编入一个ack包反馈给发送端,例如,[001110001],其中1表示白名单中的数据包,0表示黑名单中的数据包。
[0149]
在又一种示例中,编码方式还可以采用带标记位的相对整数编码(flagged relative integer coding)来编码黑名单和白名单。
[0150]
比如,所述黑名单包括以第一数据包的序列号为基准时第二数据包的序列号的偏移量,所述第二数据包为所述空缺的数据包中的任一数据包,所述第一数据包为所述数据接收端已接收到的一个数据包;或者,所述白名单包括以所述第一数据包的序列号为基准时第三数据包的序列号的偏移量,所述第三数据包为所述若干个数据包中的任一个数据包。
[0151]
示例性的,第一数据包可以为更新的接收缓存中的序列号最小的数据包。即以接收缓存中的数据包的序列号的最小值,作为编码基准。
[0152]
所述接收缓存存在的数据包中或者所述接收缓存中空缺的数据包中可能包括n个序列号连续的数据包,一种方式是,不考虑序列号连续的数据包,针对每个数据包对应的偏移量均单独编码。另一种方式是,为了减少编码所占的资源,可以在编码黑白名单时,仅编码n个序列号连续的数据包中的最小序列号和最大序列号。例如,通过连续多个数据包对应的n个序列号中最小序列号的偏移量和最大序列号中的偏移量来指示n个序列号连续的数据包。比如,黑名单中包括n个序列号连续的数据包的标识,则编码ack可以通过n个序列号中最小序列号的序列号偏移量以及n个序列号中最大序列号的序列号偏移量来指示n个序列号连续的数据包,n为大于1的整数。
[0153]
作为一种示例,序列号偏移量可以通过m位的无符号整数来编码。
[0154]
示例1,序列号偏移量占用无符号整数的m位。该示例1可以适用于不考虑序列号连续的数据包的情况,即针对每个数据包均采用单独编码方式。
[0155]
示例2,序列号连续的多个数据包的偏移量仅首尾编码,具体的,针对n个序列号连续的数据包中的最小序列号的偏移量和最大序列号的偏移量可以采用如下编码方式:
[0156]
通过相邻的两个无符号整数来编码最小序列号的偏移量和最大序列号的偏移量。第一无符号整数的高l位为第一数值,所述第一数值指示n个序列号连续的数据包的第一个数据包,所述第二无符号整数的高l位为第二数值,所述第二数值指示n个序列号连续的数据包的第n个数据包,第一无符号整数的低m-l位用于编码所述n个序列号连续的数据包中序列号最小的数据包的序列号偏移量,所述第二无符号整数的低m-l位用于编码所述n个序列号连续的数据包中序列号最大的数据包的序列号偏移量,m和l均为大于1的整数,且m大于l。例如,m=32,l=1。作为一种示例,第一数值为1,第二数值为0。高l位为第一数值的无符号整数指示连续多个数据包的开始的数据包,到下一个无符号整数(高l位为第二数值)指示的数据包为白名单中的连续n个数据包或者为黑名单中的连续n个数据包。第一数值也可以为0,则第二数值为1。
[0157]
在示例2的方式中,指示其它序列号非连续的数据包的无符号整数的高l位也可以为第二数值。当然可以为其它数值。
[0158]
示例3,当黑名单和白名单可以编码同一个ack包中,且每个数据包的序列号偏移量均采用单独编码方式时,m位无符号整数中的高d位用于指示该无符号整数指示白名单包括的数据包或者黑名单包括的数据包。比如,高d位为第三数值时,指示白名单包括的数据包,高d位为第四数值时,指示黑名单包括的数据包。比如,d=1。作为一种示例,第三数值为1,第四数值为0,或者第三数值为0,第四数值为1。
[0159]
示例4,当黑名单和白名单可以编码在同一ack包中,且序列号连续的多个数据包的偏移量仅首尾编码时,m位无符号整数中的高t位中,高t位中d位用于指示该无符号整数指示白名单包括的数据包或者黑名单包括的数据包,l位用于指示无符号整数指示的数据包是否为序列号连续的多个数据包中的起始数据包(第一个数据包)。d+l=t。低m-t位用于编码数据包的序列号偏移量。
[0160]
作为一种示例,确认信息中还包括已确认接收到的数据包的序列号最大的数据包的标识(比如序列号,或者序列号偏移量),换句话是已提交到应用层的数据包序列号的最大值。
[0161]
参见图4所示,示例一种ack包的格式。以无符号整数为32位为例。包头携带32位的seq字段,表示已提交到应用层的数据包序列号的最大值,即最大有序的数据包序号。数据字段携带32位的hol_seq。hol_seq字段表示接收缓存中的数据包的序列号的最小值,以该接收缓存中的数据包的序列号的最小值作为编码基准。同时携带多个32位的delta_seq。序列号偏移量通过offset来表示,offset是1-(2^31-1)之间的无符号整数,offset包含在delta_seq中。
[0162]
参见图5所示,以示例2所示的编码方式,且ack包仅编入黑名单为例示例一种delta_seq的格式。图5中首位通过m1来表示。delta_seq定义为:若delta_seq首位为0,表示hol_seq+offset对应的数据包丢失;若delta_seq首位为1,表示hol_seq+offset对应的包开始,到下一个hol_seq+offset对应的包(delta_seq首位为0)之间的包都丢失。
[0163]
举例说明:接收缓存中数据包到达情况参见图6所示,序列号为2、4、5、9-13的数据包接收端,但序列号3、6-8、14的数据包丢失。ack包中4个delta_seq中携带信息分别为:
0x00000003,0x80000006,0x00000008,0x0000000e。4个delta_seq中携带的信息表明序列号偏移量为3、6-8,14的数据包均丢失。
[0164]
作为一种示例,ack包中还可以包括用于指示当前接收缓存中数据包的比特数,用于后续发送端更新已经发送但未被确认接收的数据包的比特数。比如,参见图3中的rcv.no字段,用于指示当前接收缓存中数据包的比特数。
[0165]
参见图7所示,以示例4所示的编码方式,且ack包中编入黑名单和白名单为例示例一种delta_seq的格式。图7中,delta_seq首位通过m1来表示,第二位通过m2来表示。delta_seq定义为:delta_seq首位用于指示是否为黑名单,比如,若delta_seq首位为1指示黑名单包括的数据包,delta_seq首位为0指示白名单包括的数据包。当然反过来也可以,delta_seq首位为0指示黑名单包括的数据包,delta_seq首位为1指示白名单包括的数据包。delta_seq第二位用于指示是否为连续的数据包的首个数据包,比如,delta_seq第二位为0指示不是连续的数据包的首个数据包,delta_seq第二位为1指示连续的数据包的首个数据包,即delta_seq第二位为0,表示hol_seq+offset对应的数据包丢失;若delta_seq第二位为1,指示hol_seq+offset对应的包开始,到下一个hol_seq+offset(delta_seq首位为0)对应的连续多个数据包。
[0166]
举例说明:以delta_seq首位为1指示黑名单包括的数据包,delta_seq首位为0指示白名单包括的数据包,delta_seq第二位为0指示不是连续的数据包的首个数据包,delta_seq第二位为1指示连续的数据包的首个数据包为例。接收缓存中数据包到达情况参见图5所示,ack包中9个delta_seq中携带信息分别为:0x00000002、0x80000003、0x00000004、0x00000005、0xc0000006,0x80000008,0x40000009,0x0000000d,0x8000000e。9个delta_seq中携带的信息表明序列号偏移量为3、6-8,14的数据包均丢失,序列号为2、4、5、9-13的数据包均成功接收到但未被确认接收。
[0167]
作为一种示例,ack包中还可以包括用于指示当前接收缓存中存储的数据量,用于后续发送端更新已经发送但未被确认接收的数据包的数据量。比如,参见图4中的rcv.no字段,用于指示当前接收缓存中存储的数据量。
[0168]
s204,发送端接收到确认信息。
[0169]
具体的,发送端解析接收到的ack包携带的信息。以图4所示的ack包为例,[seq,hol.seq]字段共同指示黑名单包括的最旧的数据包序列号的区间,rcv.no指示当前接收缓存中乱序包的比特数byte_received(或者称为数据量),用于后续更新已经发送但未确认的数据包的比特数,delta.seq指示黑名单包括的除最旧的数据包以外的其它数据包的序列号偏移量或者白名单包括的数据包的序列号偏移量。发送端对delta.seq进行解码,[hol.seq,delta.seq]字段共同指示一个数据包的序列号,该数据包可以是黑名单中的数据包或者是白名单中的数据包。
[0170]
在一种可能的实现方式中,所述接收端向发送端发送确认信息时,可以通过如下方式实现:
[0171]
所述接收端在满足反馈条件时,向发送端发送确认信息;
[0172]
所述反馈条件包括如下一项或者多项:
[0173]
已接收到的数据包的数量达到第一阈值;
[0174]
已接收到的数据比特数达到第二阈值;或者,
[0175]
达到反馈周期的时间节点。
[0176]
示例性的,确认信息可以通过一个反馈报文发送,反馈报文中携带黑名单和/或白名单。确认信息中包括黑名单和白名单时,确认信息可以通过两个反馈报文发送,比如第一反馈报文包括黑名单,第二反馈报文包括白名单。
[0177]
s205,所述发送端根据确认信息确定接收端未接收到的数据包,并重传接收端未接收到的数据包。
[0178]
具体的,发送端在重传接收端未接收到的数据包时,可以采用冗余重传方式。冗余重传是指,一轮重传某个数据包时,将需要重传的该数据包的副本重复发送多次。一个数据包的副本与该数据包的数据内容相同。
[0179]
参见图8所示,为本技术实施例提供的一种数据传输方法(冗余重传方式)流程示意图。
[0180]
s701,发送端接收来自数据接收端的确认信息,所述确认信息用于指示所述接收端接收来自所述发送端的数据包的情况。
[0181]
一种示例中,确认信息中可以仅包括白名单,白名单承载于一个反馈报文中,即采用现有反馈ack包的方式。
[0182]
另一种示例中,确认信息可以包括黑名单。黑名单承载于一个反馈报文中。
[0183]
又一种示例中,确认信息可以包括黑名单和白名单。黑名单和白名单承载于一个反馈报文中,还可以黑名单承载于第一反馈报文,白名单承载于第二反馈报文。
[0184]
s702,发送端根据所述确认信息,多次向所述数据接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传,其中,所述第一数据包为所述数据发送端应重传的一个数据包。
[0185]
本技术实施例提供的方案,在确定接收到未接收到第一数据包后,一轮重传中,冗余重传多次,且一轮重传中的每两次重传之间,间隔随机的时间,当然,这个随机的时间内数据发送端可以发送其他数据包,或者只是等待随机的时间,这样,不会将重传的数据包集中传输,从而提高重传成功率。
[0186]
在采用冗余重传时,第一种示例中,针对第一数据包,可以每轮重传的重传次数相同。比如第一轮重传第一数据包时,重传2次,并且第一轮重传第一数据包后,接收端未接收到该第一数据包,则第二轮重传第一数据包时,也重传2次。
[0187]
第二种示例中,随着重传轮数的增加,数据包的重传次数对应也增加,即重传次数与重传数据包被重传的轮数正相关。
[0188]
在第二种示例中,重传次数与重传轮数存在关联关系。比如,重传轮数为n时,即第n轮重传某数据包时,则重传2n-1次该数据包的副本。
[0189]
作为一种示例,在采用第二种示例时,在每轮执行重传第一数据包前,可以根据重传次数与重传轮数的关联管理,确定本轮发送所述第一数据包副本的次数。
[0190]
在一种可能的实施方式中,可以将每次重传的多个数据包随机分配到多个不同的时间片内发送,也就是说一轮重传中,每两个所述第一数据包的副本的发送之间间隔随机的时长,在一定程度上可以缓解连续丢包带来的丢包率的提高,进而冗余保证数据丢失快速恢复。基于此,所述发送端在本轮重传过程中,向所述接收端重复发送m次所述第一数据包的副本,可以通过如下方式实现:
[0191]
所述发送端随机生成所述m个所述第一数据包的副本中每两个所述副本之间的发送间隔时间得到m-1个发送间隔时间;
[0192]
所述发送端根据所述随机生成的m-1个发送间隔时间向所述接收端重复发送m次所述第一数据包的副本。
[0193]
作为一种示例,比如一轮重传中,发送端3次第一数据包的副本。第一个副本与第二个副本之间间隔0.1s,第二个副本与第三个副本之间间隔0.25s。3次发送的第一数据包的副本之间并非连续发送,在一定程度上可以降低链路连续丢包带来的重传包再次丢失的概率。
[0194]
应理解的是,若重传后第一数据包确定被接收端接收到,则不需要(即停止)再次重传该第一数据包。
[0195]
作为一种示例,发送端在确定一轮重传中,第一数据包的重传次数时,可以根据冗余重传等级来确定。冗余重传等级跟网络状态相关,换句话说,可以根据当前网络状态,确定冗余重传等级。
[0196]
示例性的,网络状态可以通过丢包率、抖动、排队时延、接收窗口大小等来体现。进而发送端可以根据丢包率、抖动、排队时延、接收窗口大小中的至少一项确定冗余重传等级,即确定冗余重传次数与重传轮数的关联关系,不同的冗余重传等级对应的关联关系不同。丢包率、抖动、排队时延、接收窗口大小等可以存在多种组合方式,如下仅示例其中几种。
[0197]
一个可能的示例中,发送端可以根据传输过程中检测到的丢包率大小来确定冗余重传等级。例如,丢包率超过5%,确定为高冗余级别;丢包率在1%-5%之间,确定为中冗余级别;丢包率小于1%,确定为低冗余级别。
[0198]
另一个可能的示例中,发送端可以根据传输过程中检测到的数据包排队时延大小来确定冗余重传等级。例如,排队时延超过15倍的往返时延(round trip time,rtt),可以确定为高冗余级别;排队时延超过5倍rtt但不超过15倍rtt,确定为中冗余级别;排队时延超过不5倍rtt,确定为低冗余级别。
[0199]
又一种可能的示例中,发送端根据传输过程中检测到的接收窗口大小来确定冗余重传等级。例如,接收窗口大小不足总窗口大小的5%,确定为高冗余级别;接收窗口大小在总窗口大小的5%-15%之间,确定为中冗余级别;接收窗口大小在总窗口的15%以上,确定为低冗余级别。
[0200]
再一种示例中,发送端根据传输过程中检测到的丢包率大小和传输过程中检测到的数据包排队时延大小来确定冗余重传等级。例如,丢包率超过5%且排队时延超过15倍的rtt,确定为高冗余级别,丢包率在1%-5%之间和/或排队时延超过5倍rtt但不超过15倍rtt,确定为中冗余级别,其它情况确定为低冗余级别。
[0201]
如下示例一种冗余重传级别所对应的冗余重传次数与重传轮数的关联关系,以分为三个冗余重传级别为例,当然还可以分为两级,或者更多级别,本技术实施例对此不作具体限定。
[0202]
低冗余级别:第n轮重传一个数据包,发n次该数据包的副本;
[0203]
中冗余级别:第n轮重传一个数据包,发2n-1次该数据包的副本;
[0204]
高冗余级别:第n轮重传一个数据包,发3n-2次该数据包的副本。
[0205]
示例性的,不同冗余重传等级可以保证第一轮传输不冗余,即第一轮传输时发送一次数据包。
[0206]
比如,第3轮重传某个数据包,若根据网络状态确定高冗余级别,则第3轮重传时,可以重传7次该数据包的副本,若根据网络状态确定为低冗余级别,则第3轮重传时可以重传3次该数据包的副本。
[0207]
在一种可能的实施方式中,本技术实施例中还可以根据网络状态确定是否进行冗余重传。本技术实施例中可以基于丢包率、抖动、排队时延、接收窗口大小中的至少一项来确定是否进行冗余重传。例如,根据传输过程中检测到的丢包率大小来确定是否冗余重传,比如丢包率小于1%,则不执行冗余重传,当丢包率大于或者等于1%时,则执行冗余重传。
[0208]
示例性的,本技术实施例中,可以建立重传列表,比如称为redunlist,在确定某个数据包需要重传时,可以将需要重传的数据包(简称重传包)的标识(例如序列号)添加在重传列表中。在随机生成该重传包的m-1个发送间隔时间时,可以将m-1个发送间隔时间添加在重传列表中。根据重传列表对该数据包进行重传。
[0209]
参见图9所示,以redunlist为例,对冗余重传方式进行详细说明。
[0210]
s801,第一轮发送待发送数据包,且确定所述接收端未接收到所述待发送数据包。
[0211]
s802,确定是否针对所述待发送数据包执行冗余重传。若是,执行s803,若否,执行s808。
[0212]
s803,将所述待发送数据包的序列号添加至重传列表,并确定本轮重传中,待发送数据包的重传次数为m次。
[0213]
s804,随机生成所述m次重传所述待发送数据包的副本中每两个副本间的发送间隔时间得到m-1个发送间隔时间并添加至重传列表。
[0214]
s805,根据重传列表监测到达发送时间时,从发送缓存中获取所述待发送数据包的副本并向接收端发送。
[0215]
s806,监测重传列表是否为空,若是,执行s805,若否,执行s807。
[0216]
s807,停止执行。
[0217]
s808,重传一次所述待发送数据包。
[0218]
现有技术是发送端通过ack确定要重传包,且重传包在一轮重传中只重传一次,重传包一旦丢失,需等待下一次ack指示下一轮的重传,接收端只有在下一轮重传时才可能接收到重传包,导致加重拥塞程度。通过上述设计,也就是在重传数据包时,每轮重传时,将重传包冗余重传多次,并且每两次重传的发送之间有不固定的时间间隔,考虑了由于网络不稳定等造成重传包丢失,ack丢失等情况,不是单纯的依靠ack包周期性指示重传包来解决上述问题,从而可以提高接收端接收到重传数据包的概率,提高重传成功率。
[0219]
通告窗口(advertised window,awnd)为接收端接收缓存的剩余空间,单位为比特数。接收端通过向发送端反馈通告窗口,来限制发送端往网络中发送的数据量,防止接收端缓存被填满。例如,发送端拥塞窗口(cwnd)为10mb,但通告窗口为6mb,则在现有技术中发送端只能取两者的较小值,即最多发送6mb的数据到网络中。
[0220]
在丢包恢复阶段,链路基本是空闲的,为了提高带宽利用率,在丢包恢复阶段,可以不受awnd的限制,本技术实施例可以采用超额发送数据包的方式。由于接收缓存受限,原本发送端只有在收到ack包后才能发送下一个数据包,但是如果超额发送重传包,且重传包
成功被接收端接收,则可以释放大量接收缓存,缓解拥塞。而超额发送重传包,要尽可能保证重传包被接收端成功接收到,如果重传再次丢包时,提前超额发送重传包会使得网络传输更加恶化。
[0221]
基于此,在采用冗余重传方式的基础上,即更大概率保证重传包被接收端接收到的情况下,本技术实施例中可以采用投机主义传输,一种方式是,在链路恢复阶段,允许发送的数据量不受限通告窗口和拥塞窗口,采用随机冗余重传方式向发送端发送重传包。在采用冗余重传的方式,使得重传的数据包有最大概率能够被接收端接收的情况,再采用投机主义的方式,在一定程度上可以释放部分接收缓存,缓解拥塞。另一种方式是:在确定已经向所述接收端发送且接收端未接收到数据包的比特数(第一数据量)小于拥塞窗口(cwnd),则执行向接收端发送数据包,即从发送缓存中取数据包并向接收端发送。拥塞窗口一般与网络速度的拥塞程度和处理数据量相关。
[0222]
确认信息中还可以包括所述接收端的接收缓存中存储的数据量,或者白名单,所述白名单指示所述接收缓存中存储的数据包。从而,所述发送端可以根据已经向所述接收端发送的数据量以及第二数据量确定所述第一数据量,比如已经向所述接收端发送的数据量与第二数据量的差确定为第一数据量,所述第二数据量为所述接收缓存中存储的数据量或者根据所述白名单确定的所述接收缓存中数据包的数据量。从而所述发送端根据所述第一反馈报文,多次向所述接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传时,可以通过如下方式实现:
[0223]
发送端根据所述第一反馈报文确定所述第一数据包,当第一数据量满足小于所述发送端的拥塞窗口时,所述发送端多次向所述接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传。
[0224]
相反,当第一数据量大于或者等于cwnd,禁止向发送端发送第一数据包的副本。也就是说,已经发送的且未被接收端接收到的数据包的比特数已经超过拥塞窗口,表明网络状态恶化,丢包率较高,则禁止向接收端发送数据。现有方案中,重传数据包时,会根据已向接收端发送且接收端未确认接收的数据包的数量来与通告窗口和拥塞窗口的最小值作比较。而本技术实施例根据的是已向接收端发送且接收端未接收到的数据包的数量与通告窗口作比较来确定执行重传。已向接收端发送且接收端未确认接收的数据包,有些已经被接收端到,存储在接收缓存中,而本技术中确定的第一数据量将已经存储在接收缓存中的这部分数据量也排除在外,再与拥塞窗口比较,因此,较现有来说,增大了允许发送的数据量。因此,本技术实施例中,在采用冗余重传的方式,使得重传的数据包有最大概率能够被接收端接收的情况,再采用该第二种投机主义的方式,在一定程度上可以释放部分接收缓存,缓解拥塞。
[0225]
示例性的,第一数据量可以通过如下方式确定:
[0226]
所述发送端接收所述接收端发送的所述第二数据量;
[0227]
所述发送端根据所述第二数据量和已经向所述发送端发送的数据包的比特数,确定第一数据量(已经向所述接收端发送且未被所述接收端接收到的数据包的数据量)。
[0228]
比如,new_inflight_size表示第一数据量,byte_received表示第二数据量;则new_inflight_size=old_inflight_size-byte_received。old_inflight_size表示根据上一次确认的第一数据量更新后的第一数据量。具体的,每次在确定第一数据量后,每发出
一个数据包或者收到一个数据包的确认后或者确定某个数据包丢失时,都会更新该第一数据量。比如每发出一个数据包后,将第一数据量与该数据包的比特数的和作为更新后的第一数据量。
[0229]
结合图10对投机主义传输进行说明。
[0230]
s901,确定是否属于丢包恢复阶段。若是,执行s902,若否,执行s905。
[0231]
示例性的,网络中存在数据包丢失(即存在丢包事件),到这些丢失的包恢复之前,确定是丢包恢复阶段。
[0232]
s902,根据byte_received更新new_inflight_size=old_inflight_size-byte_received。
[0233]
其中,每次接收到确认信息,则根据byte_received更新new_inflight_size。
[0234]
比如,发送端向接收端发送100比特,则new_inflight_size此时为100。确定new_inflight_size后,又向接收端发送20比特,new_inflight_size变为old_inflight_size,old_inflight_size=120,接收到发送端发送的ack包,根据ack包确定接收端已确认接收到数据包的比特数,比如根据ack包中seq字段确定接收端已确认接收到数据包的比特数,例如为20,则old_inflight_size此时应更新为120-20=100。另外ack包中rcv.no字段指示byte_received等于60,基于此,确定的new_inflight_size为100-60=40。在执行s903后,则将new_inflight_size作为old_inflight_size。
[0235]
s903,new_inflight_size《cwnd?,若是,执行s904,若否,执行s905。
[0236]
s904,从发送缓存中获取数据包并向接收端发送。执行s903。
[0237]
s905,禁止发送数据包。
[0238]
示例性的,发送端在接收端接收到发送的确认信息时,以ack包为例,ack包中包括rcv.no字段,该rcv.no字段用于指示接收缓存中的数据包的比特数,即接收端已接收到且未确认接收的数据包的第二数据量,从而发送端根据该第二数据量可以确定第一数据量。
[0239]
基于与上述方法实施例同样的发明构思,本技术实施例还提供一种数据传输装置,该数据传输模块可以应用于接收端。该装置具体可以是处理器、芯片、芯片系统,或是用于接收的一个功能模块等。参见图11所示,该数据传输装置可以包括接收模块1001,更新模块1002以及发送模块1003。
[0240]
接收模块1001接收来自发送端的多个数据包,更新模块1002基于所述多个数据包更新所述数据接收端的接收缓存;发送模块1003根据更新的接收缓存,向所述发送端发送确认信息。其中,所述确认信息中包括黑名单,或者包括黑名单和白名单,所述黑名单用于指示所述更新的接收缓存中空缺的数据包,所述空缺的数据包为所述数据发送端已发送且所述数据接收端未接收的数据包,所述白名单用于指示所述数据接收端已接收的若干个数据包,所述若干个数据包中包括所述多个数据包。
[0241]
示例性的,本实施例中接收模块1001、更新模块1002的功能可以由图2中的接收处理模块201来执行。
[0242]
示例性的,确认信息中的包括的黑名单,或者包括黑名单和白名单,可以为经过编码后的黑名单和白名单。在确认黑白名单和编码黑白名单时,可以由图2中丢包检测模块202、编码模块203来执行。确认信息可以是经过图2所示的构造模块204构造的ack。
[0243]
在一种可能的实现方式中,所述白名单包括所述更新的接收缓存中序列号最大的
数据包的标识,所述黑名单包括所述空缺的数据包中序列号最小的数据包的标识。
[0244]
在一种可能的实现方式中,所述白名单还包括所述更新后的接收缓存中优先级较高的数据包的标识,其中,数据包的优先级与数据包的重要程度相关。
[0245]
在一种可能的实现方式,所述发送模块1003,具体用于在满足反馈条件时,向所述数据发送端发送所述确认信息;
[0246]
所述反馈条件包括如下一项或者多项:已接收到的数据包的数量达到第一阈值;
[0247]
已接收到的数据比特数达到第二阈值;或者,
[0248]
达到反馈周期的时间节点。
[0249]
一种示例中,发送模块1003的功能可以由图2中的反馈控制模块205来实现。另一种示例中,反馈控制模块205用于确定是否满足反馈条件,当满足反馈条件时,指示发送模块1003发送确认信息。
[0250]
在一种可能的实现方式中,所述黑名单包括以第一数据包的序列号为基准时第二数据包的序列号的偏移量,所述第二数据包为所述空缺的数据包中的任一数据包,所述第一数据包为所述数据接收端已接收到的一个数据包;或者,
[0251]
所述白名单包括以所述第一数据包的序列号为基准时第三数据包的序列号的偏移量,所述第三数据包为所述若干个数据包中的任一个数据包。
[0252]
在一种可能的实现方式中,所述空缺的数据包中包括n个序列号连续的数据包,所述黑名单还包括n个序列号连续的数据包中序列号最小的数据包的序列号偏移量以及序列号最大的数据包的序列号偏移量;或者,所述若干个数据包中包括n个序列号连续的数据包,所述白名单还包括n个序列号连续的数据包中序列号最小的数据包的序列号偏移量以及序列号最大的数据包的序列号偏移量,n为大于1的整数。
[0253]
在一种可能的实现方式中,所述序列号偏移量通过一个m位无符号整数来编码,第一无符号整数的高l位为第一数值,所述第一数值指示n个序列号连续的数据包的第一个数据包,所述第二无符号整数的高l位为第二数值,所述第二数值指示n个序列号连续的数据包的第n个数据包,第一无符号整数的低m-l位用于编码所述序列号最小的数据包的序列号偏移量,所述第二无符号整数的低m-l位用于编码所述序列号最大的数据包的序列号偏移量,m和l均为大于1的整数,且m大于l。
[0254]
在一种可能的实现方式中,所述确认信息中还包括已确认接收到的数据包的序列号最大的数据包的标识。
[0255]
在一种可能的实现方式中,所述确认信息中还包括当前接收缓存中存储的数据量。
[0256]
在一种可能的实现方式中,所述黑名单和所述白名单采用位图编码方式编码。
[0257]
在一种可能的实现方式中,所述空缺的数据包中包括n1个序列号连续的数据包,所述黑名单中包括由所述n1个序列号中最小序列号和最大序列号构成的序列号范围,n1为大于0的整数;或者,
[0258]
所述若干个数据包中包括n2个序列号连续的数据包,所述白名单中包括由所述n2个序列号中最小序列号和最大序列号构成的序列号范围,n2为大于0的整数。
[0259]
在一种可能的实现方式中,所述确认信息中包括黑名单和白名单,所述发送模块1003具体用于:向数据发送端发送第一反馈报文和第二反馈报文,所述第一反馈报文中包
括所述黑名单,所述第二反馈报文中包括所述白名单。
[0260]
基于与上述方法实施例同样的发明构思,本技术实施例还提供一种数据传输装置,该数据传输模块可以应用于发送端。该装置具体可以是处理器、芯片、芯片系统,或是用于接收的一个功能模块等。参见图12所示,该数据传输装置包括接收模块1101,重传模块1102。
[0261]
接收模块1101接收到的来自数据接收端的第一反馈报文后,重传模块1102可以根据第一反馈报文中反馈所述接收端接收的来自所述数据发送端的数据包情况确定第一数据包为应重传的数据包时,执行多次向所述数据接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传,每两个所述副本的发送之间间隔随机的时长。
[0262]
一种示例中,接收模块1101的功能可以由图2中的解析模块206来实现,重传模块1102的功能可以由图2中的重传模块1102来执行。
[0263]
另一种示例中,接收模块1101接收到反馈报文后,由解析模块206来执行具体的从反馈报文中解析得到黑白名单的功能,然后将黑白名单发给重传模块1102,由重传模块1102基于黑白名单执行重传。
[0264]
又一种示例中,接收模块1101接收到反馈报文后,由重传模块1102执行具体的从反馈报文中解析得到黑白名单的功能,并基于黑白名单执行重传。
[0265]
示例性的,重传模块1102完成一轮重传后,根据接收端发送的第二反馈报文,再次确定所述第一数据包需要重传;从而重传模块1102多次向所述数据接收端发送所述第一数据包的副本以完成对所述第一数据包的又一轮重传,其中,所述又一轮对所述第一数据包的重传中,每两个副本的发送也间隔随机的时长,且所述又一轮重传中重传的所述第一数据包的副本的次数可以大于或者等于所述一轮重传的所述第一数据包的副本的次数。
[0266]
示例性的,所述第一反馈报文包括所述接收端的接收缓存中存储的数据量,或者白名单,所述白名单指示所述接收缓存中存储的数据包。接收模块1101可以将第一反馈报文包括所述接收端的接收缓存中存储的数据量或者白名单发送给重传模块1102,从而重传模块1102可以根据接收缓存中存储的数据量或者白名单确定第一数据量,具体确定方式可以参见前面的描述,此处不再赘述。重传模块1102在第一数据量满足小于所述数据发送端的拥塞窗口,再执行多次向所述数据接收端发送第一数据包的副本以完成对所述第一数据包的一轮重传。一种示例中,重传模块1102在第一数据量大于或者等于拥塞窗口时,可以不执行向所述接收端端发送第一数据包的副本。
[0267]
应理解的是,本技术实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本技术各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
[0268]
基于相同的构思,如图13所示,为本技术提供的一种装置1300。示例性地,装置1200可以是芯片或芯片系统。可选的,在本技术实施例中芯片系统可以由芯片构成,也可以包含芯片和其他分立器件。装置1300可以包括至少一个处理器1310,装置1300还可以包括至少一个存储器1320,用于存储程序指令和/或数据。存储器1320和处理器1310耦合。本技术实施例中的耦合是装置、单元或模块之间的间接耦合或通信连接,可以是电性,机械或其它的形式,用于装置、单元或模块之间的信息交互。处理器1310可能和存储器1320协同操
作。处理器1310可能执行存储器1320中存储的程序指令。可选的,所述至少一个存储器1320中的至少一个可以包括于处理器1310中。
[0269]
装置1300中还可以包括通信接口1330,装置1300可以通过通信接口1330和其它设备进行信息交互。通信接口1330可以是电路、总线、收发器或者其它任意可以用于进行信息交互的装置。
[0270]
在一种可能的实施方式中,该装置1300可以应用于接收端,具体装置1300可以是能够支持接收端实现上述涉及的任一实施例中接收端的功能的装置。存储器1320保存实现上述任一实施例中的接收端的功能的必要计算机程序指令和/或数据。所述处理器1310可执行所述存储器1320存储的计算机程序指令,完成上述任一实施例中接收端执行的方法。应用于接收端时,图11所示的接收模块1001,更新模块1002以及发送模块1003的功能均可以由处理器1720实现。另外,图2中所述的接收处理模块201、丢包检测模块202、编码模块203、构造模块204,反馈控制模块205的功能也可以由处理器1702实现。
[0271]
在一种可能的实施方式中,该装置1300可以应用于发送端,具体装置1300可以是能够支持发送端实现上述任一实施例中发送端的功能的装置。存储器1320保存实现上述任一实施例中的发送端的功能的必要计算机程序指令和/或数据。所述处理器1310可执行所述存储器1320存储的计算机程序指令,完成上述任一实施例中发送端执行的方法。应用于发送端时,图12所示的接收模块1101,重传模块1102的功能均可以由处理器1720实现。另外,图2中所述的解析模块206,重传模块207也可以由处理器1702实现。
[0272]
本技术实施例中不限定上述通信接口1330、处理器1310以及存储器1320之间的具体连接介质。本技术实施例在图13中以存储器1320、处理器1310以及通信接口1330之间通过总线连接,总线在图13中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0273]
在本技术实施例中,处理器可以是通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
[0274]
在本技术实施例中,存储器可以是非易失性存储器,比如硬盘(hard disk drive,hdd)或固态硬盘(solid-state drive,ssd)等,还可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,ram)。存储器还可以是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。本技术实施例中的存储器还可以是电路或者其它任意能够实现存储功能的装置,用于存储程序指令和/或数据。
[0275]
本技术采用的是黑、白名单相结合的冗余反馈方式,黑名单提高反向丢包应对能力,白名单减少不必要的重传,保证反向路径上丢包情况下的高性能。本技术可以采用的是带标记位的相对整数编码的方式。采用(起始序号,结束序号)标记的编码方式,编码简单,但占用空间较大;采用位图标记的编码方式,节省大量空间,但丢包较少时,效率低下;而相对整数编码的方式,可以兼具两者的优点,不仅编码简单,而且占用空间较少。而带标记位
的相对整数编码,则进一步降低了空间的占用。本技术发送端可以采用随机冗余重传的方式,从而在保证重传大概率能成功的前提下,可以进行投机主义传输,提升重传成功率。本技术实施例还可以采用收发双方协作的方式,即接收端判断丢包,生成黑白名单冗余反馈给发送端,发送端采用随机冗余重传的方式,从而提高传输性能。
[0276]
申请人对本技术实施例提供的方案在如下两种场景下进行了测试:
[0277]
场景一:在大bdp的有损网络,瓶颈链路容量为1gbps,往返时延为300ms,丢包率为3%。发送/接收缓存设置成256mb。分别通过现有的tcp cubic、tcp bbr、fillp以及本技术提供的方案,从发送端往接收端打流,每种协议运行100次,评估有效吞吐和最大重传次数的平均值,得到的测试结果参见图14所示。测试结果表明:通过本技术实施例提供的方案,可以将数据包最大重传次数降低43%,即所有数据包最多重传2.3次后将送达接收端(原来需要4次),从而减少接收缓存中队头包等待的现象,可以提高16%的有效吞吐。
[0278]
场景二、大bdp的有损网络,瓶颈链路容量为1gbps,往返时延为120ms,正向数据包的丢包率为3%。反向ack包的丢包率分别为0.2%,1%,5%,10%。发送/接收缓存设置成256mb。分别通过tcp bbr、fillp以及部署了本技术提供的方案,从发送端往接收端打流,每种协议运行100次,评估有效吞吐和最大重传次数的平均值,得到的测试结果参见图15所示。测试结果表明:本技术在反向丢包严重时(》5%),相较其它两种,有效吞吐可以提高7-20倍以上。
[0279]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0280]
本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0281]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0282]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0283]
显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。

技术特征:


1.一种数据传输方法,其特征在于,包括:接收端接收来自发送端的多个包;所述接收端基于所述多个包更新所述接收端的接收缓存;所述接收端根据所述更新的接收缓存,向所述发送端发送确认信息;其中,所述确认信息中包括黑名单,所述黑名单用于指示所述更新的接收缓存中空缺的数据包,所述空缺的数据包为所述数据发送端已发送且所述数据接收端未接收的数据包。2.如权利要求1所述的方法,其特征在于,所述黑名单包括所述空缺的包中序列号最小的包的标识。3.如权利要求1或2所述的方法,其特征在于,所述接收端向发送端发送确认信息,包括:所述接收端在满足反馈条件时,向所述发送端发送所述确认信息;所述反馈条件包括如下一项或者多项:已接收到的包的数量达到第一阈值;已接收到的数据比特数达到第二阈值;或者,达到反馈周期的时间节点。4.如权利要求1-3任一项所述的方法,其特征在于,所述黑名单包括以第一包的序列号为基准时第二包的序列号的偏移量,所述第二包为所述空缺的包中的任一包,所述第一包为所述接收端已接收到的一个包。5.如权利要求4所述的方法,其特征在于,所述空缺的包中包括n个序列号连续的包,所述黑名单还包括n个序列号连续的包中序列号最小的包的序列号偏移量以及序列号最大的包的序列号偏移量。6.如权利要求7所述的方法,其特征在于,所述序列号偏移量通过一个m位无符号整数来编码,第一无符号整数的高l位为第一数值,所述第一数值指示n个序列号连续的包的第一个包,所述第二无符号整数的高l位为第二数值,所述第二数值指示n个序列号连续的包的第n个包,第一无符号整数的低m-l位用于编码所述序列号最小的包的序列号偏移量,所述第二无符号整数的低m-l位用于编码所述序列号最大的包的序列号偏移量,m和l均为大于1的整数,且m大于l。7.如权利要求1-6任一所述的方法,其特征在于,所述确认信息中还包括已确认接收到的包的序列号最大的包的标识。8.如权利要求1-7任一所述的方法,其特征在于,所述确认信息中还包括当前接收缓存中存储的数据量。9.如权利要求1-3任一项所述的方法,其特征在于,所述黑名单和所述白名单采用位图编码方式编码。10.如权利要求1-4任一项所述的方法,其特征在于,所述空缺的包中包括n1个序列号连续的包,所述黑名单中包括由所述n1个序列号中最小序列号和最大序列号构成的序列号范围,n1为大于0的整数数。11.一种数据传输方法,其特征在于,包括:发送端接收来自接收端的第一反馈报文,所述第一反馈报文用于反馈所述接收端接收
来自所述发送端的包的情况;发送端根据所述第一反馈报文,多次向所述接收端发送第一包的副本以完成对所述第一包的一轮重传,其中,所述第一包为所述发送端应重传的一个包,每两个所述副本的发送之间间隔随机的时长。12.如权利要求11所述的方法,其特征在于,所述方法还包括:所述发送端根据所述接收端发送的第二反馈报文,再次确定所述第一包需要重传;所述发送端多次向所述接收端发送所述第一包的副本以完成对所述第一包的又一轮重传,其中,所述又一轮对所述第一包的重传中,每两个副本的发送也间隔随机的时长,且所述又一轮重传中重传的所述第一包的副本的次数大于所述一轮重传的所述第一包的副本的次数。13.如权利要求11所述的方法,其特征在于,所述第一反馈报文包括黑名单,所述黑名单用于指示所述更新的接收缓存中空缺的包,所述空缺的包为所述发送端已发送且所述接收端未接收的包。14.如权利要求11-13任一项所述的方法,其特征在于,所述第一包本轮被重传的次数,与所述第一包被重传的轮数正相关。15.如权利要求11-14任一项所述的方法,其特征在于,所述第一反馈报文包括所述接收端的接收缓存中存储的数据量,或者白名单,所述白名单指示所述接收缓存中存储的包,所述发送端根据所述第一反馈报文,多次向所述接收端发送第一包的副本以完成对所述第一包的一轮重传,包括:所述发送端根据所述第一反馈报文确定所述第一包,以及第一数据量满足小于所述发送端的拥塞窗口,所述第一数据量为所述发送端根据已经向所述接收端发送的数据量以及第二数据量确定的数据量,所述第二数据量为所述接收缓存中存储的数据量或者根据所述白名单确定的所述接收缓存中包的数据量;所述发送端多次向所述接收端发送第一包的副本以完成对所述第一包的一轮重传。16.一种数据传输装置,其特征在于,包括:接收模块,用于接收来自发送端的多个包;更新模块,用于基于所述多个包更新所述接收端的接收缓存;发送模块,用于接收端根据所述更新的接收缓存,向所述发送端发送确认信息;其中,所述确认信息中包括黑名单,所述黑名单用于指示所述更新的接收缓存中空缺的包,所述空缺的包为所述发送端已发送且所述接收端未接收的包,所述若干个包中包括所述多个包。17.如权利要求16所述的装置,其特征在于,所述黑名单包括所述空缺的包中序列号最小的包的标识。18.如权利要求16-17任一项所述的装置,其特征在于,所述发送模块,具体用于在满足反馈条件时,向所述发送端发送所述确认信息;所述反馈条件包括如下一项或者多项:已接收到的包的数量达到第一阈值;已接收到的数据比特数达到第二阈值;或者,达到反馈周期的时间节点。
19.如权利要求16-18任一项所述的装置,其特征在于,所述黑名单包括以第一包的序列号为基准时第二包的序列号的偏移量,所述第二包为所述空缺的包中的任一包,所述第一包为所述接收端已接收到的一个包。20.如权利要求19所述的装置,其特征在于,所述空缺的包中包括n个序列号连续的包,所述黑名单还包括n个序列号连续的包中序列号最小的包的序列号偏移量以及序列号最大的包的序列号偏移量。21.如权利要求20所述的装置,其特征在于,所述序列号偏移量通过一个m位无符号整数来编码,第一无符号整数的高l位为第一数值,所述第一数值指示n个序列号连续的包的第一个包,所述第二无符号整数的高l位为第二数值,所述第二数值指示n个序列号连续的包的第n个包,第一无符号整数的低m-l位用于编码所述序列号最小的包的序列号偏移量,所述第二无符号整数的低m-l位用于编码所述序列号最大的包的序列号偏移量,m和l均为大于1的整数,且m大于l。22.如权利要求16-21任一所述的装置,其特征在于,所述确认信息中还包括已确认接收到的包的序列号最大的包的标识。23.如权利要求16-22任一所述的装置,其特征在于,所述确认信息中还包括当前接收缓存中存储的数据量。24.如权利要求16-23任一项所述的装置,其特征在于,所述黑名单采用位图编码方式编码。25.如权利要求16-24任一项所述的装置,其特征在于,所述空缺的包中包括n1个序列号连续的包,所述黑名单中包括由所述n1个序列号中最小序列号和最大序列号构成的序列号范围,n1为大于0的整数。26.一种数据传输装置,其特征在于,包括:接收模块,用于接收来自接收端的第一反馈报文,所述第一反馈报文用于反馈所述接收端接收来自所述发送端的包的情况;重传模块,用于根据所述第一反馈报文,多次向所述接收端发送第一包的副本以完成对所述第一包的一轮重传,其中,所述第一包为所述发送端应重传的一个包,每两个所述副本的发送之间间隔随机的时长。27.如权利要求26所述的装置,其特征在于,所述重传模块还用于根据所述接收端发送的第二反馈报文,再次确定所述第一包需要重传;多次向所述接收端发送所述第一包的副本以完成对所述第一包的又一轮重传,其中,所述又一轮对所述第一包的重传中,每两个副本的发送也间隔随机的时长,且所述又一轮重传中重传的所述第一包的副本的次数大于所述一轮重传的所述第一包的副本的次数。28.如权利要求26所述的装置,其特征在于,所述第一反馈报文包括黑名单,所述黑名单用于指示所述更新的接收缓存中空缺的包,所述空缺的包为所述发送端已发送且所述接收端未接收的包。29.如权利要求26-28任一项所述的装置,其特征在于,所述第一包本轮被重传的次数,与所述第一包被重传的轮数正相关。30.如权利要求26-29任一项所述的装置,其特征在于,所述第一反馈报文包括所述接收端的接收缓存中存储的数据量,或者白名单,所述白名单指示所述接收缓存中存储的包,
所述重传模块,具体用于:根据所述第一反馈报文确定所述第一包,以及第一数据量满足小于所述数据发送端的拥塞窗口,所述第一数据量为所述数据发送端根据已经向所述数据接收端发送的数据量以及第二数据量确定的数据量,所述第二数据量为所述接收缓存中存储的数据量或者根据所述白名单确定的所述接收缓存中包的数据量;多次向所述数据接收端发送第一包的副本以完成对所述第一包的一轮重传。31.一种数据传输装置,其特征在于,所述装置应用于数据的接收端,包括:通信接口、处理器和存储器;所述存储器用于存储软件程序,所述处理器用于读取所述存储器中存储的软件程序,通过所述通信接口收发包,并实现权利要求1至10任一项所述的方法。32.一种数据传输装置,其特征在于,所述装置应用于数据的发送端,包括:通信接口、处理器和存储器;所述存储器用于存储软件程序,所述处理器用于读取所述存储器中存储的软件程序,通过所述通信接口收发包,并实现权利要求11至15任一项所述的方法。33.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储软件程序,所述软件程序在被一个或多个处理器读取并执行时可实现权利要求1~15任一项所述的方法。

技术总结


本申请公开了一种数据传输方法及装置,用以提高数据传输的性能。接收端在向发送端发送的确认信息中包括黑名单,或者包括黑名单和白名单,也就是说接收端每次都会将多个未接收到的数据包(例如可能造成行头阻塞的包)的信息及时的通知给发送端,从而发送端能够及时向接收端重传这些数据包。另外,接收端向发送端指示白名单,使得发送端能够及时获知接收端新接收到的数据包,在一定程度上避免发送端由于无效的重传导致的带宽浪费。发送端在每轮重传时,对于一个重传包重传多次,并且重传的时间不连续,在一定程度上避免连续丢包导致的重传失败,从而可以提高重传成功率。从而可以提高重传成功率。从而可以提高重传成功率。


技术研发人员:

李彤 郑凯 粟荡 陈鑫平

受保护的技术使用者:

华为技术有限公司

技术研发日:

2019.03.25

技术公布日:

2022/11/25

本文发布于:2024-09-20 15:41:04,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/10893.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:所述   数据包   序列号   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议