一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种环路检测方法、装置、设备及存储介质与流程

2021-12-13 00:40:00 来源:中国专利 TAG:


1.本发明实施例涉及计算机网络监控技术领域,尤其涉及一种环路检测方法、装置、设备及存储介质。


背景技术:

2.二层局域网络的协议层面缺乏环路避免机制,因此网络中容易存在环路。二层网络中的环路检测问题一直是网络监控领域中的难题。随着虚拟网络、大二层网络的发展,环路检测问题变得愈发复杂,目前尚未存在能够适用于各种场景、完全正确的环路检测方法。
3.图1是现有技术中的一种环路检测方法示意图。如图1所示,现有技术的方案需要将待监控网口的输入、输出流量进行区分以及对比,确定网络中是否存在环路。例如,方案一需要通过流量标签为待监控网口的输入流量和输出流量分别打标签,如输入流量为vlan 100,输出流量为vlan 200,并将输入流量和输出流量镜像至流量的分析工具对应的网口上,分析工具可以对比输入流量和输出流量,若存在重复流量则认为网络中存在环路。又如,方案二需要通过两个网口分别镜像输入流量和输出流量,分析工具采集两个网口的流量,对比输入流量和输出流量,若存在重复流量则认为网络中存在环路。
4.可见,现有技术的方案一需要使用额外的流量标签,方案二需要使用额外的网口。即两个方案均需要消耗更多的资源,在配置时也具有一定的复杂性,还需要镜像完整的数据包,进行数据包内容的比对,消耗的网络带宽大。


技术实现要素:

5.本发明实施例提供了一种环路检测方法、装置、设备及存储介质,可以对网络环路进行精准检测而无需占用额外网络资源,并节省网络带宽消耗。
6.第一方面,本发明实施例提供了一种环路检测方法,该方法包括:
7.获取网络中各镜像端口的目标数据包,并确定所述目标数据包的数据包长度以及数据包类型;
8.根据所述数据包长度以及所述数据包类型,生成与所述目标数据包对应的数据包键值对;
9.根据所述数据包键值对中的键,在当前环路检测所对应的哈希字典中进行键值对查询,得到目标键值对;
10.根据所述目标键值对、所述数据包长度以及所述数据包类型,更新所述哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果。
11.第二方面,本发明实施例还提供了一种环路检测装置,该装置包括:
12.目标数据包获取模块,用于获取网络中各镜像端口的目标数据包,并确定所述目标数据包的数据包长度以及数据包类型;
13.数据包键值对生成模块,用于根据所述数据包长度以及所述数据包类型,生成与所述目标数据包对应的数据包键值对;
14.目标键值对查询模块,用于根据所述数据包键值对中的键,在当前环路检测所对应的哈希字典中进行键值对查询,得到目标键值对;
15.环路检测结果确定模块,用于根据所述目标键值对、所述数据包长度以及所述数据包类型,更新所述哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果。
16.第三方面,本发明实施例还提供了一种电子设备,该设备包括:
17.一个或多个处理器;
18.存储装置,用于存储一个或多个程序,
19.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明任意实施例所述的一种环路检测方法。
20.第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所述的一种环路检测方法。
21.本发明实施例的技术方案,通过获取网络中各镜像端口的目标数据包,并确定目标数据包的数据包长度以及数据包类型;根据数据包长度以及数据包类型,生成与目标数据包对应的数据包键值对;根据数据包键值对中的键,在当前环路检测所对应的哈希字典中进行键值对查询,得到目标键值对;根据目标键值对、数据包长度以及数据包类型,更新哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果,解决了二层网络中的环路检测问题,实现了对网络的环路进行精准检测,而无需占用额外的网络资源,无需对完整的数据包进行内容比对,可以节省网络带宽消耗的效果。
附图说明
22.图1是现有技术中的一种环路检测方法示意图;
23.图2是本发明实施例提供的一种环路检测方法的流程图;
24.图3是本发明实施例提供的一种目标数据包获取示意图;
25.图4是本发明实施例提供的又一种环路检测方法的流程图;
26.图5是本发明实施例提供的一种单播传输网络中无环路的传输示意图;
27.图6本发明实施例提供的一种单播传输网络中有环路的传输示意图;
28.图7是本发明实施例提供的一种环路检测装置的结构示意图;
29.图8是本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
30.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
31.图2是本发明实施例提供的一种环路检测方法的流程图,本实施例可适用于二层局域网络中对环路进行检测的情况,该方法可以由环路检测装置来执行,该装置可以通过软件,和/或硬件的方式实现,装置可以集成在电子设备中如流量分析设备,如图2所示,该方法具体包括:
32.步骤210、获取网络中各镜像端口的目标数据包,并确定目标数据包的数据包长度
以及数据包类型。
33.其中,在实际应用中由于网络性能监控的需求,在网络中已经将流量进行了镜像。图3是本发明实施例提供的一种目标数据包获取示意图。如图3所示,在本发明实施例中可以通过一个网口获取各镜像端口的目标数据包,无需单独为环路检测配置额外的区分流量方向的镜像流量。具体的,目标数据包可以是从虚拟机、服务器、交换机、路由器等端口镜像采集到的数据包;或者,目标数据包也可以是从光纤分光采集到的数据包。
34.在本发明实施例中,数据包长度可以是数据包具有的字节数。数据包类型可以是对数据包传输方式的具体体现。
35.具体的,在本发明实施例的一个可选实施方式中,获取网络中各监控网口的目标数据包,并确定目标数据包的数据包长度以及数据包类型,包括:通过流量镜像获取网络中各监控网口小于等于64字节的目标数据包,并确定目标数据包的数据长度为小于64字节,或者等于64字节;通过数据包的传输类型确定目标数据包的数据包类型为单播数据包、组播数据包或者广播数据包。
36.其中,本发明实施例的环路检测可以是基于小字节数据包实现的,可以减少数据包内容比对时的带宽消耗。小字节数据包可以理解为小于等于64字节的数据包。具体的,本发明实施例的环路检测方法可以是基于小于64字节的数据包数量以及等于64字节的数据包数量确定的。因此,对于目标数据包需要确定其数据包长度是小于64字节还是等于64字节。
37.进一步的,数据包的传输类型也会造成数据包数量存在差异。例如,单播方式,可能仅有一个网口收到数据包。而组播或者广播方式,可能存在至少一个网口收到数据包。因此,在本发明实施例中需要对目标数据包的数据包类型进行确定。具体的,可以将单播传输的目标数据包确定为单播数据包;将组播传输的目标数据包确定为组播数据包;将广播传输的目标数据包确定为广播数据包。实际中,对于组播或者广播数据包进行环路检测时,其具体实施方式是一致的。因此,可以对目标数据包仅进行单播和非单播数据包的区分即可。其中,非单播数据包包括组播数据包和广播数据包。
38.步骤220、根据数据包长度以及数据包类型,生成与目标数据包对应的数据包键值对。
39.其中,数据包长度以及数据包类型不同时,可以生成不同的数据包键值对。数据包键值对可以表示数据包内容、数据包长度以及数据包类型。例如,数据包键值对中的键可以由数据包内容以及数据包类型的标识构成。数据包内容可以反映数据包长度。数据包键值对中的值可以具有默认值,如0或者1或者一些标识字符等。
40.示例性的,数据包键值对中的键可以为key=(h,1)或者key=(h,0)。其中,键中的1可以表示单播数据包;0可以表示组播数据包或者广播数据包;h可以表示目标数据包。数据包键值对中的值可以默认为1。数据包键值对可以为{key=(h,1),value=1}或者,{key=(h,0),value=1}。
41.在本发明实施例的一个可选实施方式中,根据数据包长度以及数据包类型,生成与目标数据包对应的数据包键值对,包括:如果数据包长度小于64字节,则通过预设字符对目标数据包进行填充,生成64字节的填充数据包;如果数据包长度等于64字节,则将目标数据包记为原始数据包;如果数据包类型为单播数据包,则根据填充数据包生成第一数据包
键值对;或者,根据原始数据包生成第二数据包键值对;如果数据包类型为组播数据包或者广播数据包,则根据填充数据包生成第三数据包键值对;或者,根据原始数据包生成第四数据包键值对。
42.其中,在实际传输中,由物理交换机的硬件转发逻辑,物理交换机会将收到的任何小于64字节的包填充(padding)至64字节后再进行发送。所有以太网硬件交换机均有此行为,且部分虚拟交换机(如vmware vss、vds)也遵循此方式。因此,可以将小于64字节的目标数据包进行预设字符的填充,生成64字节的填充数据包。预设字符可以是“\0”。
43.示例性的,根据单播数据包以及填充数据包生成的第一数据包键值对可以为{key=(h1,1),value=1},其中,h1表示填充数据包。根据单播数据包以及原始数据包生成的第二数据包键值对可以为{key=(h2,1),value=1},其中,h2表示原始数据包。
44.又一示例性的,对于组播数据包或者广播数据包,根据填充数据包生成的第三数据包键值对可以为{key=(h1,0),value=1};根据原始数据包生成的第四数据包键值对可以为{key=(h2,0),value=1}。
45.步骤230、根据数据包键值对中的键,在当前环路检测所对应的哈希字典中进行键值对查询,得到目标键值对。
46.其中,哈希字典可以是根据各数据包键值对生成的用于对目标键值对进行查询的字典。具体的,哈希字典的初始值可以为空,可以根据每次数据包键值对的查询情况进行对应的更新。根据数据包键值对中的键可以与哈希字典中各键值对进行键的匹配,如果找到相同的键,可以将哈希字典中相同的键以及对应的值,作为目标键值对,目标键值对非空;如果找不到相同的键,目标键值对可以为空。
47.在本发明实施例的一个可选实施方式中,根据数据包键值对中的键,在当前环路检测所对应的哈希字典中进行键值对查询,得到目标键值对,包括:根据第一数据包键值对中的第一键,在当前环路检测所对应的哈希字典中进行键值对查询,得到第一目标键值对;或者,根据第二数据包键值对中的第二键,在当前环路检测所对应的哈希字典中进行键值对查询,得到第二目标键值对;或者,根据第三数据包键值对中的第三键,在当前环路检测所对应的哈希字典中进行键值对查询,得到第三目标键值对;或者,根据第四数据包键值对中的第四键,在当前环路检测所对应的哈希字典中进行键值对查询,得到第四目标键值对。
48.示例性的,可以根据{key=(h1,1),value=1}中的key=(h1,1)在哈希字典中进行键值对查询,如果能找到键为key=(h1,1)的键值对,将其作为第一目标键值对;否则,第一目标键值对为空。
49.又一示例性的,可以根据{key=(h2,1),value=1}中的key=(h2,1)在哈希字典中进行键值对查询,如果能找到键为key=(h2,1)的键值对,将其作为第二目标键值对;否则,第二目标键值对为空。
50.再一示例性的,可以根据{key=(h1,0),value=1}中的key=(h1,0)在哈希字典中进行键值对查询,如果能找到键为key=(h1,0)的键值对,将其作为第三目标键值对;否则,第三目标键值对为空。
51.另一示例性的,可以根据{key=(h2,0),value=1}中的key=(h2,0)在哈希字典中进行键值对查询,如果能找到键为key=(h2,0)的键值对,将其作为第四目标键值对;否则,第四目标键值对为空。
52.在本发明实施例中,由于对不同的类型的数据包通过键值对中的键进行了区分,因此对于当前环路检测中的全部目标数据包可以采用同一哈希字典进行数据包键值对的查询。在具体实施方式中,可以基于本发明实施例的构思,不同类型的数据包可以不对键值对中的键进行区分,而采用不同类型的数据包在不同哈希字典中进行数据包键值对查询的方式,其中,不同哈希字典可以通过数据包的类型进行区分。
53.步骤240、根据目标键值对、数据包长度以及数据包类型,更新哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果。
54.其中,更新哈希字典中的键值对,可以是对哈希字典进行增删改查操作。例如,目标键值对为空时,可以在哈希字典中新增数据包键值对;或者,目标键值对为非空时,可以在哈希字典中对目标键值对进行修改,具体的可以是目标键值对中值的修改。
55.在本发明实施例中,对于不同数据包长度以及数据包类型的目标数据包,目标键值对的更新方式以及环路检测条件可以存在不同。在实际中,环路可以理解为网口发送一个包,通过环路会收到一个包。交换机收到数据包再进行发出时,会具有padding特征,即对小于64字节的数据包进行填充后,再进行发送。本发明实施例的技术方案主要基于小于等于64字节的数据包进行环路检测,因此数据包长度小于64字节以及等于64字节时,目标键值对的更新方式以及环路检测条件可以存在不同。此外,单播、组播或者广播传输方式下,交换机中可以接收到的数据包数量会存在不同,因此目标键值对的更新方式以及环路检测条件可以存在不同。
56.具体的,在本发明实施例的一个可选实施方式中,根据目标键值对、数据包长度以及数据包类型,更新哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果,包括:如果第一目标键值对为非空,则以第一数据包键值对更新哈希字典中的第一目标键值对,其中第一数据包键值对中的值为1;并根据更新后的键值对,确定网络中不存在环路;确定第一目标键值对为空,则将第一数据包键值对添加至哈希字典中,并确定网络中不存在环路;或者,如果第三目标键值对为非空,则以第三数据包键值对更新哈希字典中的第三目标键值对,其中第三数据包键值对中的值为1;并根据更新后的键值对,确定网络中不存在环路;确定第三目标键值对为空,则将第三数据包键值对添加至哈希字典中,并确定网络中不存在环路。
57.其中,第一目标键值对为非空,说明可以在哈希字典中找到第一数据包键值对的键。在本发明实施例中,第一数据包键值对为根据单播数据包,且数据包长度为小于64字节的目标数据包生成的键值对。因此,在哈希字典中查询到第一数据包键值对的键,表明存在机器在频繁发送小字节数据包(小于64字节),这是一种正常的小字节发送行为,不应被判断为环路。因此,可以不增加第一目标键值对中的值。例如,可以{key=(h1,1),value=1}作为更新后的哈希字典中的第一目标键值对。更新后的第一目标键值对的值(value=1)小于与单播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中不存在环路。
58.本发明实施例的技术方案,通过第一数据包键值对更新哈希字典中的第一目标键值对,使第一目标键值对的值保持为1,可以避免网络中存在机器频繁发送小字节数据包的情况被判断为环路。可以避免现有技术方案中对频繁发送小字节数据包情况的误判(如现有技术中,通过设置阈值,认为连续发送一定数量的相同数据包时为存在环路,存在环路检
测准确性难以保证的问题),或者可以避免现有技术需要额外的网络资源进行环路检测的情况(如现有技术中,对数据包进行流量方向区分,认为同一个方向的相同包不是环路,需要消耗额外的vlan资源或者额外的接收镜像流量的端口)。
59.在本发明实施例中,第一目标键值对为空,表明在哈希字典中找不到第一数据包键值对的键,即对应的目标数据包在网络中还未出现过。对哈希字典的更新,可以是在哈希字典中新增第一数据包键值对,例如,可以{key=(h1,1),value=1}添加至哈希字典中,并作为更新后的第一目标键值对。更新后的第一目标键值对的值(value=1)小于与单播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中不存在环路。
60.在本发明实施例中,对于小于64字节的组播数据包或者广播数据包,其更新哈希字典的方式以及环路检测的方式与小于64字节的单播数据包基本相同。具体的,第三目标键值对为非空,说明可以在哈希字典中找到第三数据包键值对的键。在本发明实施例中,第三数据包键值对为根据组播数据包或者广播数据包,且数据包长度为小于64字节的目标数据包生成的键值对。因此,在哈希字典中查询到第三数据包键值对的键,表明存在机器在频繁发送小字节数据包(小于64字节),这是一种正常的小字节发送行为,不应被判断为环路;或者,表明存在多个网口通过组播或者广播形式接收小字节数据包,也不应被判断为环路。因此,可以不增加第三目标键值对中的值。例如,可以{key=(h1,0),value=1}作为更新后的哈希字典中的第三目标键值对。更新后的第三目标键值对的值(value=1)小于与组播数据包或者广播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中不存在环路。
61.在本发明实施例中,第三目标键值对为空,表明在哈希字典中找不到第三数据包键值对的键,即对应的目标数据包在网络中还未出现过。对哈希字典的更新,可以是在哈希字典中新增第三数据包键值对,例如,可以{key=(h1,0),value=1}添加至哈希字典中,并作为更新后的第三目标键值对。更新后的第三目标键值对的值(value=1)小于与组播数据包或者广播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中不存在环路。
62.在本发明实施例中,对于等于64字节的单播数据包、组播数据包或者广播数据包,其更新哈希字典的方式以及环路检测的方式与上述方式存在不同。具体的,在本发明实施例的一个可选实施方式中,根据目标键值对、数据包长度以及数据包类型,更新哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果,包括:如果第二目标键值对为非空,则将第二目标键值对中的值增加1,更新哈希字典;当更新后的键值对中的值满足与数据包类型对应的环路检测条件时,确定网络中存在环路;否则,确定网络中不存在环路;如果第二目标键值对为空,则确定网络中不存在环路;或者,如果第四目标键值对为非空,则将第四目标键值对中的值增加1,更新哈希字典;当更新后的键值对中的值满足与数据包类型对应的环路检测条件时,确定网络中存在环路;否则,确定网络中不存在环路;如果第四目标键值对为空,则确定网络中不存在环路。
63.其中,第二目标键值对为非空,说明可以在哈希字典中找到第二数据包键值对的键。在本发明实施例中,第二数据包键值对为根据单播数据包,且数据包长度为等于64字节的目标数据包生成的键值对。因此,在哈希字典中查询到第二数据包键值对的键,表明存在多个网口处具有等于64字节的数据包,存在环路的可能。因此,可以增加第二目标键值对中
的值。例如,可以将key=(h2,1)作为更新后的哈希字典中的第二目标键值对中的键,值增加1,如value原本为1时,可以更新为value=2。更新后的第二目标键值对的值满足与数据包类型对应的环路检测条件时,确定网络中存在环路;否则,确定网络中不存在环路。例如,更新后的第二目标键值对的值小于与单播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中不存在环路;大于与单播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中存在环路。
64.具体的,在本发明实施例的一个可选实施方式中,当更新后的键值对中的值满足与数据包类型对应的环路检测条件时,确定网络中存在环路,包括:如果更新后的键值对对应的数据包类型为单播数据包,当更新后的键值对中的值大于2时,确定网络中存在环路。即如果更新后的第二目标键值对的值如果大于2,确定网络中存在环路;如果更新后的第二目标键值对的值如果小于等于2,确定网络中不存在环路。
65.在本发明实施例中,单播传播方式下,如果网络中存在环路,会存在网口接收到等于64字节的数据包。具体的,当网络中不存在环路时,一个小于64字节的数据包最多会发送至1个网口。但是,当网络中存在环路时,会存在至少一个网口接收到一个64字节的数据包。因此,按照本发明实施例的技术方案在哈希字典中查询键值对时,更新后键值对的值应该至少等于3。
66.在本发明实施例中,第二目标键值对为空,表明在哈希字典中找不到第二数据包键值对的键,即对应的目标数据包在网络中还未出现过。对哈希字典的更新,可以是在哈希字典中新增第二数据包键值对,例如,可以{key=(h2,1),value=1}添加至哈希字典中,并作为更新后的第二目标键值对。更新后的第二目标键值对的值(value=1)小于与单播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中不存在环路。
67.在本发明实施例中,对于等于64字节的组播数据包或者广播数据包,其更新哈希字典的方式以及环路检测的方式与等于64字节的单播数据包基本相同。具体的,第四目标键值对为非空,说明可以在哈希字典中找到第四数据包键值对的键。在本发明实施例中,第四数据包键值对为根据组播数据包或者广播数据包,且数据包长度为等于64字节的目标数据包生成的键值对。因此,在哈希字典中查询到第四数据包键值对的键,表明存在多个网口处具有等于64字节的数据包,存在环路的可能。因此,可以增加第四目标键值对中的值。例如,可以将key=(h2,0)作为更新后的哈希字典中的第二目标键值对中的键,值增加1,如value原本为2时,可以更新为value=3。更新后的第四目标键值对的值满足与数据包类型对应的环路检测条件时,确定网络中存在环路;否则,确定网络中不存在环路。例如,更新后的第四目标键值对的值小于与组播数据包或者广播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中不存在环路;大于与组播数据包或者广播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中存在环路。
68.具体的,在本发明实施例的一个可选实施方式中,当更新后的键值对中的值满足与数据包类型对应的环路检测条件时,确定网络中存在环路,包括:如果更新后的键值对对应的数据包类型为组播数据包或者广播数据包,当更新后的键值对中的值大于网络中镜像端口数量时,确定网络中存在环路。即如果更新后的第四目标键值对的值如果大于n(其中,n为网络中镜像端口数量),确定网络中存在环路;如果更新后的第四目标键值对的值如果小于等于n,确定网络中不存在环路。
69.在本发明实施例中,组播或者广播传输方式下,如果网络中存在环路,会存在网口接收到等于64字节的数据包。具体的,当网络中不存在环路时,一个小于64字节的数据包最多会发送至n

1个网口。但是,当网络中存在环路时,会存在至少一个网口接收到一个64字节的数据包。因此,按照本发明实施例的技术方案在哈希字典中查询键值对时,更新后键值对的值应该至少等于n 1。
70.在本发明实施例中,第四目标键值对为空,表明在哈希字典中找不到第四数据包键值对的键,即对应的目标数据包在网络中还未出现过。对哈希字典的更新,可以是在哈希字典中新增第四数据包键值对,例如,可以{key=(h2,0),value=1}添加至哈希字典中,并作为更新后的第四目标键值对。更新后的第四目标键值对的值(value=1)小于与组播数据包或者广播数据包传输中存在环路时对应的可接收到的64字节数据包个数,可以确定网络中不存在环路。
71.本实施例的技术方案,通过获取网络中各镜像端口的目标数据包,并确定目标数据包的数据包长度以及数据包类型;根据数据包长度以及数据包类型,生成与目标数据包对应的数据包键值对;根据数据包键值对中的键,在当前环路检测所对应的哈希字典中进行键值对查询,得到目标键值对;根据目标键值对、数据包长度以及数据包类型,更新哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果,解决了二层网络中的环路检测问题,实现了对网络的环路进行精准检测,而无需占用额外的网络资源,无需对完整的数据包进行内容比对,可以节省网络带宽消耗的效果。
72.图4是本发明实施例提供的又一种环路检测方法的流程图。本实施例是对上述技术方案的进一步细化,本实施例中的技术方案可以与上述一个或者多个实施例中的各个可选方案结合。如图4所示,该方法包括:
73.步骤410、初始化哈希字典。
74.其中,哈希字典可以记为m,初始化哈希字典可以是设置m={}。即哈希字典初始化时可以为空。
75.步骤420、确定镜像流量中目标数据包的数据包类型;如果数据包类型为单播数据包,则执行步骤430至步骤490;如果数据包类型为组播数据包或者广播数据包,则执行步骤4100至步骤4160。
76.步骤430、确定目标数据包的数据包长度为小于64字节或者等于64字节;如果数据包长度为小于64字节,则执行步骤440至步骤450;如果数据包长度为等于64字节,则执行步骤460至步骤490。
77.步骤440、以字符“\0”将目标数据包填充,生成等于数据包长度64字节的填充数据包,并根据填充数据包生成第一数据包键值对。
78.例如,第一数据包键值对为{key=(h1,1),value=1}。
79.步骤450、根据第一数据包键值对中的键,在哈希字典中进行键值对查询,得到第一目标键值对;如果第一目标键值对非空,则以第一数据包键值对更新哈希字典;否则,将第一数据包键值对添加至哈希字典中。
80.步骤460、将目标数据包记为原始数据包,并根据原始数据包生成第二数据包键值对。
81.例如,第二数据包键值对为{key=(h2,1),value=1}。
82.步骤470、根据第二数据包键值对中的键,在哈希字典中进行键值对查询,得到第二目标键值对。
83.步骤480、如果第二目标键值对非空,则将第二目标键值对中的值增加1,更新哈希字典;如果第二目标键值对为空,则将第二数据包键值对添加至哈希字典中。
84.步骤490、当更新后的第二目标键值对中的值大于2时,确定网络中存在环路。
85.步骤4100、确定目标数据包的数据包长度为小于64字节或者等于64字节;如果数据包长度为小于64字节,则执行步骤4110至步骤4120;如果数据包长度为等于64字节,则执行步骤4130至步骤4160。
86.步骤4110、以字符“\0”将目标数据包填充,生成等于数据包长度64字节的填充数据包,并根据填充数据包生成第三数据包键值对。
87.例如,第三数据包键值对为{key=(h1,0),value=1}。
88.步骤4120、根据第三数据包键值对中的键,在哈希字典中进行键值对查询,得到第三目标键值对;如果第三目标键值对非空,则以第三数据包键值对更新哈希字典;否则,将第三数据包键值对添加至哈希字典中。
89.步骤4130、将目标数据包记为原始数据包,并根据原始数据包生成第四数据包键值对。
90.例如,第四数据包键值对为{key=(h2,0),value=1}。
91.步骤4140、根据第四数据包键值对中的键,在哈希字典中进行键值对查询,得到第四目标键值对。
92.步骤4150、如果第四目标键值对非空,则将第四目标键值对中的值增加1,更新哈希字典;如果第四目标键值对为空,则将第四数据包键值对添加至哈希字典中。
93.步骤4160、当更新后的第四目标键值对中的值大于网络中镜像端口数量时,确定网络中存在环路。
94.需要说明的是,步骤420至步骤4160可以进行循环执行,即将网络中的镜像流量中的小于等于64字节的数据包逐一确定为目标数据包进行循环执行,最终确定网络中是否存在环路。
95.本实施例的技术方案通过上述步骤,解决了二层网络中的环路检测问题,实现了对网络的环路进行精准检测,而无需占用额外的网络资源,无需对完整的数据包进行内容比对,可以节省网络带宽消耗的效果。
96.图5是本发明实施例提供的一种单播传输网络中无环路的传输示意图。以图5为例,说明本发明实施例技术方案的具体使用方法。网口1可以通过单播方式将小于64字节的数据包,如50字节数据包,发送至网口2,网口2可以接收到64字节的数据包。网口镜像时,可以得到一个50字节数据包以及一个64字节数据包。在本发明实施例的技术方案中,50字节数据包会填充至64字节的填充数据包,并生成对应的键值对,在哈希字典中进行查询。因为是初次查询,哈希字典为空,找不到对应的目标键值对,可以将64字节的填充数据包对应的键值对添加至哈希字典中。网口2接收到的64字节的数据包,在实际上是与64字节的填充数据包一致的。根据网口2接收到的64字节的数据包,生成对应的键值对,在哈希字典中进行查询。此时,哈希字典中已经存在64字节的填充数据包对应的键值对,因此键值对的值加1,变为2。由于键值对的值为2,小于等于2,因此可以确定网络中不存在环路。
97.图6本发明实施例提供的一种单播传输网络中有环路的传输示意图。以图6为例,说明本发明实施例技术方案的具体使用方法。网口1可以通过单播方式将小于64字节的数据包,如50字节数据包,发送至网口2,网口2可以接收到64字节的数据包。但是,网口2存在环路,可以将64字节数据包发出,并再次接收到64字节数据包。网口镜像时,可以得到一个50字节数据包以及两个64字节数据包。在本发明实施例的技术方案中,50字节数据包会填充至64字节的填充数据包,并生成对应的键值对,在哈希字典中进行查询。因为是初次查询,哈希字典为空,找不到对应的目标键值对,可以将64字节的填充数据包对应的键值对添加至哈希字典中。网口2接收到的64字节的数据包,在实际上是与64字节的填充数据包一致的。根据网口2接收到的64字节的数据包,生成对应的键值对,在哈希字典中进行查询。此时,哈希字典中已经存在64字节的填充数据包对应的键值对,因此键值对的值加1,变为2。网口2再次接收到的64字节的数据包在实际上也是与64字节的填充数据包一致的。根据网口2再次接收到的64字节的数据包生成对应的键值对,在哈希字典中进行查询。此时,哈希字典中已经存在64字节的填充数据包对应的键值对,值为2,因此键值对的值加1,变为3。由于键值对的值为3,大于2,因此可以确定网络中存在环路。
98.本发明实施例的技术方案在组播传输或者广播传输下的具体使用方法与上述单播传输方式类似,本领域技术人员可以根据本发明实施例中所描述的具体实施方式以及上述单播的具体应用实例而得出,这里不再赘述。
99.本发明实施例的技术方案无需区分镜像流量的流量方向,无需镜像大字节数据包,而仅通过镜像单方向的小字节数据包,利用交换机的padding特征,即可判断二层网络中的环路,具有检测准确率高、节省网络带宽以及节省网络vlan或者端口资源的效果。
100.图7是本发明实施例提供的一种环路检测装置的结构示意图。结合图7,该装置包括:目标数据包获取模块710,数据包键值对生成模块720,目标键值对查询模块730和环路检测结果确定模块740。其中:
101.目标数据包获取模块710,用于获取网络中各镜像端口的目标数据包,并确定目标数据包的数据包长度以及数据包类型;
102.数据包键值对生成模块720,用于根据数据包长度以及数据包类型,生成与目标数据包对应的数据包键值对;
103.目标键值对查询模块730,用于根据数据包键值对中的键,在当前环路检测所对应的哈希字典中进行键值对查询,得到目标键值对;
104.环路检测结果确定模块740,用于根据目标键值对、数据包长度以及数据包类型,更新哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果。
105.可选的,目标数据包获取模块710,包括:
106.数据长度确定单元,用于通过流量镜像获取网络中各监控网口小于等于64字节的目标数据包,并确定目标数据包的数据长度为小于64字节,或者等于64字节;
107.数据包类型确定单元,用于通过数据包的传输类型确定目标数据包的数据包类型为单播数据包、组播数据包或者广播数据包。
108.可选的,数据包键值对生成模块720,包括:
109.填充数据包生成单元,用于如果数据包长度小于64字节,则通过预设字符对目标数据包进行填充,生成64字节的填充数据包;
110.原始数据包确定单元,用于如果数据包长度等于64字节,则将目标数据包记为原始数据包;
111.第一键值对生成单元,用于如果数据包类型为单播数据包,则根据填充数据包生成第一数据包键值对;或者,根据原始数据包生成第二数据包键值对;
112.第二键值对生成单元,用于如果数据包类型为组播数据包或者广播数据包,则根据填充数据包生成第三数据包键值对;或者,根据原始数据包生成第四数据包键值对。
113.可选的,目标键值对查询模块730,具体用于:
114.根据第一数据包键值对中的第一键,在当前环路检测所对应的哈希字典中进行键值对查询,得到第一目标键值对;或者,
115.根据第二数据包键值对中的第二键,在当前环路检测所对应的哈希字典中进行键值对查询,得到第二目标键值对;或者,
116.根据第三数据包键值对中的第三键,在当前环路检测所对应的哈希字典中进行键值对查询,得到第三目标键值对;或者,
117.根据第四数据包键值对中的第四键,在当前环路检测所对应的哈希字典中进行键值对查询,得到第四目标键值对。
118.可选的,环路检测结果确定模块740,具体用于:
119.如果第一目标键值对为非空,则以第一数据包键值对更新哈希字典中的第一目标键值对,其中第一数据包键值对中的值为1;并根据更新后的键值对,确定网络中不存在环路;
120.确定第一目标键值对为空,则将第一数据包键值对添加至哈希字典中,并确定网络中不存在环路;或者,
121.如果第三目标键值对为非空,则以第三数据包键值对更新哈希字典中的第三目标键值对,其中第三数据包键值对中的值为1;并根据更新后的键值对,确定网络中不存在环路;
122.确定第三目标键值对为空,则将第三数据包键值对添加至哈希字典中,并确定网络中不存在环路。
123.可选的,环路检测结果确定模块740,又具体用于:
124.如果第二目标键值对为非空,则将第二目标键值对中的值增加1,更新哈希字典;
125.当更新后的键值对中的值满足与数据包类型对应的环路检测条件时,确定网络中存在环路;否则,确定网络中不存在环路;
126.如果第二目标键值对为空,则确定网络中不存在环路;或者,
127.如果第四目标键值对为非空,则将第四目标键值对中的值增加1,更新哈希字典;
128.当更新后的键值对中的值满足与数据包类型对应的环路检测条件时,确定网络中存在环路;否则,确定网络中不存在环路;
129.如果第四目标键值对为空,则确定网络中不存在环路。
130.可选的,环路检测结果确定模块740,更具体用于:
131.如果更新后的键值对对应的数据包类型为单播数据包,当更新后的键值对中的值大于2时,确定网络中存在环路;
132.如果更新后的键值对对应的数据包类型为组播数据包或者广播数据包,当更新后
的键值对中的值大于网络中镜像端口数量时,确定网络中存在环路。
133.本发明实施例所提供的环路检测装置可执行本发明任意实施例所提供的环路检测方法,具备执行方法相应的功能模块和有益效果。
134.图8是本发明实施例提供的一种电子设备的结构示意图,如图8所示,该设备包括:
135.一个或多个处理器810,图8中以一个处理器810为例;
136.存储器820;
137.所述设备还可以包括:输入装置830和输出装置840。
138.所述设备中的处理器810、存储器820、输入装置830和输出装置840可以通过总线或者其他方式连接,图8中以通过总线连接为例。
139.存储器820作为一种非暂态计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的一种环路检测方法对应的程序指令/模块(例如,附图7所示的目标数据包获取模块710,数据包键值对生成模块720,目标键值对查询模块730和环路检测结果确定模块740)。处理器810通过运行存储在存储器820中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述方法实施例的一种环路检测方法,即:
140.获取网络中各镜像端口的目标数据包,并确定所述目标数据包的数据包长度以及数据包类型;
141.根据所述数据包长度以及所述数据包类型,生成与所述目标数据包对应的数据包键值对;
142.根据所述数据包键值对中的键,在当前环路检测所对应的哈希字典中进行键值对查询,得到目标键值对;
143.根据所述目标键值对、所述数据包长度以及所述数据包类型,更新所述哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果。
144.存储器820可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器820可以包括高速随机存取存储器,还可以包括非暂态性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态性固态存储器件。在一些实施例中,存储器820可选包括相对于处理器810远程设置的存储器,这些远程存储器可以通过网络连接至终端设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
145.输入装置830可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置840可包括显示屏等显示设备。
146.本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例提供的一种环路检测方法:
147.获取网络中各镜像端口的目标数据包,并确定所述目标数据包的数据包长度以及数据包类型;
148.根据所述数据包长度以及所述数据包类型,生成与所述目标数据包对应的数据包键值对;
149.根据所述数据包键值对中的键,在当前环路检测所对应的哈希字典中进行键值对
查询,得到目标键值对;
150.根据所述目标键值对、所述数据包长度以及所述数据包类型,更新所述哈希字典中的键值对,并根据更新后的键值对,确定网络的环路检测结果。
151.可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd

rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
152.计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
153.计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、rf等等,或者上述的任意合适的组合。
154.可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c ,还包括常规的过程式程序设计语言—诸如”c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
155.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献