显式丢包通告机制



1.本技术涉及数据传输技术领域,特别是涉及一种显式丢包通告机制。


背景技术:



2.随着协议栈的优化工作将服务器上数据包的处理延时降低到几微秒甚至几百纳秒,网络中传输延时也要求微秒级延迟。
3.当数据中心内部的服务器与数据中心外部的服务器通信时,以数据中心外部的服务器为发送端、数据中心内部的服务器为接收端为例,当发送端向接收端发送数据包时,发送端会开启一个计时器,当接收端接收到发送端发送的数据包后,会向发送端发送确认消息,但是,若发送端在预设的时长内没有接收到接收端的确认消息,会触发超时重传机制,即确定该数据包被丢弃,接收端未接收到该数据包,发送端会重新向接收端发送该数据包。
4.然而,现有技术中依赖超时计时器触发重传操作的方式,会产生较高的网络延迟。


技术实现要素:



5.基于此,有必要针对上述技术问题,提供一种显式丢包通告机制,能够消除超时计时器触发重传操作的依赖,保证了即使发生丢包也能保持较低的网络延迟。
6.第一方面,本技术提供了一种丢包通知方法,该方法包括:
7.获取发送端发送的数据包的入队状态;入队状态表示是否能够加入数据包队列的状态;
8.若数据包的入队状态为未入队,确定数据包为丢弃数据包;
9.向发送端发送丢弃数据包的丢包通知,以指示发送端重新发送丢弃数据包。
10.在其中一个实施例中,向发送端发送丢弃数据包的丢包通知,包括:
11.获取丢弃数据包在所属的目标数据流中的丢弃排序;
12.根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知;参考数据包表示发送时刻在丢弃数据包之后的数据包。
13.在其中一个实施例中,获取丢弃数据包在所属的目标数据流中的丢弃排序,包括:
14.检测丢弃表中是否存在目标数据流的标识;丢弃表用于存储当前已被丢弃的数据包的结构信息,结构信息中包括对应数据包所属数据流的标识;
15.若丢弃表中不存在目标数据流的标识,则确定丢弃数据包在目标数据流中的丢弃排序为首包;
16.若丢弃表中存在目标数据流的标识,则确定丢弃数据包在目标数据流中的丢弃排序为非首包。
17.在其中一个实施例中,根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知,包括:
18.若丢弃数据包在目标数据流中的丢弃排序为首包,则根据丢弃数据包的结构信息,生成丢弃数据包的丢包通知。
19.在其中一个实施例中,则根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知,包括:
20.若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包的入队状态为入队,则在丢弃表中获取目标数据流中所有非首包的数据包的结构信息;
21.根据所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知。
22.在其中一个实施例中,该方法还包括:
23.在生成丢弃数据包的丢包通知后,清空丢弃表中属于目标数据流中的所有数据包的存储记录。
24.在其中一个实施例中,根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知,包括:
25.若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包为重新发送的目标数据流中的首包,且参考数据包的入队状态为未入队,则在丢弃表中获取目标数据流中所有非首包的数据包的结构信息,以及获取首包的结构信息;
26.根据所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知,以及根据首包的结构信息生成首包的丢包通知。
27.在其中一个实施例中,该方法还包括:
28.在生成丢弃数据包的丢包通知后,清除丢弃表中属于目标数据流中所有非首包的数据包的存储记录。
29.在其中一个实施例中,该方法还包括:
30.将丢弃数据包的结构信息存储至丢弃表中。
31.在其中一个实施例中,获取发送端发送的数据包的入队状态,包括:
32.获取数据包队列的可用内存和数据包的容量;
33.若数据包队列的可用内存大于或等于数据包的容量,则确定数据包的入队状态为入队;
34.若数据包队列的可用内存小于数据包的容量,则确定数据包的入队状态为未入队。
35.第二方面,本技术实施例提供一种丢包通知装置,该装置包括:
36.获取模块,用于获取发送端发送的数据包的入队状态;入队状态表示是否能够加入数据包队列的状态;
37.判断模块,用于若数据包的入队状态为未入队,确定数据包为丢弃数据包;
38.通知模块,用于向发送端发送丢弃数据包的丢包通知,以指示发送端重新发送丢弃数据包。
39.第三方面,本技术实施例提供一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,该处理器执行计算机程序时实现上述第一方面中任一实施例提供的方法的步骤。
40.第四方面,本技术实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述第一方面中任一实施例提供的方法的步骤。
41.第五方面,本技术实施例还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述第一方面中任一实施例提供的方法的步骤。
42.上述显式丢包通告机制,首先获取发送端发送的数据包的入队状态,若数据包的入队状态为未入队,确定数据包为丢弃数据包,然后向发送端发送丢弃数据包的丢包通知,以指示发送端重新发送丢弃数据包。该方法中,数据中转设备检测到发送端发送的数据包后,首先会判断该数据包是否能够加入数据中转设备的数据包队列中,若该数据包不能加入数据包队列,则数据中转设备确定该数据包为丢弃数据包,并且直接向发送端发送该丢弃数据包的丢包通知,指示发送端重新发送该丢弃数据包,该方法实现了在数据中转设备确定发送端发送的数据包不能加入数据包队列中时,就直接向发送端发送丢包通知,该丢包通知是显式的,能够消除发送端根据超时计时器触发重传操作的依赖,保证了即使发生丢包,仍然能够保持较低的网络延迟。
附图说明
43.图1为一个实施例中丢包通知方法的应用环境图;
44.图2为一个实施例中丢包通知方法的流程示意图;
45.图3为另一个实施例中丢包通知方法的流程示意图;
46.图4为另一个实施例中丢包通知方法的流程示意图;
47.图5为另一个实施例中丢包通知方法的流程示意图;
48.图6为另一个实施例中丢包通知方法的流程示意图;
49.图7为另一个实施例中丢包通知方法的流程示意图;
50.图8为一个实施例中固定丢包率时不同机制的数据流完成时间;
51.图9为另一个实施例中固定丢包率时不同机制的数据流完成时间;
52.图10为一个实施例中不同机制的数据流完成时间;
53.图11为另一个实施例中不同机制的数据流完成时间;
54.图12为一个实施例中3层胖树的拓扑结构图;
55.图13为一个实施例中不同链路负载时不同机制的超时重传次数;
56.图14为另一个实施例中不同链路负载时不同机制的超时重传次数;
57.图15为一个实施例中不同流量类型时不同机制的网络延迟时间;
58.图16为另一个实施例中不同流量类型时不同机制的网络延迟时间;
59.图17为另一个实施例中丢包通知方法的流程示意图;
60.图18为一个实施例中丢包通知装置的结构框图;
61.图19为一个实施例中计算机设备的内部结构图。
具体实施方式
62.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
63.本技术实施例提供的丢包通知方法可如图1所示的应用环境中。其中,发送端通过数据中转设备转发发送端发送的数据包。发送端可以是服务器或工作站等,服务器可以用独立的服务器或者是多个服务器组成的服务器集来实现。数据中转设备可以是交换机,交换机包括以太网交换机、光纤交换机等。
64.随着协议栈的优化,端主机上包处理延时降低到几微秒甚至几百纳秒,网络中传输延时也要求微秒级。
65.新型拥塞控制尝试尽量避免网络拥塞,但是,考虑到三方面的影响:第一,因为数据中心短流居多,拥塞控制难以起作用;第二,硬件静态随机存取存储器(static random-access memory,sram)容量的增长速率赶不上网络带宽增长速率,所以交换机是浅缓存;第三,保证无丢失的流量控制因为队头阻塞、拥塞扩展和死锁的问题也不开启。因此,网络很容易出现丢包现象。
66.现有技术中,采用尾部丢失探测机制(tail loss probe,tlp)和增强丢包恢复机制(improved roce nic,irn)解决丢包的问题,但这些现有的丢失恢复机制仍然需要依赖超时计时器触发重传。通常,一旦触发超时重传,网络延时就不再是微秒级,对传统的广域网来说,调节超时计时器的值能够帮助缓解较高的延时,其中,超时计时器的值需要及时追踪往返时间的变化。
67.然而,微秒级的传播延时的数据中心网络,不可预测的主机上包处理延时和队列拥塞延时的抖动也有可能达到几百微秒,这使得往返时间突然变化有两个数量级的变化以至于无法预测。因此,调节合适的超时计时器的值,即实现及时重传且没有虚假超时重传,来达到微秒级网络延时是极其困难的。
68.基于此,本技术实施例提供一种显式丢包通告机制,能够消除超时计时器触发重传操作的依赖,保证了即使发生丢包也能保持较低的网络延迟。
69.下面将通过实施例并结合附图具体地对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。
70.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。
71.在一个实施例中,如图2所示,提供了一种丢包通知方法,本实施例涉及的是首先数据中转设备获取发送端发送的数据包的入队状态,若数据包的入队状态为未入队,确定数据包为丢弃数据包,然后数据中转设备向发送端发送丢弃数据包的丢包通知,以指示发送端重新发送丢弃数据包的具体过程。该实施例包括以下步骤:
72.s201,获取发送端发送的数据包的入队状态;入队状态表示是否能够加入数据包队列的状态。
73.在两端进行数据传输时,通常需要利用数据中转设备进行转发,例如,以一个服务器为发送端、另一个服务器为接收端为例,当发送端向接收端发送数据包时,首先,发送端是将数据包发送到数据中转设备的,然后数据中转设备再将数据包转发到接收端。
74.包(packet)是通信传输中的数据单位,一般也称“数据包”,在包交换网络里,单个消息被划分为多个数据块,这些数据块称为包,它包含发送者和接收者的网络互连协议(internet protocol,ip)地址信息。
75.数据包主要由“目的ip地址”、“源ip地址”、“净载数据”等部分构成,包括包头和包体,包头是固定长度,包体的长度不定,各字段长度固定,双方的请求数据包和应答数据包的包头结构是一致的,不同的是包体的定义。数据包结构的目的ip地址是说明这个数据包
是要发给谁的,相当于接收端ip地址;源ip地址是说明这个数据包是发自哪里的,相当于发送端ip地址;而净载数据相当于需要传输的内容。
76.数据中转设备以交换机为例,发送端与接收端通过交换机进行数据传输时,首先,需要在交换机上设置一个数据包队列,该数据包队列可以缓存多个发送端发送的数据包。
77.因此,在交换机接收发送端发送的数据包后,首先需要判断该数据包是否能够加入交换机的数据包队列中,确定发送端发送的数据包的入队状态,入队状态包括数据包能够加入数据包队列和数据包不能加入数据包队列。
78.若数据包队列允许入队10个数据包,那么获取数据包的入队状态的方式可以是,判断数据包队列当前的入队情况,若数据包队列当前已经入队10个数据包,即交换机的数据包队列已满,则确定发送端发送的数据包不能加入数据包队列,若数据包队列当前入队8个数据包,即交换机的数据包队列未满,则确定数据包能够加入数据包队列。
79.s202,若数据包的入队状态为未入队,确定数据包为丢弃数据包。
80.如果数据包的入队状态为未入队,即该数据包不能加入数据中转设备的数据包队列,则数据中转设备需要将该数据包丢弃,并且将该数据包称为丢弃数据包。
81.当数据中转设备确定丢弃数据包后,会根据该丢弃数据包确定丢包通知,例如,当数据中转设备确定一个丢弃数据包后,会基于该丢弃数据包携带的信息,生成该丢弃数据包的丢包通知。
82.s203,向发送端发送丢弃数据包的丢包通知,以指示发送端重新发送丢弃数据包。
83.当数据中转设备生成丢包通知后,会向发送端发送该丢包通知,发送端接收到丢包通知后,会根据该丢包通知,重新向数据中转设备发送被丢弃的数据包。
84.可选地,丢包通知中包含丢弃数据包的序列号,发送端能够根据该序列号,精准地实现丢弃数据包的重传;并且,丢包通知中数据包的序号至少包括一个。
85.发送端能够根据丢包通知中的丢包总数与已发送数据包总数确定数据中转设备的网络容量,从而确定发送端的发送速率以减少数据中转设备的数据包队列阻塞。
86.可选地,发送端接收到丢包通知后,可以暂停一段时间向数据中转设备发送数据包,以排空数据中转设备的数据包队列。
87.需要说明的是,传统方法中关于丢包的推测均是通过发送端在预定时间没有接收到接收端发送的确认消息或接收到重复的确认消息,以此确定数据包丢失,并触发重传机制,因此,传统方法属于隐式推测丢包;而本技术中是数据中转设备通过判断数据包的入队状态生成丢包通知,并主动向发送端发送丢包通知,发送端根据丢包通知重传丢失的数据包,因此,本技术中的丢包通知属于显式丢包通知。
88.并且,本技术实施例中的丢包通知的生成和响应是通过重载控制报文协议(internet control message protocol,icmp)消息的生成和响应框架,具体来说,在数据中转设备中,丢包通知的生成重新载用了icmp源淬火消息的生成的方式,产生包含丢包通知意义的icmp消息;在发送端,丢包通知的响应重用了icmp源淬火消息的响应的方式,发送端在接收到丢包通知意义的icmp消息后,首先在icmp层进行解析,然后递交到对应的传输协议,重传丢弃的数据包。因此,本技术实施例中的丢包通知方法更容易部署在已有的数据中转设备中,并且,更加方便与现有操作系统进行交互,即与发送端进行交互,达到精准重传的目标。
89.上述丢包通知方法,首先获取发送端发送的数据包的入队状态,若数据包的入队状态为未入队,确定数据包为丢弃数据包,然后向发送端发送丢弃数据包的丢包通知,以指示发送端重新发送丢弃数据包。该方法中,数据中转设备检测到发送端发送的数据包后,首先会判断该数据包是否能够加入数据中转设备的数据包队列中,若该数据包不能加入数据包队列,则数据中转设备确定该数据包为丢弃数据包,并且直接向发送端发送该丢弃数据包的丢包通知,指示发送端重新发送该丢弃数据包,该方法实现了在数据中转设备确定发送端发送的数据包不能加入数据包队列中时,就直接向发送端发送丢包通知,该丢包通知是显式的,能够消除发送端根据超时计时器触发重传操作的依赖,保证了即使发生丢包,仍然能够保持较低的网络延迟。
90.在一个实施例中,如图3所示,向发送端发送丢弃数据包的丢包通知,包括以下步骤:
91.s301,获取丢弃数据包在所属的目标数据流中的丢弃排序。
92.数据流中包含多个数据包,发送端向数据中转设备发送数据流时,是一次发送数据流中的数据包的,因此,数据中转设备确定了丢弃数据包后,首先判断该丢弃数据包在所属的数据流的丢弃排序,将丢弃数据包所属的数据流作为目标数据流,获取丢弃数据包在目标数据流中的丢弃排序,实质上是获取该丢弃数据包在目标数据流中被丢弃的数据包的排序。
93.例如,若目标数据流中包括10个数据包,且10个数据包的序号分别为1到10,若当前的丢弃数据包为5号数据包,且在5号数据包之前,还存在3号数据包和4号数据包丢弃,则该5号数据包在目标数据流中的丢弃排序为3。
94.在一个实施例中,如图4所示,获取丢弃数据包在所属的目标数据流中的丢弃排序,包括以下步骤:
95.s401,检测丢弃表中是否存在目标数据流的标识;丢弃表用于存储当前已被丢弃的数据包的结构信息,结构信息中包括对应数据包所属数据流的标识。
96.丢弃表存储当前已被丢弃的数据包的结构信息,该结构信息包括对应数据包所属数据流的标识,其中,不同的传输协议对应的标识结构可能不同,例如,若发送端与接收端的传输协议为传输控制协议(transmission control protocol,tcp),则数据流的标识为五元组,即包括发送端ip地址,发送端端口,接收端ip地址,接收端端口和传输层协议,若发送端与接收端的传输协议为远程直接数据存取(remote direct memory access,rdma)协议,则数据流的标识包括五元组信息和队列结构(queue pair,qp)。
97.并且,丢弃表中还可以存储起始编号、结束编号和排空数据包队列所需的时间,其中,排空数据包队列所需的时间可以根据数据包队列已用内存和数据中转设备输出端口的速率确定,其中起始编号和结束编号为丢弃数据包的序号。
98.在确定丢弃数据包在所属的目标数据流中的丢弃排序时,首先需要检测丢弃表中是否存在目标数据流的标识。
99.s402,若丢弃表中不存在目标数据流的标识,则确定丢弃数据包在目标数据流中的丢弃排序为首包。
100.因丢弃表中存储的是当前已被丢弃的数据包的结构信息,所以若丢弃表中不存在目标数据流的标识,则可以确定当前目标数据流中不存在被丢弃的数据包,则确定丢弃数
据包在目标数据流中的丢弃排序为首包。
101.s403,若丢弃表中存在目标数据流的标识,则确定丢弃数据包在目标数据流中的丢弃排序为非首包。
102.如果丢弃表中存在目标数据流的标识,则表示在该丢弃数据包被丢弃之前,目标数据流中存在已经被丢弃的数据包且当前仍处于被丢弃状态,则确定该丢弃数据包在目标数据流中的丢弃排序为非首包。
103.s302,根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知;参考数据包表示发送时刻在丢弃数据包之后的数据包。
104.在丢弃数据包发送之后,会继续发送其他数据包,将发送时刻在丢弃数据包的发送时刻之后的数据包作为参考数据包。
105.数据中转设备确定丢弃数据包之后,会生成该丢弃数据包的丢包通知,并且,该丢弃数据包的丢包通知根据丢包通知的丢弃排序和参数数据包的入队状态确定。
106.上述丢包通知方法,获取丢弃数据包在所属的目标数据流中的丢弃排序,根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知,参考数据包表示发送时刻在丢弃数据包之后的数据包。该方法根据丢弃数据包在所属的目标数据流的丢弃排序和参考数据包的入队状态生成丢弃数据包的丢包通知,消除了发送端根据超时计时器触发重传操作的依赖,保证了即使发生丢包,仍然能够保持较低的网络延迟。
107.在一个实施例中,根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知,包括:若丢弃数据包在目标数据流中的丢弃排序为首包,则根据丢弃数据包的结构信息,生成丢弃数据包的丢包通知。
108.如果数据中转设备确定丢弃数据包在目标数据流中的丢弃排序为首包,则直接根据丢弃数据包的结构信息生成丢弃数据包的丢包通知。
109.该丢弃数据包的丢包通知包括丢弃数据包所属的数据流、丢弃数据包的序号和当前排空数据包队列所需的时间。
110.上述实施例描述的是丢弃数据包为首包时,生成丢弃数据包的丢弃通知的过程,下面通过一个实施例对丢弃数据包为非首包且参考数据包的入队状态为入队的情况进行说明,在一个实施例中,如图5所示,则根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知,包括以下步骤:
111.s501,若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包的入队状态为入队,则在丢弃表中获取目标数据流中所有非首包的数据包的结构信息。
112.因参考数据包为在丢弃数据包的发送时刻之后发送的数据包,且丢弃数据包在目标数据流中的丢弃排序为非首包,此时丢弃表中首包的丢包通知已发送至发送端,所以,参考数据包可以为丢弃表中的首包,也可以不在丢弃表中。
113.示例地,若目标数据流中包括10个数据包,且10个数据包的序号分别为1到10,若丢弃数据包为5号数据包,且在丢弃表中存在3号数据包和4号数据包,此时,丢弃表中的起始编号为3,结束编号为5,丢弃表中的首包为3号数据包,则参考数据包可以为3号数据包,也可以为6号数据包。
114.若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包能够入队,则在丢弃表中获取所有非首包的数据包的结构信息。
115.基于上述示例,获取的非首包的数据包的结构信息,获取的是4号和5号数据包的结构信息。
116.需要说明的是,当传输协议为tcp协议,则是以字节流的形式进行发送的,数据包的序号是以字节的形式体现的,例如,数据流的第一个数据包的序号可以为0-1000字节,第二个数据包的序号为1001-2300字节等;当传输协议为rdma协议,则数据包的序号是以编号的形式体现的,例如,数据流的第一个数据包的序号可以为1号,第二个数据包的序号为2号等。不同的传输协议对应的数据包的序号的表现形式不同,本技术实施例对传输协议的类型不做任何限定。
117.s502,根据所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知。
118.该丢弃数据包的丢包通知中包括丢弃数据包所属的数据流、所有非首包的序号以及排空数据包队列所需的时间。
119.例如,若目标数据流中包括10个数据包,且10个数据包的序号分别为1到10,若丢弃数据包为5号数据包,且在丢弃表中存在3号数据包和4号数据包,此时,且参考数据包的入队状态为入队,则根据所有非首包的数据包的结构信息,即3号和4号的数据包的结构信息,生成丢弃数据包的丢包通知,该丢包通知中包括3号数据包和4号数据包的序号。
120.在一个实施例中,在生成丢弃数据包的丢包通知后,清空丢弃表中属于目标数据流中的所有数据包的存储记录。
121.若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包的入队状态为入队,则生成丢弃数据包的丢包通知,该丢包通知中包括所有非首包,此时,生成丢弃数据包的丢包通知后,需要清空丢弃表中属于目标数据流的所有数据包的存储记录,包括目标数据流的标识。
122.上述丢包通知方法,若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包的入队状态为入队,则在丢弃表中获取目标数据流中所有非首包的数据包的结构信息,根据所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知。该方法中,若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包的入队状态为入队时,会基于所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知,直接通过数据中转设备生成丢包通知,消除了发送端根据超时计时器触发重传操作的依赖,保证了即使发生丢包,仍然能够保持较低的网络延迟。
123.下面通过一个实施例对丢弃数据包在目标数据流中的丢弃排序为非首包且参考数据包的入队状态为未入队,且参考数据包为重新发送的目标数据流中的首包的情况进行说明,则在一个实施例中,如图6所示,根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知,包括:
124.s601,若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包为重新发送的目标数据流中的首包,且参考数据包的入队状态为未入队,则在丢弃表中获取目标数据流中所有非首包的数据包的结构信息,以及获取首包的结构信息。
125.因参考数据包为在丢弃数据包的发送时刻之后发送的数据包,所以,若参考数据包为重新发送的目标数据流中丢弃排序的首包,则表示目标数据流中丢弃排序的首包被重新丢弃。
126.例如,若目标数据流中包括10个数据包,且10个数据包的序号分别为1到10,若丢
弃表中存在3号、4号、5号数据包,则丢弃数据包可以为4号或5号数据包,参考数据包为3号数据包,且参考数据包未入队,则获取目标数据流在丢弃表中的所有非首包的结构信息,即4号和5号数据包的结构信息,获取首包的结构信息,即获取3号数据包的结构信息。
127.s602,根据所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知,以及根据首包的结构信息生成首包的丢包通知。
128.根据所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知,其中,该丢包通知为基于丢弃表中尾包的丢包通知,即属于目标数据流且在丢弃表中去除首包之外的所有数据包。
129.并且,在一个实施例中,在生成丢弃数据包的丢包通知后,清除丢弃表中属于目标数据流中所有非首包的数据包的存储记录。
130.在丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包为重新发送的目标数据流中的首包,且参考数据包的入队状态为未入队时,首先生成目标数据流在丢弃表中除了首包之外的丢包通知,也即是丢弃数据包的丢包通知,然后将丢弃表中属于目标数据流中的除了首包之外的所有非首包的存储记录清除,即若丢弃表中存储3号、4号和5号数据包,则生成基于4号和5号的丢包通知,然后将丢弃表中4号和5号数据包的存储记录清除。
131.此时,丢弃表中只存储了首包的结构信息,然后根据首包的结构信息,生成首包的丢包通知,其中,丢包通知的结构与上述实施例的描述相同,在此不做赘述。
132.上述丢包通知方法,若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包为重新发送的目标数据流中的首包,且参考数据包的入队状态为未入队,则在丢弃表中获取目标数据流中所有非首包的数据包的结构信息,以及获取首包的结构信息,根据所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知,以及根据首包的结构信息生成首包的丢包通知。该方法中,提出了若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包为重新发送的目标数据流中的首包,且参考数据包的入队状态为未入队,生成丢弃数据包的丢包通知的方式,消除了发送端根据超时计时器触发重传操作的依赖,保证了即使发生丢包,仍然能够保持较低的网络延迟。
133.在一个实施例中,数据中转设备确定接收发送端发送的数据包的入队状态为未入队,则将该数据包确定为丢弃数据包,并且,将丢弃数据包的结构信息存储至丢弃表中。
134.当数据中转设备检测到有丢弃数据包后,就直接将丢弃数据包的结构信息存储在丢弃表中。
135.首先,当数据中转设备确定数据包不能入队后,将该数据包确定为丢弃数据包,并且,进一步判断该丢弃数据包所属的数据流是否在丢弃表中,若丢弃数据包所属的数据流不在丢弃表中,则将丢弃数据包的结构信息存储至丢弃表中,即在丢弃表中添加丢弃数据包所属的数据流的标识,将丢弃数据包的序号作为丢弃表中数据流对应的起始编号和结束编号,在丢弃数据表中添加排空数据包队列所需的时间。
136.若丢弃数据包所属的数据流在丢弃表中,则进一步判断丢弃数据包的序号和丢弃表中的起始编号和结束编号的关系,即判断丢弃数据包的序号是否在丢弃表中,若丢弃数据包的序号与丢弃表中的起始编号与结束编号均相等,则表示丢弃表中的首包再次被丢弃,那么继续重新生成丢弃数据包的丢包通知。
137.若丢弃数据包所属的数据流在丢弃表中,且丢弃数据包的序号不在丢弃表中,则将丢弃数据包的结构信息存储至丢弃表中,即更新丢弃表的结束编号以及排空数据包队列所需的时间;例如,若丢弃表中存在丢弃数据包所属的目标数据流,且目标数据流中的3号数据包和4号数据包均在丢弃表中,丢弃数据包为5号数据包,则将丢弃表中的结束编号更新为5,且更新排空数据包队列所需的时间。
138.在一个实施例中,如图7所示,获取发送端发送的数据包的入队状态,包括:
139.s701,获取数据包队列的可用内存和数据包的容量。
140.数据中转设备在接收发送端发送的数据包之前,在数据中转设备中划分出一块内存,以存储数据包,并且,将接收的数据包按照队列的方式排列,将该队列作为数据包队列。
141.获取数据包队列的可用内存的方式可以是,根据数据包队列的预设内存和数据包队列中的存储的所有数据包所用的内存,确定数据包队列的可用内存;数据包的容量是数据包所占内存的大小。
142.s702,若数据包队列的可用内存大于或等于数据包的容量,则确定数据包的入队状态为入队。
143.s703,若数据包队列的可用内存小于数据包的容量,则确定数据包的入队状态为未入队。
144.将数据包队列的可用内存与数据包的容量进行对比,若数据包队列的可用内存大于或等于数据包的容量,则表示数据包可以进入数据包队列中,确定数据包的入队状态为入队。
145.如果数据包队列的可用内存小于数据包的容量,则表示数据包不能进入数据包队列中,确定数据包的入队状态为未入队。
146.上述丢包通知方法,获取数据包队列的可用内存和数据包的容量;若数据包队列的可用内存大于或等于数据包的容量,则确定数据包的入队状态为入队,若数据包队列的可用内存小于数据包的容量,则确定数据包的入队状态为未入队。该方法通过确定数据包的入队状态,以确定是否需要生成丢包通知,降低了发送端与接收端通信的网络延迟。
147.在一个实施例中,为了对本技术中的丢包通知方法的有益效果进行进一步说明,将本技术的方法与其他不同机制的方法进行小规模测试床实验和大规模仿真实验进行对比。
148.小规模测试床实验主要包括两个,首先,将2台服务器通过1台可编程交换机连接,交换机控制随机丢包的概率,测试在不同丢失恢复机制下流完成时间,即在丢包率为0.1%、1%、10%和20%时,测试在回退n步(go-back-n,gbn)策略、显式丢包通告(explicit dropping notificition,edn)机制和增强丢包恢复机制(improved roce nic,irn)三种方法下的数据流的传输完成时间,其中,edn机制为本技术的丢包通知方法,如图8和图9所示,图8为在谷歌应用(google_application)上进行的仿真试验,图9为在脸书的网页服务器(facebook_webserver)上进行的仿真试验,通过图8可知,该申请中的edn方法能快速准确地通知丢包信息,在0.1%丢包率的情况下,最高能减少97.61%的平均延时和97.43%的第99百分位尾延时;在20%丢包率的情况下,与irn相比,该申请中的edn方法能减少98.83%的平均延时和98.82%的第99百分位尾延时。
149.其次,将7台服务器与1台可编程交换机连接,测试6-to-1的incast流量模型下不
同丢失恢复机制下的流完成时间。如图10和图11所示,分别在谷歌应用和脸书的网页服务器上进行仿真试验,通过远程直接数据存取(remote direct memory access,rdma)协议测试原生态的超时重传机制、irn和edn三种方法下的数据流的完成时间,其中,纵坐标为数据流的传输完成率,横坐标为数据流的传输完成时间,从图10中可知,即使与最先进的irn相比,该申请的edn方法能减少99.93%的第99百分位尾延时。
150.采用经典的3层胖树拓扑结构进行大规模仿真试验,包括16个核心交换机、20个聚合交换机和20个架顶式交换机,具体的拓扑如图12所示,任意两台交换机链路的速率是400gbps,交换机与服务器链路的速率是100gbps,每一跳链路的延时为1微秒,因此最大的链路延时是12微秒,其中,4个聚合式交换机和架顶式交换机组成一个容器(pod)。如图13和图14所示,图13为在google_application进行的仿真实验,图14为在facebook_webserver进行的仿真试验,图13和图14是测试在不同链路负载下考虑不同机制下的数据流的超时重传次数,其中,横坐标为链路负载,纵坐标为数据流的超时重传次数,a表示tcp协议下的原生态的超时重传机制,b表示rdma协议下的原生态的超时重传机制,c表示tcp协议下的tlp机制,d表示rdma协议下的irn机制,e表示tcp协议下的edn方法,f表示rdma协议下的edn方法;通过图13和图14可以看出,本技术的edn方法不管在tcp协议或rdma协议下在拥塞丢包时都不会触发超时重传。
151.如图15和图16所示,图15为在google_application进行的仿真实验,图16为在facebook_webserver进行的仿真试验,测试在背景流量和前景流量下,考虑不同机制下的网络延时时间,其中,横坐标为流量模式,纵坐标为传输数据流的网络延迟时间,a表示tcp协议下的原生态的超时重传机制,b表示tcp协议下的tlp机制,c表示tcp协议下的edn方法,d表示rdma协议下的原生态的超时重传机制,e表示rdma协议下的irn机制,f表示rdma协议下的edn方法,由图15和图16可见,edn的延时时间最短,且最多减少了98.8%的平均延时和99.14%的第99百分位延时。
152.在一个实施例中,如图17所示,以数据中转设备为交换机、丢弃表为合并表、传输协议为rdma协议为例,该实施例包括以下步骤:
153.s1701,交换机的流量管理模块判断当前数据包是否能够入队;
154.具体地,交换机判断交换机中的所用内存和数据包的内存大小与预设的内存的大小关系,若当前交换机中的所用内存和当前数据包的内存的大小大于预设的内存,则表示不能入队;若所用内存和当前数据包的内存的大小小于或等于预设的排列数量,则可以入队。
155.s1702,当数据包不能入队时,交换机进一步判断该数据包所属的流是否存在合并表中;
156.判断当前数据包所属的流是否存在合并表中,就是判断所属流的连接编号是否在合并表中,合并表中包括连接编号、起始编号、结束编号和拥塞队列所需时间;连接编号包括数据包的五元组以及目的qp。
157.s1703,如果数据包不能入队,且数据包所属的流不在合并表中,则将该数据包的连接编号存储在合并表中,并更新合并表,即将数据包的序列作为合并表的起始编号和结束编号,并更新排空队列所需时间;并产生首包的显式丢包通知,将显式丢包通知发送至发送端。
158.s1704,若数据包不能入队,且数据包所属的流在合并表中,则判断当前数据包的序列与表中起始编号和结束编号的大小关系。
159.s1705,如果当前数据包的序列等于起始编号,则进一步判断起始编号和结束编号的大小关系,若起始编号等于结束编号,则表示重传的包再次被丢弃,交换机产生首包的显式丢包通知,交换机将首包的显式丢包通知发送至发送端。
160.s1706,若结束编号大于起始编号,则交换机产生一个尾包的显式丢包通知,并发送给发送端;然后将当前数据包的序列作为起始编号和结束编号,并产生一个首包的显式丢包通知,交换机将首包的显式丢包通知发送至发送端;
161.其中,尾包表示合并表中除了首包的所有数据包。
162.s1707,如果当前数据包的序列等于结束编号加1,则更新合并表,即将结束编号更新为结束编号加1,并更新排空队列时间。
163.s1708,当数据包能入队时,判断当前数据包所属的流是否存在合并表中,如果不存在合并表中,则直接入队,否则,如果起始编号等于结束编号,则清空合并表,如果结束编号大于起始编号,则产生一个尾包的显式丢包通知,并清空合并表,将尾包的显式丢包通知发送至发送端。
164.本实施例提供的丢包通知方法中各步骤,其实现原理和技术效果与前面各丢包通知方法实施例中类似,在此不再赘述。
165.应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
166.基于同样的发明构思,本技术实施例还提供了一种用于实现上述所涉及的丢包通知方法的丢包通知装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个丢包通知装置实施例中的具体限定可以参见上文中对于丢包通知方法的限定,在此不再赘述。
167.在一个实施例中,如图18所示,提供了一种丢包通知装置1400,包括:获取模块1801、判断模块1802和通知模块1803,其中:
168.获取模块1801,用于获取发送端发送的数据包的入队状态;入队状态表示是否能够加入数据包队列的状态;
169.判断模块1802,用于若数据包的入队状态为未入队,确定数据包为丢弃数据包;
170.通知模块1803,用于向发送端发送丢弃数据包的丢包通知,以指示发送端重新发送丢弃数据包。
171.在一个实施例中,通知模块1803包括:
172.第一获取单元,用于获取丢弃数据包在所属的目标数据流中的丢弃排序;
173.生成单元,用于根据丢弃排序和参考数据包的入队状态,生成丢弃数据包的丢包通知;参考数据包表示发送时刻在丢弃数据包之后的数据包。
174.在一个实施例中,第一获取单元包括:
175.检测子单元,用于检测丢弃表中是否存在目标数据流的标识;丢弃表用于存储当前已被丢弃的数据包的结构信息,结构信息中包括对应数据包所属数据流的标识;
176.第一确定子单元,用于若丢弃表中不存在目标数据流的标识,则确定丢弃数据包在目标数据流中的丢弃排序为首包;
177.第二确定子单元,用于若丢弃表中存在目标数据流的标识,则确定丢弃数据包在目标数据流中的丢弃排序为非首包。
178.在一个实施例中,生成单元包括:
179.第一生成子单元,用于若丢弃数据包在目标数据流中的丢弃排序为首包,则根据丢弃数据包的结构信息,生成丢弃数据包的丢包通知。
180.在一个实施例中,生成单元包括:
181.第一获取子单元,用于若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包的入队状态为入队,则在丢弃表中获取目标数据流中所有非首包的数据包的结构信息;
182.第二生成子单元,用于根据所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知。
183.在一个实施例中,第二生成子单元包括:
184.第一清空子单元,用于在生成丢弃数据包的丢包通知后,清空丢弃表中属于目标数据流中的所有数据包的存储记录。
185.在一个实施例中,生成单元包括:
186.第二获取子单元,用于若丢弃数据包在目标数据流中的丢弃排序为非首包,且参考数据包为重新发送的目标数据流中的首包,且参考数据包的入队状态为未入队,则在丢弃表中获取目标数据流中所有非首包的数据包的结构信息,以及获取首包的结构信息;
187.第三生成子单元,用于根据所有非首包的数据包的结构信息,生成丢弃数据包的丢包通知,以及根据首包的结构信息生成首包的丢包通知。
188.在其中一个实施例中,第三生成子单元包括:
189.清除子单元,用于在生成丢弃数据包的丢包通知后,清除丢弃表中属于目标数据流中所有非首包的数据包的存储记录。
190.在一个实施例中,该装置1800还包括:
191.存储模块,用于将丢弃数据包的结构信息存储至丢弃表中。
192.在一个实施例中,获取模块1801包括:
193.第二获取单元,用于获取数据包队列的可用内存和数据包的容量;
194.第一确定单元,用于若数据包队列的可用内存大于或等于数据包的容量,则确定数据包的入队状态为入队;
195.第二确定单元,用于若数据包队列的可用内存小于数据包的容量,则确定数据包的入队状态为未入队。
196.上述丢包通知装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
access memory,dram)等。本技术所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本技术所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
207.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
208.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本技术专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。

技术特征:


1.一种丢包通知方法,其特征在于,应用于数据中转设备,所述方法包括:获取发送端发送的数据包的入队状态;所述入队状态表示是否能够加入数据包队列的状态;若所述数据包的入队状态为未入队,确定所述数据包为丢弃数据包;向所述发送端发送所述丢弃数据包的丢包通知,以指示所述发送端重新发送所述丢弃数据包。2.根据权利要求1所述的方法,其特征在于,所述向所述发送端发送所述丢弃数据包的丢包通知,包括:获取所述丢弃数据包在所属的目标数据流中的丢弃排序;根据所述丢弃排序和参考数据包的入队状态,生成所述丢弃数据包的丢包通知;所述参考数据包表示发送时刻在所述丢弃数据包之后的数据包。3.根据权利要求2所述的方法,其特征在于,所述获取所述丢弃数据包在所属的目标数据流中的丢弃排序,包括:检测丢弃表中是否存在所述目标数据流的标识;所述丢弃表用于存储当前已被丢弃的数据包的结构信息,所述结构信息中包括对应数据包所属数据流的标识;若所述丢弃表中不存在所述目标数据流的标识,则确定所述丢弃数据包在所述目标数据流中的丢弃排序为首包;若所述丢弃表中存在所述目标数据流的标识,则确定所述丢弃数据包在所述目标数据流中的丢弃排序为非首包。4.根据权利要求3所述的方法,其特征在于,所述根据所述丢弃排序和参考数据包的入队状态,生成所述丢弃数据包的丢包通知,包括:若所述丢弃数据包在所述目标数据流中的丢弃排序为首包,则根据所述丢弃数据包的结构信息,生成所述丢弃数据包的丢包通知。5.根据权利要求3所述的方法,其特征在于,则所述根据所述丢弃排序和参考数据包的入队状态,生成所述丢弃数据包的丢包通知,包括:若所述丢弃数据包在所述目标数据流中的丢弃排序为非首包,且所述参考数据包的入队状态为入队,则在所述丢弃表中获取所述目标数据流中所有非首包的数据包的结构信息;根据所述所有非首包的数据包的结构信息,生成所述丢弃数据包的丢包通知。6.根据权利要求5所述的方法,其特征在于,所述方法还包括:在生成所述丢弃数据包的丢包通知后,清空所述丢弃表中属于所述目标数据流中的所有数据包的存储记录。7.根据权利要求3所述的方法,其特征在于,所述根据所述丢弃排序和参考数据包的入队状态,生成所述丢弃数据包的丢包通知,包括:若所述丢弃数据包在所述目标数据流中的丢弃排序为非首包,且所述参考数据包为重新发送的所述目标数据流中的首包,且所述参考数据包的入队状态为未入队,则在所述丢弃表中获取所述目标数据流中所有非首包的数据包的结构信息,以及获取所述首包的结构信息;根据所述所有非首包的数据包的结构信息,生成所述丢弃数据包的丢包通知,以及根
据所述首包的结构信息生成所述首包的丢包通知。8.根据权利要求7所述的方法,其特征在于,所述方法还包括:在生成所述丢弃数据包的丢包通知后,清除所述丢弃表中属于所述目标数据流中所有非首包的数据包的存储记录。9.根据权利要求3-8任一项所述的方法,其特征在于,所述方法还包括:将所述丢弃数据包的结构信息存储至所述丢弃表中。10.根据权利要求1-8任一项所述的方法,其特征在于,所述获取发送端发送的数据包的入队状态,包括:获取所述数据包队列的可用内存和所述数据包的容量;若所述数据包队列的可用内存大于或等于所述数据包的容量,则确定所述数据包的入队状态为入队;若所述数据包队列的可用内存小于所述数据包的容量,则确定所述数据包的入队状态为未入队。

技术总结


本申请涉及一种显式丢包通告机制,应用于数据中转设备。首先获取发送端发送的数据包的入队状态,若数据包的入队状态为未入队,确定数据包为丢弃数据包;向发送端发送丢弃数据包的丢包通知,以指示发送端重新发送丢弃数据包。该方法实现了在数据中转设备确定发送端发送的数据包不能加入数据包队列中时,就直接向发送端发送丢包通知,消除了发送端根据超时计时器触发重传操作的依赖,保证了即使发生丢包,仍然能够保持较低的网络延迟。仍然能够保持较低的网络延迟。仍然能够保持较低的网络延迟。


技术研发人员:

任丰原 孟晴开 胡超磊 张乙然 王博

受保护的技术使用者:

清华大学

技术研发日:

2022.08.08

技术公布日:

2022/11/18

本文发布于:2024-09-21 15:36:13,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/6717.html

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

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