基于SDN框架实现VxLAN的ARP广播抑制系统及方法
技术领域
本发明涉及数据中心的VxLAN(Virtual extensible LAN,虚拟可扩展局域网)领域,具体涉及一种基于SDN(Software DefinedNetwork,软件定义网关)框架实现VxLAN的ARP(Address ResolutionProtocol,地址解析协议)广播抑制系统及方法。
背景技术
VxLAN是一种可扩展的虚拟局域网,VxLAN在扩展性方面优于VLAN(Virtual Local Area Network,虚拟局域网)技术。VxLAN应用于数据中心内部,VxLAN使得虚拟机能够在不需要改变IP地址和MAC(Media Access Control,媒体访问控制)地址的条件下,互相连通的三层网络范围内迁移,进而保证业务的连续性。
VxLAN采用24bit(位)的网络标识,使用户能够创建16M相互隔离的虚拟网络,突破了目前广泛采用的VLAN所能表示的4K个隔离网络的限制,进而使得大规模多租户的云环境中具有了充足的虚拟网络分区资源。
目前,最新的VxLAN标准文档建议使用VTEP(VXLAN TunnelEndpoint,VxLAN隧道终端)代理ARP应答的方式来减少ARP广播报文。
但是,由于单个VTEP没有全局的拓扑信息,因此单个VTEP只能通过组播的方式将报文发送给其他VTEP,以获取要访问终端的MAC地址。使用组播VTEP替代ARP广播不仅实现角度比较复杂,而且组播报文是一种变相的广播,实际上并没有减少广播报文,不便于人们使用。
申请号为CN201310646140.1的发明专利申请《一种在VxLAN中发送ARP报文发送方法、VTEP及VxLAN控制器》公开了在VxLAN中发送ARP报文的发送方法,但是该发明专利申请存在以下缺陷:
(1)该发明专利申请通过组播代替广播发送ARP报文,实现比较困难,不便于人们使用。
(2)该发明专利申请只能代理应答ARP,不代理ARP的请求,当在同一个VLAN交换机下的2台虚拟机进行互相通讯,且不和另一侧的VxLAN Gateway下的终端进行互通时,该发明专利申请中的所述两个终端每发送一次ARP广播请求就会造成全网组播该ARP广播。例如:该发明专利申请的附图1中的2台VM(Virtual Machine,虚拟机)存在于同一个非SDN交换机之下,当2台VM不主动和其他设备进行通信时,只要1台VM发起ARP请求,学习另一台VM的MAC地址,就会引发全网的ARP广播。因此,该发明专利申请抑制广播的效果较差。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于SDN框架实现VxLAN的ARP广播抑制系统及方法,不仅实现比较容易,能够显著减少ARP广播报文的传递次数,而且能够避免多种场景下的ARP广播,抑制广播的效果较好,便于人们使用。
为达到以上目的,本发明提供的一种基于SDN框架实现VxLAN的ARP广播抑制系统,包括软件定义网关SDN框架,SDN框架包括SDN控制器、若干可扩展局域网网关VxLAN Gateway和若干VLAN交换机,SDN控制器与所有VxLAN Gateway相连,每台VxLAN Gateway分别与若干台VLAN交换机相连;
所述SDN控制器包括顺次相连的SDN网络交换模型OpenFlow接口模块、互通域管理模块、拓扑管理模块、地址解析协议ARP代理模块和IP处理模块;
所述VxLAN Gateway包括顺次相连的配置管理模块、VxLANOpenFlow接口模块、流表管理模块、隧道封装模块、隧道解封装模块和VxLAN收发包模块;
所述VLAN交换机包括VLAN收发包模块和VLAN ID模块;
所述SDN控制器的SDN OpenFlow接口模块用于:接收并处理VxLAN OpenFlow接口模块上报至SDN控制器的流;下发SDN控制器的处理数据包至VxLAN OpenFlow接口模块;
所述SDN控制器的互通域管理模块用于:接收并读取SDN控制器与所有VxLAN Gateway之间的通讯配置,转发通讯配置至拓扑管理模块;
所述SDN控制器的拓扑管理模块包括VxLAN Gateway管理子模块、VLAN交换机管理子模块和用户管理子模块,VxLAN Gateway管理子模块、VLAN交换机管理子模块和用户管理子模块通过一个链表相互关联;
所述VxLAN Gateway管理子模块用于:根据通讯配置保存所有VxLAN Gateway的VxLAN通信信息;
所述VLAN交换机管理子模块用于:保存所有VLAN交换机的VLAN通信信息,VLAN通信信息包括VLAN交换机的VLAN ID、互通域VNI值、以及VLAN交换机所属的VxLAN Gateway的WAN口IP地址;
所述用户管理子模块用于:保存所有VLAN交换机下的用户信息,用户信息包括:用户的IP地址、MAC地址、用户所属VxLANGateway的WAN口IP地址;
所述SDN控制器的ARP代理模块用于:为SDN控制器代理请求ARP消息,为SDN控制器代理ARP请求会在源VxLAN Gateway的LAN口重新广播代理查询;为SDN控制器代理应答ARP消息;
所述SDN控制器的IP处理模块用于:根据通讯配置获取所有VxLan Gateway上报的ARP数据类型之外的流的处理流程,处理流程包括VLAN ID的修改、隧道的封装和隧道的解封装;
所述VxLAN Gateway的配置管理模块用于:读取VxLANGateway程序运行后的参数信息,通过参数获取VxLAN Gateway需要连接的SDN控制器IP地址和OpenFlow端口;
所述VxLAN Gateway的VxLAN OpenFlow接口模块采用OpenFlow协议标准,其用于:在VxLAN Gateway和SDN控制器之间建立连接;上报VxLAN Gateway在流表管理模块中未找到的流至SDN控制器;接收并处理SDN控制器下发的处理流程;
所述VxLAN Gateway的流表管理模块用于:保存SDN控制器对VxLAN Gateway上报的流的处理流程;
所述VxLAN Gateway隧道封装模块用于:VxLAN Gateway接收到上行流后,通过流表管理模块获取当前上行流的处理流程,根据处理流程为当前上行流添加VxLAN隧道,形成封装数据包,以使得当前上行流能够在三层网络中通讯;
所述VxLAN Gateway的隧道解封装模块用于:VxLAN Gateway接收到下行流后,通过流表管理模块获取当前下行流的处理流程,根据处理流程为当前下行流去除VxLAN隧道、并修改VLAN ID,形成解封数据包,以使得当前下行流能够在二层网络中通讯;
所述VxLAN Gateway的VxLAN收发包模块包括VxLAN收包子模块和VxLAN发包子模块;
所述VxLAN收包子模块用于:接收VxLAN Gateway的每一个网口的数据包;
所述VxLAN发包子模块用于:将封装数据包和解封数据包通过SDN控制器要求的网口转发,封装数据包通过VxLAN Gateway的WAN口转发,解封数据包通过VxLAN Gateway的LAN口转发;
所述VLAN交换机的VLAN收发包模块包括VLAN收包子模块和VLAN发包子模块;
所述VLAN收包子模块用于:接收VLAN的每一个网口的数据包;
所述VLAN发包子模块用于:将接收的上行数据包发送至VxLAN Gateway;将接收的下行数据包发送至所属于VLAN的用户;
所述VLAN交换机的VLAN ID模块包括VLAN ID添加子模块和VLAN ID删除子模块;
所述VLAN ID添加子模块用于:为VLAN交换机接收的上行数据包添加VLAN头部,VLAN头部包括VLAN ID信息;
VLAN ID删除子模块用于:为VLAN交换机接收的下行数据包去除VLAN头部。
在上述技术方案的基础上,所述互通域管理模块中的通讯配置通过web界面配置或配置文件配置,通讯配置包括VxLAN Gateway的IP地址、局域网LAN口值、LAN口的媒体访问控制MAC地址、广域网WAN口值、WAN口的MAC地址、WAN口下一跳路由IP地址和MAC地址。
在上述技术方案的基础上,所述ARP代理模块为SDN控制器代理请求ARP消息时,SDN控制器收到SDN OpenFlow的OpenFlow协议中交换机上报至控制器的信息OFPT_PACKET_IN打包的ARP请求后,若未查询到请求目的IP的MAC地址记录,则虚拟一个虚拟机VM IP地址,并代理VM查询VM IP的MAC地址;
所述ARP代理模块为SDN控制器代理应答ARP消息的过程时,SDN控制器收到OFPT_PACKET_IN打包的ARP请求后,若查询到请求目的IP的MAC地址,则直接代理该目的IP回复ARP应答,将ARP应答通过SDN OpenFlow的OpenFlow协议中控制器下发至交换机策略信息OFPT_PACKET_OUT打包形成ARP回复REPLY信息,将ARP REPLY信息通过VxLAN Gateway转发给请求者。
在上述技术方案的基础上,所述VxLAN Gateway的流表管理模块保存SDN控制器对VxLAN Gateway上报流的处理流程时,VxLANGateway接收到上行流或下行流后,流表管理模块查找当前上行流或下行流是否存在,若是,确定当前上行流或下行流不是首次发送,按照当前上行流或下行流处理流程处理并发送当前上行流或下行流;否则确定当前上行流或下行流为首次发送,将当前上行流或下行流通过VxLAN OpenFlow接口模块发送至SDN控制器OpenFlow接口模块。
本发明提供的一种用于上述广播抑制系统的基于SDN框架实现VxLAN的ARP广播抑制方法,包括以下步骤:
S1:在SDN控制器的互通域管理模块预设所有VxLAN Gateway的互通域配置,转到步骤S2;
S2:定义发出ARP请求的用户为请求用户HostA,HostA使用的VLAN交换机为VLANA,VLANA所属的VxLAN Gateway为VxLAN GatewayA;与HostA不同VLAN、且为HostA发送ARP请求包的用户为目的用户HostB,HostB使用的VLAN交换机为VLANB,VLANB的VxLAN Gateway为VxLAN GatewayB;
HostA请求HostB的ARP请求时,HostA向VLANA的VLAN收包子模块发送ARP请求包,VLANA的VLAN ID添加子模块为ARP请求包添加VLAN头部,转到步骤S3;
S3:VLANA的发包子模块将当前ARP请求包发送至VxLANGateway A的VxLAN收发包模块,VxLAN收发包模块通过当前ARP请求包的五元组组成一条流,所述五元组包括当前ARP请求包的源IP地址、目的IP地址、源MAC地址、目的MAC地址和数据类型;
VxLAN GatewayA的流表管理模块查看当前流不存在时,将当前ARP请求包通过VxLAN GatewayA的VxLAN OpenFlow接口模块上报至SDN控制器的SDN OpenFlow接口模块,转到步骤S4;
S4:SDN OpenFlow接口模块判断当前ARP请求包是否属于ARP类型,若是,将当前ARP请求包转发至ARP代理模块,转到步骤S6,否则确定当前ARP请求包为非ARP数据包,将当前非ARP数据包转发至IP处理模块,转到步骤S5;
S5:对当前非ARP数据包进行处理,结束;
S6:ARP代理模块确定当前ARP请求包的数据类型为请求时,转到步骤S7;
S7:用户管理子模块查询HostA的用户信息是否存在,若是,转到步骤S9,否则转到步骤S8;
S8:用户管理子模块通过当前ARP请求包中的VxLAN GatewayIP地址确定HostB所属的VxLAN Gateway;通过当前ARP请求包VLAN头部中的VLAN ID确定HostB的VLAN和VNI值,保存HostB的用户信息,转到步骤S9;
S9:用户管理子模块查询HostB是否存在,若是,转到步骤S10,否则转到步骤S12;
S10:SDN OpenFlow接口模块中的OFPT_PACKET_OUT直接代理HostB的IP向HostA回复ARP应答,构建应答ARP应答数据包;SDN OpenFlow接口模块中的OFPT_PACKET_OUT将ARP应答数据包发送至VxLAN GatewayA,VxLAN GatewayA将ARP应答数据包通过LAN口转发至VLANA,转到步骤S11;
S11:VLANA的VLAN ID删除子模块删除当前ARP应答数据包的VLAN ID头部后,VLAN发包子模块将没有VLAN ID头部的ARP应答数据包发送至HostA,结束;
S12:ARP代理模块根据HostB的VNI值,代理HostA请求HostB的MAC地址,形成修改数据包;ARP代理模块将修改数据包通过SDN OpenFlow接口模块中的OFPT_PACKET_OUT发送给所有VxLAN Gateway,所有VxLAN Gateway将修改数据包通过LAN口转发;拓扑管理模块保存HostA的VxLAN通信信息、VLAN通信信息和用户信息,HostB的VxLAN通信信息、VLAN通信信息和用户信息,转到步骤S13;
S13:VLANB的VLAN ID删除子模块删除当前修改数据包的VLAN ID头部后,VLAN发包子模块将没有VLAN ID头部的修改数据包发送至VLANB,转到步骤S14;
S14:VLANB的VLAN ID添加子模块给为当前修改数据包添加VLAN头部,形成ARP请求包,VLAN发包子模块将ARP请求包发送至VxLAN GatewayB;VxLAN GatewayB的VxLAN收包子模块通过当前ARP请求包的五元组组成一条流,VxLAN GatewayB的流表管理模块查看当前流存在时,按照当前流的处理流程处理,结束。
在上述技术方案的基础上,步骤S3中所述VxLAN收发包模块通过当前ARP请求包的五元组组成一条流之后,还包括以下步骤:VxLAN GatewayA的流表管理模块查看当前流存在时,按照当前流的处理流程处理,结束。
在上述技术方案的基础上,步骤S14中所述VxLAN GatewayB的VxLAN收包子模块通过当前ARP请求包的五元组组成一条流之后,还包括以下步骤:VxLAN GatewayB的流表管理模块查看当前流不存在时,否则将当前ARP请求包通过VxLAN GatewayB的VxLANOpenFlow接口模块上报至SDN控制器的SDN OpenFlow接口模块,转到步骤S4。
在上述技术方案的基础上,步骤S5具体包括以下步骤:
S501:拓扑管理模块中的用户管理子模块查询到HostA、HostB同时存在时,判断当前非ARP数据包是否带有VNI值,若是,确定当前非ARP数据包来自VxLAN GatewayA WAN口、且含有VxLAN头部,需要解封装,转到步骤S502;否则确定当前非ARP数据包来自VxLAN GatewayA的LAN口、且不含有VxLAN头部,需要封装VxLAN头部,转到步骤S503;
S502:VxLAN Gateway管理子模块查询当前非ARP数据包的VxLAN GatewayA的IP地址,通过IP地址值查找VxLAN GatewayA下的所有VLAN交换机;
VLAN交换机管理子模块通过当前非ARP数据包的VNI值查找VLANA;SDN OpenFlow接口模块通过OFPT_PACKET_OUT告知VxLAN GatewayA解封装VxLAN头部并修改VLAN ID值,通过OFPT_PACKET_OUT实现解封装流程,形成解封装数据包,流表管理模块保存解封装流程;VxLAN GatewayA将解封装数据包通过LAN口转发至VLANA,转到步骤S12;
S503:VxLAN Gateway管理子模块查询当前非ARP数据包的VxLAN GatewayA的IP地址,获取VxLAN GatewayA的通信信息;SDN OpenFlow接口模块通过OFPT_PACKET_OUT告知VxLANGatewayA封装VxLAN头部,通过OFPT_PACKET_OUT实现封装流程,形成封装数据包;流表管理模块保存封装流程,VxLAN GatewayA将封装数据包从WAN口转发至VxLAN GatewayB,转到步骤S504;
S504:VxLAN GatewayB的VxLAN OpenFlow接口模块将当前非ARP数据包上报至SDN控制器的SDN OpenFlow接口模块,转到步骤S4,步骤S4中的非ARP数据包即为封装数据包,步骤S4之后的VxLAN GatewayA与VxLAN GatewayB互换,VLANA与VLANB互换,HostA与HostB互换;
步骤S503中所述通过OFPT_PACKET_OUT告知VxLANGatewayA封装VxLAN头部,通过OFPT_PACKET_OUT实现封装流程,形成封装数据包,包括以下步骤:封装VxLAN头部的源MAC地址、目的MAC地址、以太网类型、源IP地址、目的IP地址、IP层下一类型、VNI值。
在上述技术方案的基础上,步骤S6还包括以下步骤:ARP代理模块确定当前ARP请求包的数据类型为回复时,拓扑管理模块的用户管理子模块判断当前ARP请求包的HostB的用户信息,与用户管理子模块保存的HostB的用户信息是否相同,若是,转到步骤S10;否则结束。
在上述技术方案的基础上,步骤S12中所述ARP代理模块根据HostB的VNI值,代理HostA请求HostB的MAC地址,形成修改数据包包括以下步骤:
S1201:互通域管理模块根据HostB的VNI值,查询与当前VNI值相等的所有VxLAN Gateway,互通域管理模块根据HostB的VNI值,在VLAN交换机管理子模块查询与VNI值对应的查询VLAN ID;
S1202:ARP代理模块将当前ARP请求包的源IP地址修改为0.0.0.0;将当前ARP请求包的源MAC地址修改为当前所有VxLANGateway的LAN口的MAC地址;将当前ARP请求包的VLAN ID修改为查询VLAN ID,形成修改数据包。
与现有技术相比,本发明的优点在于:
(1)本发明使用SDN架构,与现有技术中无法得知全局拓扑信息的单个VTEP相比,本发明中SDN架构的SDN控制器能够从全局获知全网的拓扑信息,进而采用单播的方式实现ARP的代理请求,其实现方式比较容易。与此同时,本发明使用时,能够在2个VTEP没有交互过报文的情况下代理应答ARP的广播请求,显著减少了ARP广播报文的传递次数,便于人们使用。
(2)与现有技术中采用组播的方式处理ARP的请求相比,本发明能够通过SDN控制器采用单播的方式处理ARP的请求,不仅处理过程简单有效,而且本发明使用代理请求和应答ARP,能够避免多种场景下的ARP广播,抑制广播的效果较好。
附图说明
图1为本发明实施例中SDN框架的结构示意图;
图2为本发明实施例中SDN控制器的结构框图;
图3为本发明实施例中VxLAN Gateway的结构框图;
图4为本发明实施例中基于SDN框架实现VxLAN的ARP广播抑制方法的流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
本发明实施例中的基于SDN(Software Defined Network,软件定义网关)框架实现VxLAN的ARP(Address Resolution Protocol,地址解析协议)广播抑制系统,包括SDN框架,参见图1所示,SDN框架包括SDN控制器、若干VxLAN Gateway(可扩展局域网网关)和若干VLAN交换机,SDN控制器与所有VxLAN Gateway相连(本实施例中VxLAN Gateway为2台:VxLAN Gateway1和VxLANGateway2),每台VxLAN Gateway分别与若干台VLAN交换机相连(本实施例中每台VxLAN Gateway分别1台VLAN交换机相连:VLAN交换机1、其用户为Host1;VLAN交换机2、其用户为Host2)。
参见图2所示,SDN控制器包括顺次相连的SDN OpenFlow(网络交换模型)接口模块、互通域管理模块、拓扑管理模块、ARP代理模块和IP处理模块。参见图3所示,VxLAN Gateway包括顺次相连的配置管理模块、VxLAN OpenFlow接口模块、流表管理模块、隧道封装模块、隧道解封装模块和VxLAN收发包模块。VLAN交换机包括VLAN收发包模块和VLAN ID模块。
SDN控制器的SDN OpenFlow接口模块用于:接收并处理VxLAN OpenFlow接口模块上报至SDN控制器的流;下发SDN控制器的处理数据包至VxLAN OpenFlow接口模块。
SDN控制器的互通域管理模块用于:接收并读取SDN控制器与所有VxLAN Gateway之间的通讯配置,转发通讯配置至拓扑管理模块。通讯配置可通过web界面配置,也可以从配置文件配置。通讯配置包括VxLAN Gateway的IP地址、LAN(Local Area Network,局域网)口值、LAN口的MAC地址、WAN(WIDe Area Network,广域网)口值、WAN口的MAC地址、WAN口下一跳路由IP地址和MAC地址。通过配置VxLAN Gateway的WAN口IP地址和下一跳路由IP地址能够实现指定VxLAN Gateway之间的互通。
SDN控制器的拓扑管理模块包括VxLAN Gateway管理子模块、VLAN交换机管理子模块和用户管理子模块,VxLAN Gateway管理子模块、VLAN交换机管理子模块和用户管理子模块通过一个链表相互关联(VxLAN Gateway结构体下有VLAN交换机结构体,VLAN交换机结构体下有用户结构体),VxLAN Gateway管理子模块、VLAN交换机管理子模块和用户管理子模块能够通过链表互相查找。
VxLAN Gateway管理子模块用于:根据通讯配置保存所有VxLAN Gateway的VxLAN通信信息。
VLAN交换机管理子模块用于:保存所有VLAN交换机的VLAN通信信息,VLAN通信信息包括VLAN交换机的VLAN ID、VNI(Vxlan Network Identifier,互通域)值、VLAN交换机所属的VxLANGateway的WAN口IP地址。
用户管理子模块用于:保存所有VLAN交换机下的用户信息,用户信息包括:用户的IP地址、MAC地址、用户所属VxLAN Gateway的WAN口IP地址。
SDN控制器的ARP代理模块用于:为SDN控制器代理请求ARP消息,为SDN控制器代理ARP请求会在源VxLAN Gateway的LAN口重新广播代理查询;为SDN控制器代理应答ARP消息。
为SDN控制器代理请求ARP消息的过程为:SDN控制器收到SDN OpenFlow的OFPT_PACKET_IN(OpenFlow协议中交换机上报至控制器的信息)打包的ARP请求后,若未查询到请求目的IP的MAC地址记录,则虚拟一个VM IP(Virtual Machine IP,虚拟机IP)地址,并代理VM查询VM IP的MAC地址。
为SDN控制器代理应答ARP消息的过程为:SDN控制器收到OFPT_PACKET_IN打包的ARP请求后,若查询到请求目的IP的MAC地址,则直接代理该目的IP回复ARP应答,将ARP应答通过SDNOpenFlow的OFPT_PACKET_OUT(OpenFlow协议中控制器下发至交换机策略信息)打包形成ARP REPLY信息(ARP回复信息),将ARP REPLY信息通过VxLAN Gateway转发给请求者。
SDN控制器的IP处理模块用于:根据通讯配置获取所有VxLanGateway上报的ARP数据类型之外的流的处理流程,处理流程包括VLAN ID的修改、隧道的封装和隧道的解封装。
VxLAN Gateway的配置管理模块用于:读取VxLAN Gateway程序运行后的参数信息,通过参数获取VxLAN Gateway需要连接的SDN控制器IP地址和OpenFlow端口。
VxLAN Gateway的VxLAN OpenFlow接口模块采用OpenFlow协议标准,其用于:在VxLAN Gateway和SDN控制器之间建立连接;上报VxLAN Gateway在流表管理模块中未找到的流至SDN控制器;接收并处理SDN控制器下发的处理流程。
VxLAN Gateway的流表管理模块用于:保存SDN控制器对VxLAN Gateway上报的流的处理流程。
保存SDN控制器对VxLAN Gateway上报流的处理流程包括以下步骤:VxLAN Gateway接收到上行流或下行流时,流表管理模块查找当前上行流或下行流是否存在,若是,确定当前上行流或下行流不是首次发送,按照当前上行流或下行流处理流程处理并发送当前上行流或下行流;否则确定当前上行流或下行流为首次发送,将当前上行流或下行流通过VxLAN OpenFlow接口模块发送至SDN控制器OpenFlow接口模块。
VxLAN Gateway隧道封装模块用于:VxLAN Gateway接收到上行流后,通过流表管理模块获取当前上行流的处理流程,根据处理流程为当前上行流添加VxLAN隧道,形成封装数据包,以使得当前上行流能够在三层网络中通讯。
VxLAN Gateway的隧道解封装模块用于:VxLAN Gateway接收到下行流后,通过流表管理模块获取当前下行流的处理流程,根据处理流程为当前下行流去除VxLAN隧道、并修改VLAN ID,形成解封数据包,以使得当前下行流能够在二层网络中通讯。
VxLAN Gateway的VxLAN收发包模块包括VxLAN收包子模块和VxLAN发包子模块。
VxLAN收包子模块用于:接收VxLAN Gateway的每一个网口的数据包。
VxLAN发包子模块用于:将封装数据包和解封数据包通过SDN控制器要求的网口转发(封装数据包通过VxLAN Gateway的WAN口转发,解封数据包通过VxLAN Gateway的LAN口转发)。
VLAN交换机的VLAN收发包模块包括VLAN收包子模块和VLAN发包子模块。
VLAN收包子模块用于:接收VLAN的每一个网口的数据包。
VLAN发包子模块用于:将接收的上行数据包发送至VxLANGateway;将接收的下行数据包发送至所属于VLAN的用户。
VLAN交换机的VLAN ID模块包括VLAN ID添加子模块和VLAN ID删除子模块。
VLAN ID添加子模块用于:为VLAN交换机接收的上行数据包添加VLAN头部,VLAN头部包括VLAN ID信息。
VLAN ID删除子模块用于:为VLAN交换机接收的下行数据包去除VLAN头部。
参见图4所示,本发明实施例中的用于上述系统的基于SDN框架实现VXLAN的ARP广播抑制方法,包括以下步骤:
S1:在SDN控制器的互通域管理模块预设所有VxLAN Gateway的互通域配置,转到步骤S2。互通域配置包括所有VxLAN Gateway的WAN口IP和下一跳路由IP地址配置、属于同一个互通域的VxLAN Gateway信息。本实例中VxLAN GatewayA和VxLANGatewayB在同一个互通域中(即VNI的值一样)。
S2:定义发出ARP请求的用户为HostA(请求用户),HostA使用的VLAN交换机为VLANA,VLANA所属的VxLAN Gateway为VxLAN GatewayA。与HostA不同VLAN、且为HostA发送ARP请求包的用户为HostB(目的用户),HostB使用的VLAN交换机为VLANB,VLANB的VxLAN Gateway为VxLAN GatewayB。
HostA请求HostB的ARP请求时,HostA向VLANA的VLAN收包子模块发送ARP请求包,VLANA的VLAN ID添加子模块为ARP请求包添加VLAN头部,转到步骤S3。
S3:VLANA的发包子模块将当前ARP请求包发送至VxLANGateway A的VxLAN收发包模块,VxLAN收发包模块通过当前ARP请求包的五元组(当前ARP请求包的源IP地址、目的IP地址、源MAC地址、目的MAC地址和数据类型)组成一条流。VxLANGatewayA的流表管理模块查看当前流是否存在,若是,按照当前流的处理流程处理,结束;否则将当前ARP请求包通过VxLANGatewayA的VxLAN OpenFlow接口模块上报至SDN控制器的SDNOpenFlow接口模块,转到步骤S4。
S4:SDN OpenFlow接口模块判断当前ARP请求包是否属于ARP类型,若是,将当前ARP请求包转发至ARP代理模块,转到步骤S6,否则确定当前ARP请求包为非ARP数据包,将当前非ARP数据包转发至IP处理模块,转到步骤S5。
S5:对当前非ARP数据包进行处理,结束。
S6:ARP代理模块确定当前ARP请求包的数据类型,若当前ARP请求包的数据类型为请求,转到步骤S7。若当前ARP请求包数据类型为回复,拓扑管理模块的用户管理子模块判断源IP用户(即HostB)的用户信息,与用户管理子模块已经保存的HostB的用户信息是否相同,若是,转到步骤S10;否则结束。
S7:用户管理子模块查询HostA的用户信息是否存在(查询是否存在HostA的MAC地址和IP地址),若是,转到步骤S9,否则转到步骤S8。
S8:用户管理子模块通过当前ARP请求包中的VxLAN GatewayIP地址确定HostB所属的VxLAN Gateway;通过当前ARP请求包VLAN头部中的VLAN ID确定HostB的VLAN和VNI值,保存HostB的用户信息,转到步骤S9。
S9:用户管理子模块查询HostB是否存在,若是,转到步骤S10,否则转到步骤S12。
S10:SDN OpenFlow接口模块中的OFPT_PACKET_OUT直接代理HostB的IP向HostA回复ARP应答,构建应答ARP应答数据包。SDN OpenFlow接口模块中的OFPT_PACKET_OUT将ARP应答数据包发送至VxLAN GatewayA,VxLAN GatewayA将ARP应答数据包通过LAN口转发至VLANA,转到步骤S11。
步骤S10中ARP应答数据包的源IP地址为HostB的IP地址,源MAC地址为HostB的MAC地址,目的IP地址为HostA的IP地址,目的MAC地址为HostA的MAC地址。
S11:VLANA的VLAN ID删除子模块删除当前ARP应答数据包的VLAN ID头部后,VLAN发包子模块将没有VLAN ID头部的ARP应答数据包发送至HostA,结束。
S12:ARP代理模块根据HostB的VNI值,代理HostA请求HostB的MAC地址,形成修改数据包;ARP代理模块将修改数据包通过SDN OpenFlow接口模块中的OFPT_PACKET_OUT发送给所有VxLAN Gateway,所有VxLAN Gateway将修改数据包通过LAN口转发。拓扑管理模块保存HostA的VxLAN通信信息、VLAN通信信息和用户信息,HostB的VxLAN通信信息、VLAN通信信息和用户信息,转到步骤S13。
S13:VLANB的VLAN ID删除子模块删除当前修改数据包的VLAN ID头部后,VLAN发包子模块将没有VLAN ID头部的修改数据包发送至VLANB,转到步骤S14。
S14:VLANB的VLAN ID添加子模块给为当前修改数据包添加VLAN头部,形成ARP请求包,VLAN发包子模块将ARP请求包发送至VxLAN GatewayB。VxLAN GatewayB的VxLAN收包子模块通过当前ARP包的五元组组成一条流,VxLAN GatewayB的流表管理模块查看当前流是否存在,若是,按照当前流的处理流程处理,结束;否则将当前ARP包通过VxLAN GatewayB的VxLAN OpenFlow接口模块上报至SDN控制器的SDN OpenFlow接口模块,转到步骤S4。
步骤S12中ARP代理模块根据HostB的VNI值,代理HostA请求HostB的MAC地址,形成修改数据包包括以下步骤:
S1201:互通域管理模块根据HostB的VNI值,查询与当前VNI值相等的所有VxLAN Gateway,互通域管理模块根据HostB的VNI值,在VLAN交换机管理子模块查询与VNI值对应的查询VLAN ID。
S1202:ARP代理模块将当前ARP请求包的源IP地址修改为0.0.0.0;将当前ARP请求包的源MAC地址修改为当前所有VxLANGateway的LAN口的MAC地址;将当前ARP请求包的VLAN ID修改为查询VLAN ID,形成修改数据包。
步骤S5具体包括以下步骤:
S501:拓扑管理模块中的用户管理子模块查询到HostA、HostB同时存在时,判断当前非ARP数据包是否带有VNI值,若是,确定当前非ARP数据包来自VxLAN GatewayA WAN口、且含有VxLAN头部,需要解封装,转到步骤S502;否则确定当前非ARP数据包来自VxLAN GatewayA的LAN口、且不含有VxLAN头部,需要封装VxLAN头部,转到步骤S503。
S502:VxLAN Gateway管理子模块查询当前非ARP数据包的VxLAN GatewayA的IP地址,通过IP地址值查找VxLAN GatewayA下的所有VLAN交换机。
VLAN交换机管理子模块通过当前非ARP数据包的VNI值查找VLANA。SDN OpenFlow接口模块通过OFPT_PACKET_OUT告知VxLAN GatewayA解封装VxLAN头部并修改VLAN ID值,通过OFPT_PACKET_OUT消息中的ACTION操作实现解封装流程,形成解封装数据包,流表管理模块保存解封装流程。VxLAN GatewayA将解封装数据包通过LAN口转发至VLANA,转到步骤S12。
S503:VxLAN Gateway管理子模块查询当前非ARP数据包的VxLAN GatewayA的IP地址,获取VxLAN GatewayA的通信信息。SDN OpenFlow接口模块通过OFPT_PACKET_OUT告知VxLANGatewayA封装VxLAN头部,通过OFPT_PACKET_OUT消息中的ACTION操作实现封装流程,形成封装数据包。流表管理模块保存封装流程,VxLAN GatewayA将封装数据包从WAN口转发至VxLANGatewayB,转到步骤S504。
步骤S503中通过OFPT_PACKET_OUT告知VxLAN GatewayA封装VxLAN头部,通过OFPT_PACKET_OUT消息中的ACTION操作实现封装流程,形成封装数据包,包括以下步骤:封装VxLAN头部的源MAC地址、目的MAC地址、以太网类型、源IP地址、目的IP地址、IP层下一类型、VNI值。
源MAC地址为VxLAN GatewayA的WAN口MAC地址,目的MAC地址为VxLAN GatewayA的下一跳路由MAC地址,以太网类型为IP(0x0800),源IP地址为VxLAN GatewayA的WAN口IP地址,目的IP地址为VxLAN GatewayA的下一跳路由IP地址,IP层下一类型为UDP,UDP源端口和目的端口为4789,VNI值为通过VLANID查找的VLAN交换机下的VNI值。
S504:VxLAN GatewayB的VxLAN OpenFlow接口模块将当前非ARP数据包上报至SDN控制器的SDN OpenFlow接口模块,转到步骤S4,步骤S4中的非ARP数据包即为封装数据包,步骤S4之后的VxLAN GatewayA与VxLAN GatewayB互换,VLANA与VLANB互换,HostA与HostB互换。
本发明实际使用时的工作方法包括以下步骤:
A、准备五台操作系统为linux的硬件设备(例如电脑、虚拟机等),五台设备中一台为SDN控制器,两台为VxLAN Gateway,两台为VLAN交换机。分别为五台设备设置相应的IP地址,VxLANGateway的WAN口IP地址和下一跳路由需要配置好,让VxLANGateway WAN数据包可以发送到公网中。
B、编写VxLAN Gateway的配置管理模块,编写配置管理模块主要是为VxLAN Gateway中的VxLAN OpenFlow接口模块服务,VxLAN Gateway通过OpenFlow协议连接到SDN控制器,VxLANGateway需要知道SDN控制器的IP地址以及OpenFlow端口。在现实中为了增加项目灵活性,连接的SDN控制器IP地址不能在程序中写死,可以通过程序运行后的参数进行配置,配置管理模块能够参数,获取SDN控制器IP地址和OpenFlow端口。
C、编写SDN控制器的SDN OpenFlow接口模块和VxLANGateway的VxLAN OpenFlow接口模块,OpenFlow接口能够分离交换机处理数据和转发数据的能力,实现SDN环境。
D、编写SDN控制器的互通域管理模块,因为一台VLAN交换机下的VLAN id有4096个值,在现实中需要实现一个VxLANGateway和另一个VxLAN Gateway通讯,为了隔离每一组的通讯,需要用VNI来区别,用户需要配置互通域。
互通域的配置能够通过应用层的界面配置互通域,然后把该配置写入SDN控制器的数据库或者通过应用层接口发送互通域配置信息给SDN控制器或者在SDN控制器上创建互通域配置文件。
E、编写SDN控制器的拓扑管理模块,拓扑管理模块实现SDN控制器具有全局的拓扑信息,拓扑管理模块是通过Hash链表的方式保存拓扑信息。
F、编写SDN控制器的ARP代理模块,ARP代理模块主要实现抑制ARP广播。
G、编写SDN控制器的IP处理模块,IP处理模块主要实现除去ARP类型的其他类型数据的处理,主要是告知VxLAN Gateway如何封装VxLAN头部、去除VxLAN头部和VLAN ID值的修改。
H、编写VxLAN Gateway中的VxLAN Gateway流表管理模块。用户的上行流量通过5元组来确定流是否存在,根据自己的情况可以自己定,例如OpenFlow协议1.0版本是11元组。
I、编写VxLAN Gateway中的隧道解封装模块,隧道解封装模块主要实现将二层网络数据包发送到三层网络中,再逆向把三层网络发送到二层网络中。
J、编写VxLAN Gateway中的收发包模块,收发包模块主要实现可以抓取用户的上行和下行数据包,转交数据包给其他模块进行处理。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。