一种丢包检测方法及装置、存储介质

文档序号:29796400发布日期:2022-04-23 18:56阅读:103来源:国知局
一种丢包检测方法及装置、存储介质

1.本文涉及网络技术,尤指一种丢包检测方法及装置、存储介质。


背景技术:

2.在大型计算机网络系统中,由于持续性或瞬时性的路由黑洞、路由环路、网络拥塞、硬件故障以及灰色故障(gray failure)等原因,丢包以及丢包引起的网络故障是不可能完全避免的。比如,转发规则配置错误可能会产生路由黑洞,从而使得具有某个源或目的ip地址的数据包被系统性地丢弃。在软件定义网络中,各个交换机的转发规则需要被频繁更新,但是它们的更新往往是不同步的,这种不同步性可能会在网络中产生瞬时性的路由黑洞。比如,某台交换机b上原先不存在关于目的地址x的转发规则,因此它会默认将所有具有目的地址x的数据包都丢弃。现在控制器要为网络中的交换机配置新的转发规则,新的转发规则要求交换机a将具有目的地址x的数据包转发给b,然后b再将这些数据包转发给交换机c。这时候,如果在b的转发规则生效之前a将具有目的地址x的数据包都转发给b,那么b就会把这些数据包丢弃,从而造成瞬时性的路由黑洞。此外,路由器和交换机的转发规则配置不当可能会在网络中产生环路,于是当一个数据包进入这个路由环路的时候,它的ttl会逐渐变小,最后当数据包的ttl减小到0的时候,它就会被丢弃。
3.尽管以上丢包类型可以通过网络配置验证等手段来缓解,但是网络拥塞导致的丢包却是无法彻底规避的。比如,当从多个输入端口进入交换机的数据包都从一个输出端口转发出去的时候,如果进来的数据包的总速率持续超过输出端口的发送速率,那么这些数据包就会被不断地堆积在输出端口的缓冲区,最终使得输出端口缓冲区溢出从而导致丢包。面对这种类型的丢包,增大输出端口的缓冲区容量是无济于事的,因为面对高达数百gbps的网络速率,再大的缓冲区也会被迅速填满。一种解决方案就是当出现丢包的时候系统能够及时感知到这一情况,因此能够实时地对上游节点的流量进行调度和分流,避免该节点的输出缓冲区溢出。尽管很多基于传输控制协议(transmission control protocol,tcp)的拥塞控制算法,比如数据中心传输控制协议(data center transmission control protocol,dctcp)、l2dct、lpd和d2tcp等,都可以用于解决缓冲区溢出导致的丢包问题,但是在很多场景中网络管理员对终端主机并没有管理权限,因此无法部署相应的tcp方案,而且tcp的拥塞控制机制也无法解决非tcp流量(比如在线音视频播放产生的udp流量)导致的网络拥塞,因此实时检测网络中的丢包信息从而协调网络设备在网络内部疏导流量以避免丢包的方式仍然具有重要的意义。
4.还有一类是由链路折损、光模块松动或者背板电路故障等硬件故障引起的随机丢包甚至链路彻底断连。对于这类丢包并没有软件的解决方式,因此只能通过更换光纤、重新插拔光模块或者重启交换机等方式解决。应对这类丢包的关键是要能够及时地发现这类丢包并报告给网络运维人员,从而避免让这类丢包对网络性能产生实质性的影响,因此能够实时地对丢包现象进行检测就显得尤为重要。


技术实现要素:

5.本技术实施例提供了一种丢包检测方法及装置、存储介质,及时检测出丢包。
6.本技术实施例提供了一种丢包检测方法,应用于设置有第一缓冲区的源端,所述第一缓冲区包括至少一个存储单元,所述存储单元存储有计数值,所述丢包检测方法包括:
7.所述源端获取待发送的数据包,根据预设生成方式为所述数据包生成索引值,根据所述索引值将所述数据包按预设映射方式映射到所述第一缓冲区的一个存储单元,称为第一目标存储单元,更新所述第一目标存储单元的计数值,其中,更新方式为:在该第一目标存储单元的已有计数值上增加一次计数作为所述第一目标存储单元更新后的的计数值;
8.所述源端将所述第一目标存储单元更新后的计数值加入到所述数据包的包头,发送所述数据包。
9.在一示例性实施例中,所述存储单元还存储有摘要,且初始时摘要清零;
10.发送所述数据包前,还包括:按如下方式更新所述第一目标存储单元的摘要:将该第一目标存储单元的已有摘要与所述数据包的标识信息进行异或运算作为所述第一目标存储单元更新后的摘要;
11.以及,将所述第一目标存储单元更新后的摘要加入到所述数据包的包头。
12.在一示例性实施例中,所述源端设置有计数器;
13.所述根据预设生成方式为所述数据包生成索引值包括:根据所述计数器的计数值为所述数据包生成索引值;
14.为所述数据包生成索引值后,还包括,将所述计数器的计数值增加一次计数后模m作为所述计数器的计数值,m为所述第一缓冲区的存储单元数量;
15.发送所述数据包前,还包括,将所述索引值加入到所述数据包的包头。
16.在一示例性实施例中,所述根据预设生成方式为所述数据包生成索引值包括:根据所述数据包的信息进行哈希运算生成所述索引值;或者,根据所述数据包的校验和确定所述索引值。
17.在一示例性实施例中,所述数据包的信息包括至少一种第一类信息,其中,同一数据流的不同数据包的第一类信息不同。
18.在一示例性实施例中,所述第一类信息包括数据包的有效载荷。
19.在一示例性实施例中,所述数据包的信息还包括以下至少之一:数据包的源地址、数据包的目的地址、传输协议、源端口号、目的端口号。
20.在一示例性实施例中,所述源端将所述第一目标存储单元的计数值和摘要加入到所述数据包的包头包括:所述源端以预设概率将所述第一目标存储单元的计数值和摘要加入到所述数据包的包头;
21.所述方法还包括:所述源端以1-所述预设概率的概率将所述索引值加入到所述数据包的包头,或者,所述源端以1-所述预设概率的概率保持所述数据包的包头不变。
22.本公开实施例提供一种丢包检测方法,应用于设置有第二缓冲区的目的端,所述第二缓冲区包括至少一个存储单元,所述存储单元存储有计数值,所述丢包检测方法包括:
23.所述目的端接收到数据包后,从所述数据包的包头中获取索引值或根据预设生成方式为所述数据包生成所述索引值,根据所述索引值将所述数据包按预设映射方式映射所述第二缓冲区的一个存储单元,称为第二目标存储单元,按如下方式更新所述第二目标存
储单元的计数值:在该第二目标存储单元的已有计数值上增加一次计数作为所述第二目标存储单元更新后的计数值;
24.当所述数据包的包头中携带源端的第一目标存储单元的计数值,且所述第二目标存储单元更新后的计数值与所述第一目标存储单元的计数值不同时,判断存在丢包。
25.在一示例性实施例中,所述存储单元还存储有摘要,且初始时摘要清零;
26.所述方法还包括,按如下方式更新所述第二目标存储单元的摘要:将该第二目标存储单元的已有摘要与所述数据包的标识信息进行异或运算后作为所述第二目标存储单元更新后的摘要;
27.当判断存在丢包且所述第二目标存储单元的计数值与所述第一目标存储单元的计数值相差一次计数时,从所述数据包的包头获取第一目标存储单元的摘要,将所述第二目标存储单元更新后的摘要与所述第一目标存储单元的摘要进行异或运算,根据所得的结果确定丢失的数据包的标识信息。
28.在一示例性实施例中,所述方法还包括:判断存在丢包时,使用所述第一目标存储单元的计数值更新所述第二目标存储单元的计数值,使用所述第一目标存储单元的摘要更新所述第二目标存储单元的摘要。
29.在一示例性实施例中,所述根据预设生成方式为所述数据包生成所述索引值包括:
30.根据所述数据包的信息进行哈希运算生成所述索引值;或者,根据所述数据包携带的校验和确定所述索引值。
31.本公开实施例提供一种丢包检测装置,包括存储器和处理器,所述存储器存储有程序,所述程序在被所述处理器读取执行时,实现任一实施例所述的丢包检测方法。
32.本公开实施例提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现任一实施例所述的丢包检测方法。
33.与相关技术相比,本技术实施例包括一种丢包检测方法,应用于设置有第一缓冲区的源端,所述第一缓冲区包括至少一个存储单元,所述存储单元存储有计数值,所述丢包检测方法包括:所述源端获取待发送的数据包,根据预设生成方式为所述数据包生成索引值,根据所述索引值将所述数据包按预设映射方式映射到所述第一缓冲区的一个存储单元,称为第一目标存储单元,更新所述第一目标存储单元的计数值,其中,更新方式为:在该第一目标存储单元的已有计数值上增加一次计数作为所述第一目标存储单元更新后的的计数值;所述源端将所述第一目标存储单元更新后的计数值加入到所述数据包的包头,发送所述数据包。本实施例提供的方案,通过在源端维护计数值和在目的端维护计数值,比较二者的计数值,实现丢包检测。
34.本技术的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本技术而了解。本技术的其他优点可通过在说明书以及附图中所描述的方案来实现和获得。
附图说明
35.附图用来提供对本技术技术方案的理解,并且构成说明书的一部分,与本技术的
实施例一起用于解释本技术的技术方案,并不构成对本技术技术方案的限制。
36.图1为一示例性实施例提供的丢包检测系统示意图;
37.图2为一示例性实施例提供的丢包检测方法流程图(源端);
38.图3为一示例性实施例提供的丢包检测方法流程图(目的端);
39.图4为一示例性实施例提供的数据包传输示意图;
40.图5为一示例性实施例提供的丢包检测装置示意图。
具体实施方式
41.本技术描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本领域的普通技术人员来说显而易见的是,在本技术所描述的实施例包含的范围内可以有更多的实施例和实现方案。尽管在附图中示出了许多可能的特征组合,并在具体实施方式中进行了讨论,但是所公开的特征的许多其它组合方式也是可能的。除特意加以限制的情况以外,任何实施例的任何特征或元件可以与任何其它实施例中的任何其他特征或元件结合使用,或可以替代任何其它实施例中的任何其他特征或元件。
42.本技术包括并设想了与本领域普通技术人员已知的特征和元件的组合。本技术已经公开的实施例、特征和元件也可以与任何常规特征或元件组合,以形成由权利要求限定的独特的发明方案。任何实施例的任何特征或元件也可以与来自其它发明方案的特征或元件组合,以形成另一个由权利要求限定的独特的发明方案。因此,应当理解,在本技术中示出和/或讨论的任何特征可以单独地或以任何适当的组合来实现。因此,除了根据所附权利要求及其等同替换所做的限制以外,实施例不受其它限制。此外,可以在所附权利要求的保护范围内进行各种修改和改变。
43.此外,在描述具有代表性的实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本领域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本领域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本技术实施例的精神和范围内。
44.在真实的网络场景中还有一种非常常见的丢包情况是各种原因导致的随机丢包。对于这种丢包类型,一开始的时候网络会偶尔丢失一些数据包但是大体上还能够正常运行,甚至用户都无法感受到网络性能下降,但是如果这种丢包不能被及时修正,那么各种导致网络丢包的因素就会不断累加,最终使得网络性能明显下降甚至导致系统崩溃,此即所谓的灰色故障(grey failure)。
45.在实际的网络运维工作中,当网络用户发现使用体验下降时,首先要判断该问题是不是由网络故障引起的,因为应用软件、协议栈和终端主机的硬件问题都可能导致用户的使用体验下降。确定了当前的问题是由网络故障引起的以后,还需要定位发生网络故障的位置,以及具体的网络故障的类型。相比于具体网络故障的修复,以上步骤往往需要更长的时间。这个时候,如果能够准确判断网络中是否存在丢包,而且当网络中存在丢包时,如果能够找到具体发生丢包的位置并获得丢包的流标识符等信息,那么就能够快速定位网络故障并根据丢包的流标识符等信息判断网络故障的类型,从而大大提高网络故障修复的效
率。更进一步,如果能够实现准确的实时丢包检测,那么就可以防微杜渐,当一开始出现丢包的时候就向网络运维系统报告,由它判断是否要对其进行干预,从而在网络性能下降之前就对其进行修复,保证系统能够长久稳定地运行。
46.本公开实施例提供一种丢包检测方法,通过在源端和目的端根据所处理的数据包维护与数据包相关的计数值,对源端和目的端的计数值进行比较从而实现丢包检测。在另一示例性实施例中,还在源端和目的端维护与数据包的标识信息相关的摘要,通过摘要恢复丢失数据包的标识信息,从而能够快速定位网络故障和确定网络故障类型,提高网络故障修复的效率。
47.图1为一示例性实施提供的丢包检测系统示意图。如图1所示,所述丢包检测检测系统包括源端和目的端。当数据包从一条链路的一端传输到另一端的时候,称数据包离开的一端为源端,数据包到达的一端为目的端。在源端和目的端分别维护一个缓冲区,源端的缓冲区称为第一缓冲区,目的端的缓冲区称为第二缓冲区,第一缓冲区包括至少一个存储单元,第二缓冲区包括至少一个存储单元,第一缓冲区和第二缓冲区的每个存储单元中都有摘要和计数值两个字段。记源端和目的端的缓冲区分别为s和d,而s[i]为s中索引为i的存储单元,d[i]为d中索引为i的存储单元。s和d具有相同的容量m,即s有m个存储单元,d中有m存储单元。在一示例性实施中,源端可以维护一个常数δ,0<δ≤1。
[0048]
在一示例性实施例中提供一种丢包检测方法,所述丢包检测方法可以有两种工作模式:正常工作模式和节能工作模式,可以根据用户的指令或者系统配置使用其中一种工作模式,或者,在两种工作模式中进行动态切换,比如,根据当前网络带宽资源决定使用相应的工作模式。但本公开实施例不限于此,丢包检测方法中可以只有其中一种工作模式。下面分别对两种工作模式的实现进行说明。
[0049]
在正常工作模式中,源端维护一个计数器,计数器的计数值为n,计数器的初始值默认为0。当源端发送一个数据包p前,给数据包p分配一个索引值并更新计数器,索引值k的取值和计数器的更新方式如下:
[0050]k←n[0051]n←
(n+1)%m
[0052]
即,将计数器当前的计数值n作为分配给数据包p的索引值k,计数值加1再模m后作为更新后的计数值。
[0053]
根据索引值k,将数据包p映射到第一缓冲区的一个存储单元s[k],源端更新第一缓冲区如下(具体的,更新索引值k所映射的存储单元s[k]的摘要和计数值):
[0054][0055]
s[k].计数值

s[k].计数值+1
[0056]
即,将存储单元s[k]已有的摘要值s[k].摘要与数据包的标识信息p.流标识符进行异或运算,所得的结果作为存储单元s[k]更新后的摘要值,其中,为异或运算,后续不再说明;
[0057]
将存储单元s[k]已有的计数值s[k].计数值增加一次计数,作为存储单元s[k]更新后的计数值。
[0058]
本实施例中,增加一次计数可以为计数值加1,但本公开实施例不限于此,可以用
其他值表示一次计数。
[0059]
其中,数据包的标识信息可以包括数据包包头携带的一些信息,包括但不限于以下至少之一:数据包的源地址、数据包的目的地址、传输协议、源端口号、目的端口号等。
[0060]
其中,根据索引值k,将数据包映射映射到第一缓冲区的存储单元s[k]仅为示例,可以设置其他映射规则,将索引至k映射到第一缓冲区的另一个存储单元。目的端和源端遵循相同的映射规则即可。
[0061]
随后,源端便以δ的概率将三元组(s[k].摘要,s[k].计数值,k)作为一个新的头部加入到数据包的包头,而以1-δ的概率将索引值k作为一个新的头部(不包括s[k].摘要和s[k].计数值这两个字段)加入到数据包包头,发送该数据包。
[0062]
一种实现方式为:
[0063]
生成随机数x,0≤x≤1;
[0064]
当x≤δ,则将三元组(s[k].摘要,s[k].计数值,k)作为一个新的头部加入到数据包的包头,当x》δ,将索引值k作为一个新的头部加入到数据包的包头。
[0065]
上述以δ的概率将三元组(s[k].摘要,s[k].计数值,k)作为一个新的头部加入到数据包的包头的实现方案,由于s[k].摘要,s[k].计数值占用的带宽较大,因此,仅在部分数据包中加入上述三元组,可以减少所消耗的带宽。
[0066]
上述以δ的概率和1-δ的概率分别在数据包的包头中加入不同的头部仅为示例,在另一示例性实施例中,可以不维护δ,对每个数据包,将三元组(s[k].摘要,s[k].计数值,k)作为一个新的头部加入到数据包的包头;或者,每隔预设数量的数据包,将三元组(s[k].摘要,s[k].计数值,k)作为一个新的头部加入到数据包的包头,其余的数据包则将索引值k作为一个新的头部加入到数据包包头;或者,每间隔预设时间将三元组(s[k].摘要,s[k].计数值,k)作为一个新的头部加入到数据包的包头,其余的数据包则将索引值k作为一个新的头部加入到数据包包头;等等。
[0067]
上述实施中,第1个数据包至第m个数据包依次映射到第一缓冲区的索引为0至索引为m-1的存储单元,第m+1个数据包至第2m个数据包依次映射到第一缓冲区索引为0至索引为m-1的存储单元,循环使用该第一缓冲区,因此,第一缓冲区又可称为第一环形缓冲区,第二缓冲区又可称为第二环形缓冲区。但本公开不限于此,第1个数据包至第m个数据包可能按其他方式映射到第一缓冲区的各存储单元。
[0068]
当目的端收到数据包p以后,从数据包p的包头解析出与丢包检测相关的头部。因为以上所述的两种头部都包含了索引值k,所以解析出索引值k后,确定索引值k映射的第二缓冲区的一个存储单元,更新第二缓冲区如下(具体的,更新所映射的存储单元的摘要和计数值):
[0069][0070]
d[k].计数值

d[k].计数值+1
[0071]
即,将存储单元d[k]已有的摘要值d[k].摘要与数据包p的标识信息p.流标识符进行异或运算,所得的结果作为存储单元d[k]更新后的摘要值;
[0072]
将存储单元d[k]已有的计数值d[k].计数值增加一次计数,作为存储单元d[k]更新后的计数值。
[0073]
目的端会判断数据包头部是否包含源端维护的摘要和计数值。如果包含了摘要和
计数值,则开始进行丢包检测,这里将从数据包头部解析出来的摘要和计数值分别记为p.摘要和p.计数值,其中,p.摘要即为数据包p在源端进行发送前,所映射到的存储单元s[k].的摘要s[k].摘要,p.计数值即为数据包p在源端进行发送前,所映射到的存储单元s[k]的计数值s[k].计数值。目的端对比d[k].计数值和p.计数值,并按照以下三种情况分别进行处理:
[0074]
1.如果p.计数值=d[k].计数值,说明没有检测到丢包;
[0075]
2.如果p.计数值-d[k].计数值=一次计数,比如为1,说明存储单元d[k]中恰好丢失了一个数据包,并且这个数据包的标识信息可以通过如下方式恢复:
[0076][0077]
即,将d[k].摘要和p.摘要进行异或运算,即可得到丢失的数据包的标识信息。
[0078]
3.如果p.计数值-d[k].计数值>一次计数,比如,>1,说明存储单元d[k]相比存储单元s[k]丢了不止一个数据包,所以无法恢复丢失的数据包的标识信息。
[0079]
在以上情况中,只要p.计数值≠d[k].计数值,就说明源端的第一缓冲区和目的端的第二缓冲区不一致,因此通过以下方式来对s[k]和d[k]进行同步:
[0080]
d[k].计数值

p.计数值
[0081]
d[k].摘要

p.摘要
[0082]
理论上来说,必有p.计数值≥d[k].计数值,所以只需要讨论以上三种情况即可,但是如果实际部署过程中出现了p.计数值<d[k].计数值的情况,那么只需要参考以上的第三种情况,不对可能的丢包的信息进行恢复,同步s[k]和d[k]的状态即可。
[0083]
本实施例提供的方案,能够快速检测到丢包并判断丢包的位置同时恢复丢包的信息,进而就可以判断网络故障的类型以及发生的位置,从而提高网络的可靠性。
[0084]
在节能工作模式中,源端不维护计数器n。源端可以根据数据包的信息进行哈希运算生成索引值k,根据这个索引值k将数据包映射到第一缓冲区中的一个存储单元s[k]。更新存储单元s[k]的摘要和计数值,更新方法参考正常工作模式中的更新方法,即:
[0085][0086]
s[k].计数值

s[k].计数值+1
[0087]
源端以δ的概率将s[k].计数值和s[k].摘要作为一个新的头部加入到数据包p的包头,而以1-δ的概率不给数据包p的包头加入任何新的头部,发送所述数据包p。在节能工作模式中,不在源端和目的端之间传递索引值k,因而能够显著降低带宽消耗。
[0088]
在一示例性实施例中,源端可以使用md5(md5 message-digest algorithm,md5信息摘要算法)或crc(cyclic redundancy check,循环冗余校验)算法进行哈希运算。根据数据包的信息进行哈希运算生成索引值k可以是将哈希运算所得的值模m后得到索引值k,m为第二缓冲区的存储单元的数量。
[0089]
在一示例性实施例中,所述数据包的信息包括至少一种第一类信息,其中,同一数据流的不同数据包的第一类信息不同。所述第一类信息可以包括数据包的有效载荷。第一类信息能够分辨同一个数据流的不同数据包,因为在路由黑洞等网络故障中,具有特定ip地址的数据包会被丢弃,如果进行哈希运算的输入中没有第一类信息,那么多个丢失的数据包就会被映射到同一个存储单元,这将会导致无法恢复丢失的数据包的流标识符等信
息。通过将第一类信息作为哈希运算的输入,具有相同五元组的丢包也能够被分散在不同的存储单元中,因此可以方便地恢复它们的标识信息。
[0090]
在一示例性实施例中,所述数据包的信息还可以但不限于包括以下至少之一:数据包的源地址(比如源ip地址)、数据包的目的地址(比如目的ip地址)、传输协议、源端口号、目的端口号。其中,所述数据包的信息不包括ttl(time to live,生存时间)等在数据包传输过程中会发生改变的字段,因为这样会导致源端和目的端生成的索引值不一致。
[0091]
目的端收到一个数据包p后,以与源端相同的计算方式根据数据包p的信息进行哈希运算生成索引值k,确定索引值k映射的第二缓冲区的一个存储单元d[k],更新第二缓冲区的存储单元d[k]的摘要和计数值如下:
[0092][0093]
d[k].计数值

d[k].计数值+1
[0094]
如果数据包p中携带了源端的计数值(称为p.计数值)和摘要(p.摘要),目的端就用它来检测可能的丢包并恢复数据包的标识信息,即,
[0095]
1.如果p.计数值=d[k].计数值,说明没有检测到丢包;
[0096]
2.如果p.计数值-d[k].计数值=一次计数,比如为1,说明存储单元d[k]中恰好丢失了一个数据包,并且这个数据包的标识信息可以通过如下方式恢复:
[0097][0098]
3.如果p.计数值-d[k].计数值>一次计数,比如,>1,说明存储单元d[k]相比存储单元s[k]丢了不止一个数据包,所以无法恢复丢失的数据包的标识信息。
[0099]
当数据包中携带的源端的计数值和d[k]中的计数值不一致时,使用数据包p中携带的源端的计数值和摘要同步d[k]中的计数值和摘要。
[0100]
在数据包的传输过程中,数据包的有效载荷甚至源和目的ip地址等都会有意或无意地被改变,这也会导致源端和目的端计算得到的索引值不一致,从而导致丢包检测出现错误。在一示例性实施例中,可以只对tcp/udp等包含校验和的数据包进行丢包检测,这是因为tcp/udp通过校验和可以快速检测出被意外修改的数据包,而当数据包的校验和验证失败的时候,目的端就把它当做一个丢包而不使用该数据包来更新目的端的第二缓冲区。当后续的数据包到达的时候,这个数据包的信息就有可能被恢复出来。即源端在进行数据包发送前,判断数据包是否为tcp或udp数据包,
[0101]
事实上,因为tcp/udp数据包的校验和在数据包传输过程中不会发生改变,而且具有很强的随机性,因此可以使用它们的校验和生成索引值作为缓冲区中数据包映射到的存储单元的索引。尽管这种方案不能对tcp/udp数据包以外的数据包进行丢包检测,但是考虑到真实网络中绝大部分的数据包都是tcp/udp数据包,这种方案在真实网络场景的丢包检测中依然能够达到非常好的效果。即,在一示例性实施例中,源端和目的端可以将数据包的校验和模m作为索引值k。其余处理可参考节能工作模式中的处理。以数据包p为例。源端的处理包括:源端将数据包的校验和模m作为索引值k,根据索引值k映射到第一缓冲区的一个存储单元,更新所映射到的存储单元的摘要和计数值,将所更新的摘要和计数值以δ的概率作为一个新的头部加入到数据包p的包头,而以1-δ的概率不给数据包p的包头加入任何新的头部,发送所述数据包p。目的端的处理包括:目的端接收到数据包p,将数据包的校验和
模m作为索引值k,根据索引值k映射到第二缓冲区的一个存储单元,更新所映射到的存储单元的摘要和计数值,根据目的端映射到的存储单元的计数值与接收到的数据包中携带的计数值进行比较,判断是否存在丢包,并在存在一个丢包时,根据目的端映射到的存储单元的摘要与接收到的数据包中携带的摘要恢复丢包的标识信息,以及,在存在丢包时,根据数据包中携带的摘要和计数值分别更新目的端映射到的存储单元的摘要和计数值。
[0102]
图2为本公开实施例提供的丢包检测方法流程图。如图2所示,本公开实施例提供一种丢包检测方法,应用于设置有第一缓冲区的源端,所述第一缓冲区包括至少一个存储单元,所述存储单元存储有计数值,所述丢包检测方法包括:
[0103]
步骤201,所述源端获取待发送的数据包,根据预设生成方式为所述数据包生成索引值,根据所述索引值将所述数据包按预设映射方式映射到所述第一缓冲区的一个存储单元,称为第一目标存储单元,更新所述第一目标存储单元的计数值,其中,更新方式为:在该第一目标存储单元的已有计数值上增加一次计数作为所述第一目标存储单元更新后的的计数值;
[0104]
步骤202,所述源端将所述第一目标存储单元更新后的计数值加入到所述数据包的包头,发送所述数据包。
[0105]
本实施例提供的方案,可以在源端为数据包生成索引值,维护一个与索引值对应的计数值并发送给目的端,以便目的端在接收到数据包后,确定数据包对应的索引值,根据索引值得到目的端的存储单元的计数值,比较目的端和源端的计数值即可判断是否丢包。
[0106]
在一示例性实施例中,所述存储单元还存储有摘要,且初始时摘要清零;
[0107]
发送所述数据包前,还包括:按如下方式更新所述第一目标存储单元的摘要:将该第一目标存储单元的已有摘要与所述数据包的标识信息进行异或运算作为所述第一目标存储单元更新后的摘要;
[0108]
以及,将所述第一目标存储单元更新后的摘要加入到所述数据包的包头。
[0109]
本实施例提供的方案,通过维护与数据包的标识信息相关的摘要信息,并将摘要发送给目的端,以便目的端在存在丢包时,可以根据摘要恢复丢包的标识信息,从而及时定位网络故障,确定网络故障类型,从而及时修复网络故障,提高网络可靠性,且本实施例提供的方案,第一缓冲区存在多个存储单元时,比如m个时,可以在存在连续m个丢包时,恢复该m个丢包的标识信息。
[0110]
在一示例性实施例中,所述源端设置有计数器;
[0111]
所述为所述数据包生成索引值包括:根据所述计数器的计数值为所述数据包生成索引值;
[0112]
为所述数据包生成索引值后,还包括,将所述计数器的计数值增加一次计数后模m作为所述计数器的计数值,m为所述第一缓冲区的存储单元数量;
[0113]
发送所述数据包前,还包括,将所述索引值加入到所述数据包的包头。
[0114]
本实施例提供的方案,可以通过设置计数器,根据计数器值生成索引值。
[0115]
在一示例性实施例中,所述为所述数据包生成索引值可以包括:根据所述数据包的信息进行哈希运算生成所述索引值;或者,根据所述数据包的校验和确定所述索引值。数据包的信息可以包括:数据包的有效载荷、数据包的源地址、数据包的目的地址、传输协议、源端口号、目的端口号等至少之一。根据所述数据包的信息进行哈希运算生成一哈希值,将
该哈希值模m即为索引值,所述m为第一缓冲区的存储单元的数量。所述根据所述数据包的校验和确定所述索引值包括:将所述数据包的校验和模m即为索引值。
[0116]
在一示例性实施例中,所述源端将所述第一目标存储单元的计数值和摘要加入到所述数据包的包头包括:所述源端以预设概率将所述第一目标存储单元的计数值和摘要加入到所述数据包的包头;
[0117]
所述方法还包括:所述源端以1-所述预设概率的概率将所述索引值加入到所述数据包的包头,或者,所述源端以1-所述预设概率的概率保持所述数据包的包头不变。
[0118]
本实施例提供的方案,以预设概率将计数值和摘要加入到数据包的包头,可以减少占用的网络资源。但本公开实施例不限于此,可以在全部数据包的包头中均加入计数值和摘要。
[0119]
图3为本公开实施例提供的丢包检测方法流程图。如图3所示,本公开实施例提供一种丢包检测方法,应用于设置有第二缓冲区的目的端,所述第二缓冲区包括至少一个存储单元,所述存储单元存储有计数值,所述丢包检测方法包括:
[0120]
步骤301,所述目的端接收到数据包后,从所述数据包的包头中获取索引值或根据预设生成方式为所述数据包生成所述索引值,根据所述索引值将所述数据包按预设映射方式映射所述第二缓冲区的一个存储单元,称为第二目标存储单元,按如下方式更新所述第二目标存储单元的计数值:在该第二目标存储单元的已有计数值上增加一次计数作为所述第二目标存储单元更新后的计数值;
[0121]
步骤302,当所述数据包的包头中携带源端的第一目标存储单元的计数值,且所述第二目标存储单元更新后的计数值与所述第一目标存储单元的计数值不同时,判断存在丢包。
[0122]
本实施例提供的丢包检测方法,通过将目的端的计数值与接收到的计数值进行比较,在计数值不同时判断存在丢包,从而及时检测到丢包。
[0123]
在一示例性实施例中,所述存储单元还存储有摘要,且初始时摘要清零;
[0124]
所述方法还包括,按如下方式更新所述第二目标存储单元的摘要:将该第二目标存储单元的已有摘要与所述数据包的标识信息进行异或运算后作为所述第二目标存储单元更新后的摘要;
[0125]
当判断存在丢包且所述第二目标存储单元的计数值与所述第一目标存储单元的计数值相差一次计数时,从所述数据包的包头获取第一目标存储单元的摘要,将所述第二目标存储单元更新后的摘要与所述所述第一目标存储单元的摘要进行异或运算,根据所得的结果确定丢失的数据包的标识信息。
[0126]
本实施例提供的方案,可以通过与数据包的标识信息相关的摘要恢复丢包的标识信息,从而快速定位网络故障并解决网络故障,提高网络可靠性,提升用户体验。
[0127]
在一示例性实施中,所述方法还包括:判断存在丢包时,使用所述第一目标存储单元的计数值更新所述第二目标存储单元的计数值,使用所述第一目标存储单元的摘要更新所述第二目标存储单元的摘要。
[0128]
在一示例性实施中,所述根据预设生成方式为所述数据包生成所述索引值包括:
[0129]
根据所述数据包的信息进行哈希运算生成所述索引值;或者,根据所述数据包携带的校验和确定所述索引值。其中,目的端与源端采用相同的方式生成索引值,可以参考源
端的描述,此处不再赘述。
[0130]
下面通过一示例性实施例对本公开技术方案作进一步说明。
[0131]
图4为一示例性实施例提供的丢包检测方法示意图。因为节能工作模式和正常工作模式的原理类似,因此仅以正常工作模式为例进行说明。并且为了方便起见,令δ=1.0。在该图中,源端第一缓冲区有3个存储单元,索引分为为0,1,2,目的端的第二缓冲区有3个存储单元,索引分为为0,1,2,存储单元初始时的计数值和摘要清零。对于任意数据包pi,标识信息(又称流标识符)为fi,进行丢包检测的目标就是要恢复丢失的数据包的流标识符。本实施例中,可以维护一个计数器,计数器的计数值n初始值可以为0。如图4所示,本实施例中的数据包发送和接收过程如下:
[0132]
实例1:数据包p1到达源端时,计数器的计数值n为0,为数据包p1分配索引值k=n=0,更新n=1,数据包p1被映射到索引为0的存储单元中,将索引为0的存储单元的计数值更新为1,摘要更新为f1,将计数值1、摘要f1和索引值k(此时为0)加入到数据包p1的包头中,发送数据包p1。但是数据包p1在传输过程中被丢失了,因此目的端的缓冲区的状态没有发生改变。
[0133]
实例2:数据包p2到达源端的时候,为数据包p2分配索引值k=n=1,更新n=2,数据包p2被映射到了索引为1的存储单元中,将索引为1的存储单元的计数值更新为1,摘要更新为f2,将计数值1、摘要f2和索引值k(此时为1)加入到数据包p2的包头中,发送数据包。数据包p2在传输过程中同样被丢失了,所以目的端的缓冲区状态也没有发生改变。
[0134]
实例3:数据包p3到达源端时,为数据包p3分配索引值k=n=2,更新n=3%3=0,数据包p3被映射到了索引为2的存储单元中,将索引为2的存储单元的计数值更新1,摘要更新为f3,将计数值1、摘要f3和索引值k(此时为2)加入到数据包p3的包头中,发送数据包p3。数据包p3到达目的端以后,目的端从数据包p3的头部解析出了索引值2,然后据此将目的端索引为2的存储单元的计数值更新为1,摘要更新为f3。因为数据包p3头部解析出的计数值(即1)和目的端的索引为2的存储单元的计数值相同,所以索引为2的存储单元中没有发生丢包。
[0135]
实例4:数据包p4到达源端时,为数据包p4分配索引值k=n=0,更新n=1,数据包p4被映射到了索引为0的存储单元中,将索引为0的存储单元的计数值更新为2,摘要更新为将索引值(此时为0)、计数值2和摘要加入到数据包p4的头部,将数据包p4发送给目的端,但是该数据包在传输过程中丢失了,因此目的端缓冲区的内容没有发生改变。
[0136]
实例5:数据包p5到达源端时,为数据包p5分配索引值k=n=1,更新n=2,数据包p5被映射到了索引为1的存储单元中,将索引为1的存储单元的计数值更新为2,摘要分更新为源端把索引值1、计数值2和摘要分别加入到数据包p5头部,然后将数据包p5发送给目的端。目的端收到数据包p5以后,解析该数据包p5并更新自己的索引为1的存储单元。更新后目的端的索引为1的存储单元的计数值和摘要分别为1和f5,而从数据包p5中解析出来的计数值和摘要分别为2和所以目的端知道这个索引为1的存储单元中有一个丢包,丢包的流标识符为随后,目的端根据数据包p5中解析出来的计数值和摘要,将目的端索引为1的存储单元的计数值和摘要分别更新为2和
[0137]
实例6:数据包p6到达源端时,为数据包p6分配索引值k=n=2,更新n=3%3=0,数据包p6被映射到了第一缓冲区索引为2的存储单元中,将该索引为2的存储单元的计数值和摘要分别更新为2和源端将索引值2、计数值2和摘要加入到数据包p6头部并将数据包p6发送给目的端。目的端从数据包p6中解析出索引值2、计数值2和摘要并更新第二缓冲区中索引为2的存储单元。更新后第二缓冲区索引为2的存储单元的计数值和摘要分别为2和因为第二缓冲区索引为2的存储单元的计数值和从数据包p6中解析出来的计数值相同,所以该存储单元中没有丢失的数据包。
[0138]
实例7:数据包p7到达源端时,为数据包p7分配索引值k=n=0,更新n=1,数据包p7被映射到了第一缓冲区索引为0的存储单元中,更新后,该索引为0的存储单元的计数值和摘要分别变成了3和源端将索引值0、计数值3和摘要加入到数据包p7的头部,然后将数据包p7发送给目的端。目的端收到数据包p7以后从中解析出索引值0、计数值3和摘要然后根据索引值0更新第二缓冲区索引为0的存储单元。更新后,第二缓冲区索引为0的存储单元的计数值和摘要分别为1和f7。因为从数据包p7中解析出来的计数值和第二缓冲区索引为0的存储单元的计数值的差(即2)大于1,所以它无法恢复具体的丢包的信息。之后目的端将第二缓冲区索引为0的存储单元的计数值和摘要分别更新为数据包p7中解析出来的计数值3和摘要
[0139]
如图5所示,本公开实施例提供一种丢包检测装置70,包括存储器710和处理器720,所述存储器710存储有程序,所述程序在被所述处理器720读取执行时,实现上述任一实施例所述的丢包检测方法。
[0140]
在一示例性实施例中,可以在各个网络位置广泛部署上述丢包检测装置,从而能够快速检测到丢包并判断丢包的位置同时恢复丢包的信息,进而就可以判断网络故障的类型以及发生的位置,从而提高网络的可靠性。
[0141]
本公开实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现上述任一实施例所述的丢包检测方法。
[0142]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此
外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1