本发明属于网络技术与安全,具体涉及一种基于ovs的邻居表项的vxlan报文的转发方法及装置。
背景技术:
1、open vswitch(简称ovs)是一个开源的虚拟交换机,被广泛地应用在云计算的场景中。同时,为了提高其转发性能,引入了dpdk加速方案,使数据可以在用户态直接转发,极大地提升了ovs的转发性能。
2、在云场景中,普遍使用vxlan对虚拟网络(overlay网络)的报文进行封装,然后将封装后的vxlan报文通过三层转发方式送到基础网络(underlay网络)中。三层转发的关键是ovs要知道下一跳的mac地址。当本地ovs没有保存下一跳的mac地址时,ovs需要通过主动发送arp请求(ipv4地址)或ns报文(ipv6地址)来学习下一跳的mac地址。ovs dpdk在执行上述过程时存在一个明显的缺陷——ovs会丢弃当前需要转发的vxlan隧道报文,直到ovs学习到下一跳的mac地址。
3、总结上述过程,使用ovs dpdk转发vxlan隧道报文时,如果ovs本地的邻居表项中存在下一跳mac,ovs可以正常转发该vxlan报文;如果不存在下一跳mac,ovs则会构造arp请求或ns报文主动学习下一跳mac,并丢弃需要转发的vxlan报文。
4、由于存在该缺陷,会导致虚机通信时存在丢包的风险,直接表现是通信双发的连接建立慢。
技术实现思路
1、本发明实施例的目的是提供一种基于ovs的邻居表项的vxlan报文的转发方法及装置,以解决ovs dpdk转发平面在学习邻居表项时会丢弃当前报文的问题,确保虚机之间能够正常通信。
2、为了解决上述技术问题,本发明是这样实现的:
3、第一方面,本发明实施例提供了一种基于ovs的邻居表项的vxlan报文的转发方法,其特征在于,所述方法包括:
4、在通过ovs转发vxlan报文的情况下,确定目标邻居表项;
5、将所述vxlan报文存入所述目标邻居表项中的缓存队列;
6、构造arp请求或ns报文,以获取所述目标mac地址和目标ip地址;
7、根据所述目标ip地址查找所述目标邻居表项,并将所述目标mac地址更新至所述目标邻居表项中;
8、通过所述ovs在所述目标邻居表项查找所述mac地址,以转发所述vxlan报文。
9、可选地,所述在通过ovs转发vxlan报文且不存在目标mac地址的情况下,确定目标邻居表项包括:
10、在通过ovs转发vxlan报文的情况下,通过下一跳的ip地址查找对应的邻居表项;
11、在不存在所述对应的邻居表项的情况下,创建所述目标邻居表项,并在所述目标邻居表项中建立缓存队列;
12、在存在所述对应的邻居表项且所述对应的邻居表项不存在目标mac地址的情况下,确定所述对应的邻居表项为目标邻居表项。
13、可选地,所述在不存在所述对应的邻居表项的情况下,创建所述目标邻居表项之后,所述方法还包括:
14、设置所述目标邻居表项的状态为第一状态;
15、在所述构造arp请求或ns报文之后,所述方法还包括:
16、将所述目标邻居表项的时间更新为第二状态,并启动第一定时器以记录所述目标邻居表项处于第一状态的时长;
17、在所述构造arp请求或ns报文,以获取所述目标mac地址和目标ip地址之后,所述方法还包括:
18、将所述目标邻居表项的时间更新为第三状态,并启动第二定时器以记录所述目标邻居表项处于第三状态的时长。
19、可选地,在所述将所述目标邻居表项的时间更新为第二状态,并启动第一定时器之后,所述方法还包括:
20、等待针对所述arp请求或ns报文的应答报文;
21、在未收到所述应答报文的情况下,重新发送所述arp请求或ns报文;
22、在收到所述应答报文的情况下,从所述应答报文中获取所述目标mac地址和目标ip地址,将所述目标邻居表项的时间更新为第三状态。
23、可选地,所述在未收到所述应答报文的情况下,重新发送所述arp请求或ns报文之后,所述方法还包括:
24、在重新发送所述arp请求或ns报文的次数大于等于目标次数的情况下,将所述目标邻居表项的时间更新为第一状态;
25、其中,在所述目标邻居表项处于第一状态的情况下,所述目标邻居表项为等待被删除的状态。
26、第二方面,一种基于ovs的邻居表项的vxlan报文的转发装置,其特征在于,包括:
27、确定模块,用于在通过ovs转发vxlan报文的情况下,确定目标邻居表项;
28、缓存模块,用于将所述vxlan报文存入所述目标邻居表项中的缓存队列;
29、构造模块,用于构造arp请求或ns报文,以获取所述目标mac地址和目标ip地址;
30、更新模块,用于根据所述目标ip地址查找所述目标邻居表项,并将所述目标mac地址更新至所述目标邻居表项中;
31、转发模块,用于通过所述ovs在所述目标邻居表项查找所述mac地址,以转发所述vxlan报文。
32、可选地,所述确定模块包括:
33、查找模块,用于在通过ovs转发vxlan报文的情况下,通过下一跳的ip地址查找对应的邻居表项;
34、创建模块,用于在不存在所述对应的邻居表项的情况下,创建所述目标邻居表项,并在所述目标邻居表项中建立缓存队列;
35、确定子模块,用于在存在所述对应的邻居表项且所述对应的邻居表项不存在目标mac地址的情况下,确定所述对应的邻居表项为目标邻居表项。
36、可选地,所述转发装置还包括:
37、设置模块,用于设置所述目标邻居表项的状态为第一状态;
38、第一更新模块,用于将所述目标邻居表项的时间更新为第二状态,并启动第一定时器以记录所述目标邻居表项处于第一状态的时长;
39、第二更新模块,用于将所述目标邻居表项的时间更新为第三状态,并启动第二定时器以记录所述目标邻居表项处于第三状态的时长。
40、可选地,所述转发装置还包括:
41、等待模块,用于等待针对所述arp请求或ns报文的应答报文;
42、发送模块,用于在未收到所述应答报文的情况下,重新发送所述arp请求或ns报文;
43、获取模块,用于在收到所述应答报文的情况下,从所述应答报文中获取所述目标mac地址和目标ip地址,将所述目标邻居表项的时间更新为第三状态。
44、可选地,所述转发装置还包括:
45、第三更新模块,用于在重新发送所述arp请求或ns报文的次数大于等于目标次数的情况下,将所述目标邻居表项的时间更新为第一状态;
46、其中,在所述目标邻居表项处于第一状态的情况下,所述目标邻居表项为等待被删除的状态。
47、本发明实施例提供了一种基于ovs的邻居表项的vxlan报文的转发方法,所述方法包括:在通过ovs转发vxlan报文的情况下,确定目标邻居表项,将所述vxlan报文存入所述目标邻居表项中的缓存队列,构造arp请求或ns报文,以获取所述目标mac地址和目标ip地址,根据所述目标ip地址查找所述目标邻居表项,并将所述目标mac地址更新至所述目标邻居表项中,通过所述ovs在所述目标邻居表项查找所述mac地址,以转发所述vxlan报文。本发明实施例在ovs的邻居表项中增加缓存队列,用于缓存待发送的vxlan报文,以解决ovsdpdk转发平面在学习邻居表项时会丢弃当前报文的问题,确保虚机之间能够正常通信。