冲突MAC地址的处理方法、装置和机器可读存储介质与流程

文档序号:15923534发布日期:2018-11-14 00:54阅读:300来源:国知局

本公开涉及互联网技术领域,尤其是涉及一种冲突mac地址的处理方法、装置和机器可读存储介质。

背景技术

随着数据大集中的发展和虚拟化技术的应用,数据中心的规模与日俱增,不仅对二层网络的区域范围要求越来越大,在需求和管理水平上也提出了新的挑战。

数据中心区域规模和业务处理需求的增加,对于集群处理的应用越来越多,集群内的服务器需要在一个二层vlan(virtuallocalareanetwork,虚拟局域网)或者vxlan(virtualextensiblelan,虚拟扩展局域网)下。同时,虚拟化技术的应用,在带来业务部署的便利性和灵活性基础上,虚拟机的迁移问题也成为必须要考虑的问题。为了保证虚拟机承载业务的连续性,虚拟机迁移前后的ip地址不变,因此虚拟机的迁移范围需要在同一个二层vlan下。反过来即,二层网络规模有多大,虚拟机才能迁移有多远。因此,为了解决数据中心内部的网络扩展问题,大二层网络应运而生,以通过大规模二层网络和vlan延伸,实现虚拟机在数据中心内部的大范围迁移。

但是,数据中心使用的大二层网络,由于虚拟机数量庞大,且虚拟机上的mac(mediaaccesscontrol,物理地址)地址是通过虚拟机管理平台的软件生成的,在不同多虚拟化平台使用的情况下,网络不可避免会出现mac地址冲突,而mac地址冲突可能会影响通信的正常进行。



技术实现要素:

有鉴于此,本公开的目的在于提供一种冲突mac地址的处理方法、装置和网络设备,以提升通信的可靠性。

为了实现上述目的,本公开采用的技术方案如下:

第一方面,本公开提供了一种冲突mac地址的处理方法,该方法应用于sdn控制器,该方法包括:向各交换机发送监控流表项,所述监控流表项用于指示将收到的arp协议报文进行复制并将复制的arp协议报文承载于openflow报文中发往所述sdn控制器;

接收承载了复制arp协议报文的openflow报文,根据发送端mac地址执行查找,确定查找到的主机表项的ip地址不同于所述复制arp协议报文的发送端ip地址,确定所述复制arp协议报文的发送端mac地址与所述查找到的主机表项的mac地址为冲突mac地址;

以所述复制arp协议报文的发送端ip地址指示的主机为第一主机,向所述第一主机连接的第一交换机发送第一托管流表项,用于指示将发送端ip地址是所述第一主机的ip地址的arp协议报文承载于openflow报文中发往所述sdn控制器,以托管来自所述第一主机的所有arp协议报文;

以查找到主机表项的ip地址为第二主机,向所述第二主机连接的第二交换机发送第二托管流表项,用于指示将发送端ip地址是所述第二主机的ip地址的arp协议报文承载于openflow报文中发往所述sdn控制器,以托管来自所述第二主机的所有arp协议报文;

所述第一托管流表项和所述第二托管流表项的优先级高于所述监控流表项的优先级。

第二方面,本公开提供了一种冲突mac地址的处理装置,该装置应用于sdn控制器,该装置包括:监控模块,向各交换机发送监控流表项,所述监控流表项用于指示将收到的arp协议报文进行复制并将复制的arp协议报文承载于openflow报文中发往所述sdn控制器;

检测模块,接收承载了复制arp协议报文的openflow报文,根据发送端mac地址执行查找,确定查找到的主机表项的ip地址不同于所述复制arp协议报文的发送端ip地址,确定所述复制arp协议报文的发送端mac地址与所述查找到的主机表项的mac地址为冲突mac地址;

托管模块,以所述复制arp协议报文的发送端ip地址指示的主机为第一主机,向所述第一主机连接的第一交换机发送第一托管流表项,用于指示将发送端ip地址是所述第一主机的ip地址的arp协议报文承载于openflow报文中发往所述sdn控制器,以托管来自所述第一主机的所有arp协议报文;以查找到主机表项的ip地址为第二主机,向所述第二主机连接的第二交换机发送第二托管流表项,用于指示将发送端ip地址是所述第二主机的ip地址的arp协议报文承载于openflow报文中发往所述sdn控制器,以托管来自所述第二主机的所有arp协议报文;

所述第一托管流表项和所述第二托管流表项的优先级高于所述监控流表项的优先级。

第三方面,本公开实施方式提供了一种机器可读存储介质,机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述第一方面所述的方法。

本公开实施方式提供的一种冲突mac地址的处理方法、装置和机器可读存储介质,通过向各交换机发送监控流表项的方式,指示交换机将收到的arp协议报文复制一份并承载于openflow报文发往sdn控制器,在接收到openflow报文时,根据发送端mac地址查找主机表项,确定出存在冲突mac地址时,向冲突mac地址对应的主机(即上述第一主机和第二主机,也简称冲突主机)的交换机发送托管流表项,以对来自冲突主机的arp协议报文进行托管,进而保障该主机的arp报文的正常发送,提升了通信的可靠性。

本公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本公开的上述技术即可得知。

为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施方式,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本公开具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本公开实施方式提供的一种大二层网络环境示意图;

图2为本公开实施方式提供的一种冲突mac地址的处理方法的流程图;

图3为本公开实施方式提供的另一种冲突mac地址的处理方法的流程图;

图4为本公开实施方式提供的一种冲突mac地址的处理装置的结构示意图;

图5为本公开实施方式提供的另一种冲突mac地址的处理装置的结构示意图;

图6为本公开实施方式提供的一种网络设备的结构示意图。

具体实施方式

为使本公开实施方式的目的、技术方案和优点更加清楚,下面将结合附图对本公开的技术方案进行清楚、完整地描述,显然,所描述的实施方式是本公开一部分实施方式,而不是全部的实施方式。基于本公开中的实施方式,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施方式,都属于本公开保护的范围。

需要说明的是,上述各方法实施方式均采用递进的方式描述,每个实施方式重点说明的都是与其他实施方式的不同之处,各个实施方式之间相同相似的部分互相参见即可。

在大二层网络中,一台物理服务器被虚拟化为多台逻辑服务器,称为虚拟机vm(virtualmachine,虚拟机),每个vm都可以独立运行,在网络层面有自己独立的mac地址和ip(internetprotocoladdress,网际协议地址)地址。在vm动态迁移过程中,vm的ip地址不变,保持原有的运行状态,例如,tcp(transmissioncontrolprotocol传输控制协议)会话状态等。

图1示出了一种大二层网络环境示意图,包括sdn控制器((softwaredefinednetworkcontroller,软件定义网络控制器),物理交换机(如图中交换机a和交换机b),物理主机pm1、pm2和pm3,虚拟交换机ovsa,虚拟主机vm1和vm2。其中,sdn控制器可以基于如openflow等协议控制各个交换机对报文的处理行为,sdn控制器与所述交换机间通过openflow报文承载arp(addressresolutionprotocol,地址解析协议)协议报文,包括arp请求报文和arp响应报文,其中,arp协议报文的最外层包括:源mac地址(sourcemac)和目的mac地址(destinationmac),内层包括:发送端mac地址(sendermac)和发送端ip地址(sendermac),以及目标端mac地址(targetmac)和目标端ip地址(targetip)。其中,外层的源mac地址对应的主机指发起arp协议报文的主机,也是内层的发送端mac地址和发送端ip地址对应的主机,目的mac地址对应的主机指arp协议报文的最终要达到的主机,也是内层的目标端mac地址和目标端ip地址对应的主机。

参见图2所示的冲突mac地址的处理方法流程图,该方法应用于上述sdn控制器,该方法包括以下步骤:

步骤s202,向各交换机发送监控流表项,该监控流表项用于指示将收到的arp协议报文进行复制并将复制的arp协议报文承载于openflow报文中发往sdn控制器。

这里的各交换机可以包括sdn控制器所连接的所有交换机。

本公开实施方式中提到的流表项的优先级均高于mac表的优先级,交换机收到arp协议报文时,会先查流表项,如果该arp协议报文在流表项中有匹配项,则按照匹配项中的指示对该arp报文进行处理。如果该arp协议报文在流表项中没有匹配项,则按照arp协议报文的mac地址进行转发等处理。

步骤s204,接收承载了复制arp协议报文的openflow报文,根据发送端mac地址执行查找,确定查找到的主机表项的ip地址不同于复制arp协议报文的发送端ip地址,确定该复制arp协议报文的发送端mac地址与查找到的主机表项的mac地址为冲突mac地址。

如果使用复制arp协议报文的发送端mac地址查找主机表项,且在主机表项中查找到该发送端mac地址对应的表项,而查找到的表项中的ip地址与复制arp协议报文的发送端ip地址不同,则可以确定复制arp协议报文的发送端mac地址与查找到的主机表项的mac地址为冲突mac地址。

步骤s206,以上述复制arp协议报文的发送端ip地址指示的主机为第一主机,向第一主机连接的第一交换机发送第一托管流表项,用于指示将发送端ip地址是第一主机的ip地址的arp协议报文承载于openflow报文中发往所述sdn控制器,以托管来自第一主机的所有arp协议报文。

步骤s208,以查找到主机表项的ip地址为第二主机,向第二主机连接的第二交换机发送第二托管流表项,用于指示将发送端ip地址是第二主机的ip地址的arp协议报文承载于openflow报文中发往sdn控制器,以托管来自第二主机的所有arp协议报文;

其中,上述第一托管流表项和上述第二托管流表项的优先级高于监控流表项的优先级。

本实施方式提供的冲突mac地址的处理方法中,通过向各交换机发送监控流表项的方式,指示交换机将收到的arp协议报文复制一份并承载于openflow报文发往sdn控制器,在接收到openflow报文时,根据发送端mac地址查找主机表项,确定出存在冲突mac地址时,向冲突mac地址对应的主机(即上述第一主机和第二主机,也简称冲突主机)的交换机发送托管流表项,以对来自冲突主机的arp协议报文进行托管,进而保障该主机的arp报文的正常发送,提升了通信的可靠性。

为了描述简洁,上述第一主机连接第一交换机的第一端口,第二主机连接第二交换机的第二端口。

sdn控制器接收到承载了复制arp协议报文的openflow报文后,如果在主机表项中没有查找复制arp协议报文的发送端mac地址对应的表项,则可以在主机表项中记录openflow报文中的发送端主机的主机信息,用于对后续接收的复制arp协议报文进行冲突mac地址分析。基于此,上述方法还包括:至少将承载了复制arp协议报文的openflow报文的发送端mac地址、发送端ip地址、广播域、第一交换机的标识以及第一交换机连接所述第一主机的第一端口,记录一个主机表项。

如果sdn控制器所在的大二层网络中的各个主机处于同一广播域中,则主机信息无需考虑广播域标识,如果各个主机处于至少两个广播域中,则可以在主机信息中引入广播域标识,这种方式中,如果在主机表项中查找到与发送端mac地址和广播域标识匹配的表项中的ip地址与复制arp协议报文中的发送端ip地址不同,则确定复制arp协议报文中的发送端mac地址为冲突mac地址。

为了解除冲突mac地址对通信的干扰,当sdn控制器确定出复制arp协议报文的发送端mac地址与所述查找到的主机表项的mac地址为冲突mac地址的步骤之后,上述方法还包括:向每个交换机发送承载有第一免费arp报文的第一openflow报文和承载有第二免费arp报文的第二openflow报文;

其中,第一免费arp报文的发送端ip地址是第一主机的ip地址,第一免费arp报文的源mac地址和发送端mac地址是上述第一端口的mac地址;

第二免费arp报文的发送端ip地址是第二主机的ip地址,第二免费arp报文的源mac地址和发送端mac地址是上述第二端口的mac地址;

第一openflow报文包括:第一交换机的标识、第一端口的标识和第一端口过滤转发指示;第二openflow报文包括:第二交换机标识、第二端口的标识和第二端口过滤转发指示。

免费arp报文是一种特殊的arp报文,本实施方式中,sdn控制器分别伪装为冲突主机发送免费arp报文,以使接收到该arp报文的主机学习到的冲突主机的mac地址为该冲突主机所连接的交换机的端口mac地址。其中,第一免费arp报文为sdn控制器伪装为第一主机的身份对应的报文,第二免费arp报文为sdn控制器伪装为第二主机的身份对应的报文。

上述第一openflow报文和第二openflow报文之所以包括交换机标识、端口标识和端口过滤转发指示,是用于限制连接冲突主机的交换机在转发免费arp报文时,不通过该端口标识对应的端口发送免费arp报文,进而避免冲突主机接收到自身ip地址对应的免费arp报文,进而避免了出现错误的学习过程。

假设图1中的pm1和pm3冲突,sdn控制器向每个交换机发送承载免费arp报文的openflow报文,其中一个免费arp报文,发送端ip地址是pm1的ip地址,发送端mac地址是交换机a的端口1的mac地址,该openflow报文还包含了交换机a的标识、端口1的标识,以及端口1过滤转发的指示。这样交换机a收到openflow报文后,将免费arp报文发往连接pm1以外的端口,其他交换机会发往所有端口。接收到该免费arp报文的所有主机的arp表项中的ip1对应交换机a的端口1的mac地址。即使pm3预先学习到了pm1的mac地址,接收到免费arp报文后也会将pm1的mac地址修改为交换机a的端口1的mac地址,进而解除了pm3中发现的mac地址冲突。同理,另一个免费arp报文,发送端ip地址是pm3的ip地址,发送端mac地址是交换机b的端口1的mac地址,该openflow报文还包含了交换机b的标识、端口1的标识,以及端口1过滤转发的指示。交换机的后续处理同上类似,这里不再赘述。

sdn控制器通过发送上述免费arp报文,可以使各个主机根据收到的免费arp报文中携带的信息(发送端ip地址、发送端mac地址)对自身维护的arp表进行修改。通过使冲突主机的ip地址对应的mac地址为交换机的端口mac地址,避免了arp表中存在冲突mac地址,干扰正常通信的问题,提示了通信的可靠性。

本实施例除了对来自第一主机和第二主机的所有arp协议报文进行托管外,还可以对发往第一主机和第二主机的arp响应报文进行托管,上述方法还包括:向每个交换机发送第三托管流表和第四托管流表;其中,第三托管流表项指示将目标端ip地址为第一主机的ip地址的arp响应报文发往sdn控制器,以托管发往第一主机的arp响应报文;第四托管流表项指示将目标端ip地址为第二主机的ip地址的arp响应报文发往sdn控制器,以托管发往第一主机的arp响应报文;第三托管流表项和第四流表项的优先级高于监控流表项的优先级。

sdn控制器通过下发上述托管流表项(第一托管流表项至第四托管流表项),能够仅对冲突主机的arp协议报文(包括发往冲突主机的arp协议报文和来自冲突主机的arp协议报文)进行托管,其他主机的arp协议报文只要不是发往冲突主机的,均由交换机进行转发处理,有效减轻了sdn控制器的报文托管负荷,进而保障了报文的转发性能。

上述流表项可以包括匹配项和动作项,其中,匹配项用于指示使用哪个字段进行匹配,动作项用以例如:匹配项指示对于匹配项匹配的报文进行哪些处理,以上述第三托管流表项为例,其匹配项可以是目标端ip地址为第一主机的ip地址的arp响应报文,动作项可以是将与匹配项匹配的arp响应报文发往sdn控制器。

sdn控制器对来自第一主机的所有arp协议报文进行托管的过程中,可以分托管arp请求报文和托管arp响应报文分别进行处理,具体包括:

(1)如果接收到承载了来自第一主机的托管arp请求报文的openflow报文,将源mac地址和发送端mac地址修改为上述第一端口的mac地址,将来自第一主机的修改后的托管arp请求报文承载于openflow报文并发往每个交换机;

(2)如果接收到承载了来自第一主机的托管arp响应报文的openflow报文,将源mac地址和发送端mac地址修改为第一端口的mac地址,将修改后的来自第一主机的托管arp响应报文承载于openflow报文,发往修改后的来自第一主机的托管arp响应报文的目标端ip地址指示的主机所连接的交换机。

同理,sdn控制器对来自第二主机的所有arp协议报文进行托管的过程中,可以分托管arp请求报文和托管arp响应报文分别进行处理,具体包括:

(1)如果接收到承载了来自第二主机的托管arp请求报文的openflow报文,将源mac地址和发送端mac地址修改为上述第二端口的mac地址,将来自第二主机的修改后的托管arp请求报文承载于openflow报文并发往每个交换机;

(2)如果接收到承载了来自第二主机的托管arp响应报文的openflow报文,将源mac地址和发送端mac地址修改为第二端口的mac地址,将修改后的来自第二主机的托管arp响应报文承载于openflow报文,发往修改后的来自第二主机的托管arp响应报文的目标端ip地址指示的主机所连接的交换机。

在对冲突主机相关的arp协议报文托管过程中,通过上述地址修改方式,进一步保障该arp协议报文发送至目标主机。

完成上述arp协议报文中mac地址修改后,sdn控制器将该arp协议报文封装在openflow报文中,在进行报文封装时,按照openflow协议进行,具体分以下几种封装方式:

(1)如果接收到来自第一主机的arp请求报文,且该arp请求报文的目的ip地址不是第二主机的ip地址,将修改mac地址后的arp请求报文、第一交换机标识、第一端口标识和第一端口过滤转发指示封装在openflow报文中,向每个交换机发送该openflow报文。第一交换机通过第一端口外的其他端口广播openflow报文中的arp请求报文,其他交换机在所有端口上广播该arp请求报文。同理,接收到来自第二主机的arp请求报文处理类似。

(2)如果接收到来自第一主机的arp响应报文,且该arp响应报文的目的ip地址不是第二主机的ip地址,将修改mac地址后的arp响应报文、目的ip地址对应的交换机标识封装在openflow报文中,由该交换机将该arp响应报文发送至目的主机(即上述目标端主机)。同理,接收到来自第二主机的arp响应报文处理类似。

(3)如果接收到发往第一主机的arp请求报文,且该arp请求报文的发送端ip地址不是第二主机的ip地址,将修改mac地址后的arp请求报文、发送端ip地址对应的主机连接的交换机的标识、入端口标识和入端口过滤转发指示封装在openflow报文中,向每个交换机发送该openflow报文。各个交换机接收到报文的广播方式同上类似。同理,接收到发往第二主机的arp请求报文处理类似。

(4)如果接收到发往第一主机的arp响应报文,且该arp响应报文的发送端ip地址不是第二主机的ip地址,将修改mac地址后的arp响应报文、第一交换机标识和第一端口标识封装在openflow报文中,由第一交换机将该arp响应报文发送至第一主机。同理,接收到发往第二主机的arp响应报文处理类似。

(5)如果接收到第一主机向第二主机发送的arp响应报文,修改该arp响应报文的发送端mac地址为第一交换机的第一端口mac地址,目标端mac地址为冲突mac地址,将修改mac地址后的arp响应报文、第二交换机标识和第二端口标识封装在openflow报文中,由第二交换机通过第二端口发送该arp响应报文至第二主机。同理,接收到第二主机发往第一主机的arp响应报文处理类似。

通过sdn控制器托管冲突主机的arp协议报文,并对arp协议报文应用上述mac地址的修改和封装方式,可以降低对交换机的硬件要求,交换机在不支持协议报文的地址修改功能时,依然保障上述arp协议报文正常发送,实现简单合理。

考虑到交换机通常可以对数据报文的报文头进行修改,针对数据报文的处理,sdn控制器分别向第一交换机和第二交换机下发对应的流表项,用以指示第一交换机和第二交换机对冲突主机的数据报文进行mac地址修改操作。基于此,上述方法还包括:

(1)向第一交换机发送第一源地址转换流表项和第一目的地址转换流表项;该第一源地址转换流表项,用于指示将源mac地址是冲突mac地址的数据报文修改为源mac地址是上述第一端口的mac地址的数据报文;该第一目的地址转换流表项,用于指示将目的mac地址是第一端口的mac地址的数据报文修改为目的mac地址是冲突mac地址的数据报文;

(2)向第二交换机发送第二源地址转换流表项和第二目的地址转换流表项;该第二源地址转换流表项,用于指示将源mac地址是冲突mac地址的数据报文修改为源mac地址是上述第二端口的mac地址的数据报文;该第二目的地址转换流表项,用于指示将目的mac地址是第二端口的mac地址的数据报文修改为目的mac地址是冲突mac地址的数据报文。

通过下发上述第一源地址转换流表项和第一目的地址转换流表项,以及第二源地址转换流表项和第二目的地址转换流表项,使第一交换机和第二交换机接收到冲突主机的数据报文后,能够根据上述流表项进行mac地址修改操作,完成地址修改后,转发该数据报文,数据报文的转发处理无需在sdn控制器上进行托管,减轻了sdn控制器的负荷,进而保障了数据报文的转发性能。

以图1所示的大二层网络环境为例,本实施方式提供了图3所示的冲突mac地址的处理方法的流程图,该方法中,假设sdn控制器已经保存的主机表项(可以称为主机信息表),如表1所示:

表1

其中,主机表项中通常记录有各个报文对应的主机信息,例如,表1中的发送端mac地址、发送端ip地址、主机所连接交换机的交换机标识和端口标识以及主机的广播域标识,其中,发送端mac地址和发送端ip地址为主机的mac地址和ip地址,交换机标识通常可以用交换机的ip地址表示,为描述方便,本公开实施方式中用交换机的名称表示。

本实施方式中,如表1所示,pm1的主机信息:mac地址为0001-0002-0001,ip地址为10.0.0.2,连接交换机a的端口1,广播域标识为1。pm2的主机信息:mac地址为0001-0002-0002,ip地址为10.0.0.3,连接交换机a的端口2,广播域标识为2。vm1的主机信息:mac地址为0001-0002-0005,ip地址为10.0.0.5,连接ovsa的端口1,广播域标识为3。

考虑到主机迁移或下线等情况,为了使主机表项中记录的主机信息合理有效,上述主机表项可以以探测主机的方式维护。其中,探测主机的方式主要是探测主机表项中的主机是否还在线,具体可以包括:sdn控制器获取预存的主机表项,检查主机是否接近老化周期(即老化时间接近0或某一阈值),如果接近老化周期,通过openflow协议,在主机对应的交换机端口发送arp请求报文,主机回应该arp请求报文后,回复arp响应报文,交换机将该响应报文转发到sdn控制器,sdn控制器根据接收的响应报文更新主机对应的老化时间。如果主机没有回应,当老化时间为0时,从主机表项中删除该主机对应的表项。通过这种主机表项的维护方式,可以简化主机表项,提升查表效率。

下面以pm1向pm3发送数据,而pm1的arp表中没有pm3对应的arp表项为例进行说明,参见图3所示的冲突mac地址的处理方法的流程图,该方法包括以下步骤:

步骤s300,向各交换机(如图中交换机a和交换机b、ovsa)发送监控流表项,该监控流表项用于指示将收到的arp协议报文进行复制并将复制的arp协议报文承载于openflow报文中发往所述sdn控制器。

上述交换机a、交换机b和ovsa保存该监控流表项,用于在接收到arp协议报文时,复制一份arp协议报文,并将该arp协议报文承载于openflow报文中发往sdn控制器。

步骤s302,pm1根据pm3的ip地址检查本地的arp表,未查找到pm3对应的arp表项,以广播方式发送一个arp请求报文。

其中,上述arp请求报文中的发送端ip地址和发送端mac地址为pm1的ip地址和mac地址,目标端ip地址和目标端mac地址为pm3的ip地址和全f的mac地址。

步骤s304,交换机a接收到上述arp请求报文后,以广播方式发送该arp报文,并根据上述监控流表项复制arp请求报文,将该arp请求报文承载于openflow报文中发往sdn控制器;

该openflow报文除了包括arp请求报文,还包括交换机a标识,连接pm1的端口1以及pm1所属的广播域标识1。

步骤s306,如果sdn控制器接收到上述openflow报文,解析得到pm1的主机信息,使用pm1的主机信息刷新主机表项。

sdn控制器收到上述openflow报文后,根据报文中的发送端mac地址、发送端ip地址、交换机名称和端口,以及vlan/vxlan标识刷新主机表项,识别报文中的mac地址是否存在冲突,可以在刷新表项的过程中进行,判断的主要原则:以mac+vlan/vxlan+ip作为冲突判断的依据,如果比较发现报文中的mac+vlan/vxlan+ip与表项中的mac+vlan/vxlan+ip均相同(其中,“+”表示+前后的信息为和的关系),而接入信息(交换机标识+端口标识)不同,则属于主机迁移情况,如果mac+vlan/vxlan相同,ip地址不同(通常接入信息也不同),则存在mac地址冲突。主机表项的刷新的过程如下:

(1)如果arp请求报文中的发送端mac地址和vlan/vxlan标识未存在于主机表项中,增添新的表项。

(2)如果发送端mac地址和vlan/vxlan标识已经存在于主机表项中,需检查主机表项中的ip地址和报文中的发送端ip地址是否相同,由于无论是物理主机还是虚拟主机,在同一广播域中,其发送端ip地址都是自身独有的,不会存在冲突,且由于ip地址与mac地址之间存在映射关系,因此,正常情况下,不同的ip地址也对应着不同的mac地址。如果主机表项中的ip地址和发送端ip地址不同,且,发送端mac地址和vlan/vxlan标识已经存在于主机表项中,即不同的ip地址对应了相同的mac地址,此时,可以确定发送端mac地址与查找到的主机表项中的mac地址为冲突mac地址。

(3)如果发送端mac地址和vlan/vxlan标识已经存在于主机表项中,且主机表项中的ip地址和发送端ip地址相同,此时需要检查主机表项中的接入信息(交换机标识和端口标识)与报文的接入信息是否一致,具体地,检查交换机标识和端口标识是否一致,如果一致说明该主机的主机信息已经保存过了,需要刷新一下老化时间。如果不一致,说明表项对应的主机发生了迁移,需要重新根据报文添加表项,即使用报文中的接入信息更新表项中的接入信息,并刷新表项的老化时间。

本实施方式中,pm1的主机信息包括:mac地址为0001-0002-0001,ip地址为10.0.0.2,连接交换机a的端口1,广播域标识为1。检查该主机信息在表1所示的主机表项中存在匹配表项,且对应的信息均一致,说明该pm1未发生迁移且未发现冲突mac地址。因此此次sdn控制器仅需要更新表1中第一个表项的老化时间。

步骤s308,如果pm3接收到上述arp请求报文,检查arp请求报文中的目标端ip地址与自己的ip地址匹配,则将pm1的ip地址和mac地址映射添加到本地arp表中。

其它主机接收到arp请求报文,检查arp请求报文中的dip地址与自己的ip地址不匹配,将丢弃arp请求报文。

步骤s310,pm3将包含其mac地址的arp响应报文直接发送回pm1。该arp回复报文在经过交换机b时,交换机b根据上述监控流表项复制一份arp响应报文,将arp响应报文封装于openflow报文中,发往sdn控制器。该封装过程与上述封装过程类似,这里不再赘述。

步骤s312,如果pm1收到上述arp响应报文,将pm3的ip地址和mac地址的映射关系保存在本地arp表中,后续pm1将可以根据arp表向pm3发送数据报文。

上述arp表中的映射关系有生存期,生存期结束后,可以再次重复上面的arp请求过程。

步骤s314,sdn控制器接收到交换机b上送的承载了arp响应报文的openflow报文,根据发送端mac地址(即pm3的mac地址)执行查找,确定查找到的主机表项的ip地址不同于arp响应报文的发送端ip地址(即pm3的ip地址),确定arp响应报文的发送端mac地址与查找到的主机表项的mac地址(pm1的mac地址)为冲突mac地址,即确定出pm1和pm3对应的mac地址为冲突mac地址。

本次刷新过程同上所述,假设pm1和pm3同属广播域1,且二者的mac地址相同,均为0001-0002-0001,而pm1的ip地址为10.0.0.2,pm3的ip地址为10.0.0.3,所以sdn控制器在进行主机表项刷新过程发现,报文中的发送端mac地址和vlan/vxlan标识已经存在于主机表项中,检查主机表项中的ip地址和报文中的发送端ip地址又不相同,所以确定出存在冲突mac地址。为了更清楚地说明冲突mac地址,如果不进行本公开实施方式提供的冲突mac地址的处理,sdn控制器刷新后的主机表项将会如表2所示。

表2

由表2可以清楚地确定,发送端mac地址0001-0002-0001为冲突mac地址。

步骤s316,sdn控制器向每个交换机发送承载有第一免费arp报文的第一openflow报文和承载有第二免费arp报文的第二openflow报文。其中第一免费arp报文,发送端ip地址是pm1的ip地址,发送端mac地址是交换机a的端口1的mac地址,该openflow报文还包含了交换机a标识、端口1标识,以及端口1过滤转发的指示。

这样交换机a收到openflow报文,将免费arp发往连接pm1以外的端口,其他交换机会发往所有端口。所有主机的arp表项中的pm1的ip地址将对应交换机a的端口1的mac地址,进而解除了pm3中之前学习到的pm1的mac地址为冲突mac地址的问题。

第二免费arp报文也承载于openflow报文中,其发送端ip地址是pm3的ip地址,发送端mac地址是交换机b的端口1的mac地址,该openflow报文还包含了交换机b的标识、端口1的标识,以及端口1过滤转发的指示。交换机的后续处理同上类似,这里不再赘述。

步骤s318,sdn控制器向交换机a发送托管来自pm1的arp协议报文(包括请求和响应报文)的第一托管流表项。该表项的匹配项指示发送端ip地址是pm1的ip地址的arp协议报文,动作项是将该arp协议报文封装在openflow报文发往sdn控制器。

步骤s320,sdn控制器向交换机b发送托管来自pm3的arp协议报文(包括请求和响应报文)的第二托管流表项。该表项的匹配项指示发送端ip地址是pm3的ip地址的arp协议报文,动作项是将arp协议报文封装在openflow报文发往sdn控制器。

步骤s322,sdn控制器向每个交换机发送第三托管流表项和第四托管流表,用于托管发往pm1和pm3的arp响应报文(包括请求和响应)。其中第三托管流表项,匹配项指示目标端ip地址是pm1的ip地址的arp响应报文,动作项是将arp响应报文封装在openflow报文发往sdn控制器。第四托管流表的匹配项指示目标端ip地址是pm3的ip地址的arp响应报文,动作项是将arp响应报文封装在openflow报文发往sdn控制器。

通过上述步骤s318至步骤s322,sdn控制器可以实现只对冲突主机的arp协议报文进行托管,减低了sdn控制器的处理压力。

完成上述流表项的下发后,假设pm3向pm1回复arp响应报文,交换机b将arp响应报文上送到sdn控制器,sdn控制器发现该arp响应报文的发送端ip地址为pm3的ip地址,其发送端mac地址为冲突mac地址,确定存在mac地址冲突,把arp响应报文中的源mac地址和发送端mac地址修改为交换机b的端口1的mac地址,因为该arp响应报文的目标端mac地址为交换机a的端口1的mac地址,sdn控制器把目标端mac地址修改为冲突mac,然后修改后的arp响应报文封装在openflow报文,带上连接pm1的端口1标识发到交换机a。交换机a根据端口1标识发送arp响应报文。这样,pm1上,pm3的ip地址映射为交换机b的端口1的mac地址。

如果vm1发送arp响应报文给pm1,交换机(ovsa)上送arp响应报文到sdn控制器,sdn控制器发现不存在mac地址冲突,只把目标端mac修改为冲突mac,将改后的arp响应报文封装在openflow报文,带上连接pm1的端口1标识发到交换机a。交换机a根据端口1标识发送该arp响应报文。

完成上述流表项的下发后,pm1和pm3再发送arp请求报文或者arp响应报文,也会根据发送端ip地址查流表项发往sdn控制器进行处理。例如:pm1向vm1发送arp请求报文,交换机a根据发送端ip地址,把arp请求报文封装在openflow报文发到sdn控制器,sdn把源mac地址和发送端mac地址改成交换机a的端口1的mac地址,然后sdn控制器通过openflow报文把arp请求报文,交换机a标识和入端口信息(即端口1标识和端口1的过滤转发指示)发送交换机a、ovsa,交换机b。交换机a通过端口1以外的端口广播,ovsa和交换机b在所有端口广播。

如果vm1发送arp响应报文给pm1,ovsa根据目标端ip匹配的流表项,把arp响应报文发到sdn控制器,sdn控制器把arp响应报文的目标端mac地址改回冲突mac地址,通过openflow报文发到交换机a。交换机a把arp响应报文发到pm1。

pm3的处理相同。这样,sdn控制器将来自冲突的两个主机的arp请求报文都修改成各自连接的交换机的端口mac地址,将发往两个冲突的主机的arp响应报文都修改回冲突的mac地址;

如果pm2主机发送arp请求报文,其中目标端ip地址是pm1的ip地址,用于请求pm1的mac地址,交换机a根据目标端ip地址将arp请求报文发到sdn控制器,sdn控制器通过openflow报文把arp请求、交换机标识和入端口信息发送交换机a、ovsa和交换机b。交换机a通过入端口以外的端口广播,交换机b、ovsa在所有端口广播。这样所有交换机都不会对来自冲突mac的主机的arp请求报文的mac地址进行学习了。

如果pm1向pm2发送arp响应报文,其中发送端ip地址和发送端mac地址是pm1的ip地址和冲突mac地址,目标端ip地址和目标端mac地址是pm2的ip地址和mac地址。交换机a查找到发送端ip地址匹配的流表项发往sdn控制器。sdn把源mac地址和发送端mac地址改成交换机a的端口1的mac地址,然后sdn控制器通过openflow报文把arp请求报文和出端口发送交换机a。交换机a通过出端口将修改后arp响应报文发到pm2。

pm3的arp报文的处理与pm1的处理类似。

即使后续pm1和pm3上的arp表项老化,pm1请求pm3的mac地址时,sdn控制器会修改发送端mac地址和目标端mac地址,确保pm1学习到pm3连接的交换机端口的mac地址,反之亦然。

步骤s324,sdn控制器向交换机a下发第一源地址转换流表项和第一目的地址转换流表项,用以指示交换机a修改来自pm1的数据报文的源mac地址为交换机a的端口1的mac地址,以及将发往pm1的数据报文的目的mac地址修改回冲突mac地址。

具体实现时,第一源地址转换流表项的匹配项指示源ip地址是pm1的ip地址、源mac地址是0001-0002-0001和vlan/vxlan标识为1的数据报文,动作项是将数据报文的源mac地址修改为交换机a的端口1的mac地址;该流表项用以指示交换机a修改来自冲突主机pm1的数据报文的源mac地址。

第一目的地址转换流表项的匹配项指示目的ip地址是pm1的ip地址、目的mac地址是交换机a的端口1的mac地址和vlan/vxlan标识为1的数据报文,动作项是将该数据报文的目的mac地址修改为pm1的mac地址0001-0002-0001(即冲突mac),该流表项用以将发往冲突主机pm1的数据报文的目的mac地址修改回冲突mac地址。

步骤s326,sdn控制器向交换机b下发第二源地址转换流表项和第二目的地址转换流表项,用以指示交换机b修改来自pm3的数据报文的源mac地址为交换机b的端口1的mac地址,以及将发往pm3的数据报文的目的mac地址修改回冲突mac地址。

具体实现时,第二源地址转换流表项的匹配项指示源ip地址是pm3的ip地址、源mac地址是pm3的mac地址0001-0002-0001和vlan/vxlan标识为1的数据报文,动作项是将该数据报文的源mac地址修改为交换机b的端口1的mac地址;

第二目的地址转换流表项的匹配项指示目的ip地址是pm3的ip地址、目的mac地址是交换机b的端口1的mac地址和vlan/vxlan标识为1的数据报文,动作项是将目的mac地址修改为pm3的mac地址0001-0002-0001(即冲突mac)。

这样,后期pm1再发送数据报文,交换机a根据流表项将源mac地址修改后发送。交换机a收到目的mac地址是交换机a的端口1的mac地址的数据报文,会将目的mac地址修改为pm1的mac0001-0002-0001,再发送到pm1。pm3的处理相同。即使pm1和pm3之间互发数据报文,也没问题。

上述步骤s316至步骤s326间的顺序可以灵活调整,本公开实施方式对此不进行限定。

本公开实施方式提供的一种冲突mac地址的处理方法,能够在接收到报文时,提取报文携带的主机信息,并根据该主机表项确定是否存在冲突mac地址,具体可以以mac+vlan/vxlan+ip作为冲突判断的依据,如果比较发现mac+vlan/vxlan+ip均相同,而接入信息(交换机标识+端口标识)不同,则属于主机迁移情况,如果mac+vlan/vxlan相同,ip地址不同(通常接入信息也不同),则存在mac地址冲突。在确定出冲突mac地址后,进行mac地址替换操作,使冲突mac地址对应的主机在大二层网络中能够继续保持互通,保证了网络通信的正常运行,同时,也提高了用户的体验度。

对应于上述实施方式提供的冲突mac地址的处理方法,本公开实施方式还提供了一种冲突mac地址的处理装置,应用于sdn控制器,sdn控制器与交换机间通过openflow报文承载arp协议报文,如图4所示的一种冲突mac地址的处理装置的结构示意图,该装置包括:

监控模块42,用于向各交换机发送监控流表项,该监控流表项用于指示将收到的arp协议报文进行复制并将复制的arp协议报文承载于openflow报文中发往sdn控制器;

检测模块44,用于接收承载了复制arp协议报文的openflow报文,根据发送端mac地址执行查找,确定查找到的主机表项的ip地址不同于复制arp协议报文的发送端ip地址,确定复制arp协议报文的发送端mac地址与查找到的主机表项的mac地址为冲突mac地址;

托管模块46,用于以复制arp协议报文的发送端ip地址指示的主机为第一主机,向第一主机连接的第一交换机发送第一托管流表项,用于指示将发送端ip地址是第一主机的ip地址的arp协议报文承载于openflow报文中发往sdn控制器,以托管来自第一主机的所有arp协议报文;以查找到主机表项的ip地址为第二主机,向第二主机连接的第二交换机发送第二托管流表项,用于指示将发送端ip地址是第二主机的ip地址的arp协议报文承载于openflow报文中发往sdn控制器,以托管来自第二主机的所有arp协议报文;

其中,第一托管流表项和第二托管流表项的优先级高于监控流表项的优先级。

在其中一种实施方式中,上述托管模块46,用于向每个交换机发送承载有第一免费arp报文的第一openflow报文和承载有第二免费arp报文的第二openflow报文;

其中,第一免费arp报文的发送端ip地址是第一主机的ip地址,第一免费arp报文的源mac地址和发送端mac地址是第一交换机连接第一主机的第一端口的mac地址;

第二免费arp报文的发送端ip地址是第二主机的ip地址,第二免费arp报文的源mac地址和发送端mac地址是第二交换机连接第二主机的第二端口的mac地址;

第一openflow报文包括:第一交换机的标识、第一端口的标识和第一端口过滤转发指示;第二openflow报文包括:第二交换机标识、第二端口的标识和第二端口过滤转发指示。

在其中一种实施方式中,托管模块46还用于:向每个交换机发送第三托管流表项和第四托管流表;其中,第三托管流表项指示将目标端ip地址为第一主机的ip地址的arp响应报文发往sdn控制器,以托管发往第一主机的arp响应报文;

第四托管流表项指示将目标端ip地址为第二主机的ip地址的arp响应报文发往sdn控制器,以托管发往第一主机的arp响应报文;

第三托管流表项和第四流表项的优先级高于监控流表项的优先级。

上述托管模块46还用于:如果接收到承载了来自第一主机的托管arp请求报文的openflow报文,将源mac地址和发送端mac地址修改为第一交换机连接第一主机的第一端口的mac地址,将来自第一主机的修改后的托管arp请求报文承载于openflow报文并发往每个交换机;如果接收到承载了来自第一主机的托管arp响应报文的openflow报文,将源mac地址和发送端mac地址修改为第一端口的mac地址,将修改后的来自第一主机的托管arp响应报文承载于openflow报文,发往修改后的来自第一主机的托管arp响应报文的目标端ip地址指示的主机所连接的交换机。

在其中一种实施方式中,托管模块46还用于:接收承载了来自第二主机的托管arp请求报文的openflow报文,将源mac地址和发送端mac地址修改为第二交换机连接第二主机的第二端口的mac地址,将来自第二主机的修改后的托管arp请求报文承载于openflow报文并发往每个交换机;接收承载了来自第二主机的托管arp响应报文的openflow报文,将源mac地址和发送端mac地址修改为第二端口的mac地址,将修改后的来自第二主机的托管arp响应报文承载于openflow报文,发往修改后的来自第二主机的托管arp响应报文的目标端ip地址指示的主机所连接的交换机。

在其中一种实施方式中,托管模块46还用于:接收承载于openflow报文的发往第一主机的托管arp响应报文的openflow报文,将目的mac地址和目标端mac地址由第一交换机连接第一主机的第一端口的mac地址修改为冲突mac地址,将发往第一主机的修改后的托管arp响应报文承载于openflow报文并发往第一交换机;接收承载了发往第二主机的托管arp响应报文的openflow报文,将目的mac地址和目标端mac地址由第二交换机连接第二主机的第二端口的mac地址修改为所冲突mac地址,将发往第二主机的修改后的托管arp响应报文承载于openflow报文并发往第二交换机。

在其中一种实施方式中,托管模块46还用于:向第一交换机发送第一源地址转换流表项和第一目的地址转换流表项;第一源地址转换流表项,用于指示将源mac地址是冲突mac地址的数据报文修改为源mac地址是第一交换机连接第一主机的第一端口的mac地址的数据报文;第一目的地址转换流表项,用于指示将目的mac地址是第一端口的mac地址的数据报文修改为目的mac地址是冲突mac地址的数据报文;

向第二交换机发送第二源地址转换流表项和第二目的地址流表项;第二源地址转换流表项,用于指示将源mac地址是冲突mac地址的数据报文修改为源mac地址是第二交换机连接第二主机的第二端口的mac地址的数据报文;第二目的地址转换流表项,用于指示将目的mac地址是第二端口的mac地址的数据报文修改为目的mac地址是冲突mac地址的数据报文。

在图5所示的另一种冲突mac地址的处理装置的结构示意图中,上述装置还包括:记录模块48,用于至少将承载了复制arp协议报文的openflow报文的发送端mac地址、发送端ip地址、广播域、第一交换机的标识以及第一交换机连接第一主机的第一端口,记录一个主机表项。

本公开实施方式所提供的冲突mac地址的处理装置,其实现原理及产生的技术效果和前述方法实施方式相同,为简要描述,装置实施方式部分未提及之处,可参考前述方法实施方式中相应内容。

在上述实施方式的基础上,本公开实施方式还提供了一种网络设备,包括处理器和存储器,存储器存储有能够被处理器执行的机器可执行指令,处理器执行机器可执行指令以实现上述冲突mac地址的处理方法。

具体实现时,本公开实施方式还提供了一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述冲突mac地址的处理方法。

参见图6,本公开实施方式还提供一种网络设备的结构示意图,包括:处理器600,存储器601,总线602和通信接口603,处理器600、通信接口603和存储器601通过总线602连接;处理器600用于执行存储器601中存储的可执行模块,例如计算机程序。

其中,存储器601可能包含高速随机存取存储器(ram,randomaccessmemory),也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个通信接口603(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。

总线602可以是isa总线、pci总线或eisa总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

其中,存储器601用于存储程序,处理器600在接收到执行指令后,执行程序,前述本公开任一实施方式揭示的冲突mac地址的处理装置所执行的方法可以应用于处理器600中,或者由处理器600实现。

处理器600可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器600中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器600可以是通用处理器,包括中央处理器(centralprocessingunit,简称cpu)、网络处理器(networkprocessor,简称np)等;还可以是数字信号处理器(digitalsignalprocessing,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)、现成可编程门阵列(field-programmablegatearray,简称fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本公开实施方式中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本公开实施方式所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器601,处理器600读取存储器601中的信息,结合其硬件完成上述方法的步骤。

在本公开所提供的几个实施方式中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施方式仅仅是示意性的,例如,附图中的流程图和框图显示了根据本公开的多个实施方式的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本公开各个实施方式中的各功能模块或单元可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施方式方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上实施方式,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施方式对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施方式所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施方式技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1