基于OpenFlow的云计算分布式网络实现方法、系统与流程

文档序号:12829110阅读:359来源:国知局
本发明涉及云计算技术及openflow技术,尤其涉及一种基于openflow的云计算分布式网络实现方法、系统。
背景技术
::云计算(cloudcomputing)是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机和其他设备。云计算网络是云计算的重要组成部分,云计算网络的基本核心包括虚拟2层交换机、虚拟路由器、安全组以及虚拟防火墙等,需要能够为租户虚拟网络提供互相隔离、安全功能、以及按照要求实现2、3层互通的功能。云计算网络上的虚拟设备是基于底层真实物理设备虚拟出来的;目前底层物理分为2种:一种是通过网络节点服务器上的系统自带的模块来实现的,如ip表(iptables)、ip路由(iproute)、ip命名空间(ipnamespace)等;另一种是通过把报文转发到专用的外部物理设备来实现的,如能够提供虚拟化的交换机、路由器。对于外部物理设备,目前大多数支持虚拟化的交换机、路由器的方式是基于传统交换机。传统交换机的报文转发功能和转发策略在同一台硬件上,并且每台交换机各自为政,不是统一管理。开流(openflow)技术将传统交换机上的报文转发和转发策略分离开来,用专门的一台控制器(controller),一般为服务器通过网线和交换机连接。这样,原来同在一台交换机设备上的报文转发功能(硬件芯片实现)和报文转发策略(各种软件协议)被分开到了不同的硬件设备上。而一台控制器还可以控制多台openflow交换机,从而实现了统一的转发控制端,更有效地控制了网络。目前,涉及到云计算分布式网络的方案主要有:方案一:在计算节点上为每个虚拟路由器创建了单独的虚拟网络空间,通过系统自带的路由功能来实现分布式虚拟路由器的3层路由转发功能。在计算节点上还创建了内部网桥,并把虚拟机连接到了内部网桥上,通过流表规则和内部虚拟局域网(vlan,virtuallocalareanetwork)转换,实现虚拟机之前的2层隔离和转发。内部网桥与内网网桥通过vethpair连接,并通过外网网桥连接其他节点。解决了虚拟机网络单点故障和大负载问题;可用于云计算的分布式路由器实现。方案二:分布式虚拟交换机由多个openflow虚拟交换机、openflow控制器、物理交换机端口组成;所述openflow虚拟交换机与所述openflow控制器根据预设策略,进行通信。该方法基于软件定义网络(sdn,softwaredefinednetwork)思想构建分布式虚拟交换机,分布式虚拟交换机具体通过openflow协议实现;分布式虚拟交换机通过openflow控制器集中配置整个数据中心的虚拟交换机,从而简化了虚拟机网络连接,实现了对云数据中心虚拟网络环境的集中管理和智能监控。上述方案一至少存在如下技术问题:1)通常在计算节点的虚拟交换机上配置很多复杂的流表,做各种隧道封装、解封装、跨越多个namespace以及3个网桥,这个连接及配置很复杂,而且是在计算节点上进行这些路由、跨namespace、跨网桥的软件处理,速度会很慢,而计算节点应该把更多的资源留给虚拟机使用。2)没有解决机架间节点流量转发的效率问题和vlan网络有4094的规模限制问题。上述方案二至少存在如下技术问题:1)openflow控制器以及控制器上的应用软件(app)通常是单独放在一台专用服务器上的,容易产生单点故障。2)未解决如何处理广播报文的问题。3)未涉及如何解决云计算网络中常用的安全组和防火墙等安全过滤功能。技术实现要素:为解决上述技术问题,本发明实施例提供了一种基于openflow的云计算分布式网络实现方法、系统。本发明实施例提供的基于openflow的云计算分布式网络实现方法,包括:云计算网络平台将消息通知发送给虚拟交换机和/或openflow交换机;当计算节点或网络节点上的所述虚拟交换机收到所述消息通知时,下发用于指示虚拟机流量进出的流表;当所述openflow交换机收到所述消息通知时,根据配置数据下发以下7张流表:用于处理广播报文的流表、用于识别网络的流表、用于生成2层转发信息的流表、用于安全组过滤的流表、用于生成3层分布式转发信息的流表、用于防火墙过滤的流表、用于转发的流表。本发明实施例中,所述方法还包括:所述云计算网络平台将获得的配置数据发送给所述openflow交换机;其中,所述配置数据包括:所述云计算网络平台根据下联的openflow交换机个数,为各交换机建立逻辑上的全网状隧道;当配置虚拟网络时,为每个计算节点上分配本地有效的虚拟网络id:vlan_id,以及为虚拟网络分配全局唯一的隧道id:tun_id,并保存各节点上的本地vlan_id和全局tun_id之间的映射关系;为每个计算节点分配标识符:host_id,该标识符全局有效;为每个虚拟机分配标识符:vm_id,该标识符本host主机有效,并保存虚拟机和网口的映射关系;为每个虚拟路由器分配标识符:router_id,该标识符全局有效;虚拟机所属的计算节点、虚拟机网口的物理mac地址和名称、以及对应的openflow端口号、虚拟机属于哪个网络和子网的无类别域间路由cidr信息;虚拟路由器的配置、连接的子网、接口ip地址信息、以及连接的外部网络 接口信息;交换机和计算节点的连接关系。本发明实施例中,所述虚拟交换机收到所述消息通知时,下发用于指示虚拟机流量进出的流表,包括:所述虚拟交换机收到用于创建虚拟机的消息通知时,下发用于指示虚拟机流量进出的流表;其中,所述流表包括:表项1:优先级32768,匹配:虚拟机网口,动作:添加vlan标签,配置vlanid为所述分配的本地vlan_id,转发到连接openflow交换机的端口;表项2:优先级32767,匹配:连接openflow交换机的端口,虚拟机mac_da地址,动作:剥除vlan标签,发送给虚拟机网口;表项3:优先级0,匹配:任意报文,动作:丢弃。本发明实施例中,所述用于处理广播报文的流表,包括:表项1:优先级32768,匹配:mac_da为ff:ff:ff:ff:ff:ff,dl_type为0x0806,arp_op=1,动作:设置arp_op=2,复制mac_sa到mac_da,复制arp_sha字段到arp_tha字段,复制arp_spa字段到arp_tpa字段,复制arp_tpa字段到arp_spa,通过packet_in消息上送所述openflow交换机;表项2:优先级32767,匹配:mac_da为ff:ff:ff:ff:ff:ff,且udp端口号为67的广播报文,动作:通过packet_in消息上送所述openflow交换机;表项3:优先级1,匹配:mac_da地址为ff:ff:ff:ff:ff:ff的广播报文,动作:丢弃;表项4:优先级0,匹配:任意报文,动作:跳转到用于识别网络的流表。本发明实施例中,所述用于识别网络的流表,包括:表项1:优先级32768,匹配:vlanid,动作:设置metadata值为host_id和vlan_id的拼接:host_id<<13|vlan_id;表项2:优先级32767,匹配:tun_id,动作:剥除tunnel头,根据 映射关系,添加vlan标签,配置本地vlan_id,设置metadata值为host_id和vlan_id的拼接:host_id<<13|vlan_id;表项3:优先级0,匹配:任意报文,动作:跳转到用于生成2层转发信息的流表。本发明实施例中,所述用于生成2层转发信息的流表,包括:表项1:优先级32768,匹配mac_da为交换机直连节点的虚拟机mac地址,动作:根据查找出的映射关系,设置metadata的vm_id字段;根据连接虚拟机所在节点的交换机端口号,设置metadata的out_port字段,跳转到用于安全组过滤的流表;表项2:优先级32767,匹配mac_da为交换机跨机架连接的虚拟机mac地址,动作:剥除vlan标签,并根据映射关系设置对应的tun_id,发送给跨机架虚拟机所在节点的隧道端口;表项3:优先级0,匹配:任意报文,动作:跳转到用于安全组过滤的流表。本发明实施例中,所述用于安全组过滤的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的vm_id为虚拟机id,匹配安全组表项的各过滤字段,动作:丢弃;表项2:优先级0,匹配:任意报文,动作:跳转到用于生成3层分布式转发信息的流表。本发明实施例中,所述用于生成3层分布式转发信息的流表,包括:表项1:优先级32768,匹配:ip_da为本交换机直连节点上的虚拟机,动作:配置metadata中的router_id字段为虚拟机所连的虚拟路由器的id;设置mac_da为目的虚拟机的mac地址;根据连接虚拟机所在节点的交换机端口号,设置metadata的out_port字段;表项2:优先级32767,匹配:ip_da为跨机架连接的节点上的虚拟机,动作:设置metadata中的router_id字段为虚拟机所连的虚拟路由器的id;配置mac_da为目的虚拟机的mac地址;剥除vlan标签,根据映射关系设置对应的tun_id,发送给跨机架目的虚拟机所在节点的隧道端口。表项3:优先级0,匹配:任意报文,动作:跳转到用于防火墙过滤的流表。本发明实施例中,所述用于防火墙过滤的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的router_id字段为防火墙绑定的虚拟路由器,匹配防火墙规则的各过滤字段,动作:丢弃;表项2:优先级0,匹配:任意报文,动作:跳转到用于转发的流表。本发明实施例中,所述用于转发的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的out_port字段不为0,动作:转发到out_port字段所表示的端口;表项2:优先级0,匹配:任意报文,动作:丢弃。本发明实施例中,所述方法还包括:当所述openflow交换机收到packet_in消息时,从所述云计算网络平台获得如下信息:网络节点上dhcp服务的端口mac地址、openflow端口、网络节点是否和所述openflow交换机在同个机架上、以及端口连接关系。本发明实施例中,所述方法还包括:当收到dhcp报文时,将mac_da改为网络节点上dhcp服务端口的mac地址;当网络节点和所述openflow交换机在同个机架上时,通过packet_out消息把该报文发送到和网络节点相连接的端口上;当网络节点和所述openflow交换机在不同机架上时,剥除vlan标签,打上对应的tun_id,通过packet_out消息发送到和网络节点相连接的隧道端口上;当收到arp报文时,通过arp_spa查找到对应端口的mac地址,并配置到报文的mac_sa和arp_sha中,发送该报文到openflow虚拟端口in_port。本发明实施例提供的基于openflow的云计算分布式网络实现系统,包括:云计算网络平台、计算节点、网络节点、位于所述计算节点/网络节点上的虚拟交换机、openflow交换机、所述云计算网络平台,用于将消息通知发送给虚拟交换机和/或openflow交换机;所述虚拟交换机,用于收到所述消息通知时,下发用于指示虚拟机流量进出的流表;所述openflow交换机,用于收到所述消息通知时,根据配置数据下发以下7张流表:用于处理广播报文的流表、用于识别网络的流表、用于生成2层转发信息的流表、用于安全组过滤的流表、用于生成3层分布式转发信息的流表、用于防火墙过滤的流表、用于转发的流表。本发明实施例中,所述云计算网络平台,还用于将获得的配置数据发送给所述openflow交换机;其中,所述配置数据包括:所述云计算网络平台根据下联的openflow交换机个数,为各交换机建立逻辑上的全网状隧道;当配置虚拟网络时,为每个计算节点上分配本地有效的虚拟网络id:vlan_id,以及为虚拟网络分配全局唯一的隧道id:tun_id,并保存各节点上的本地vlan_id和全局tun_id之间的映射关系;为每个计算节点分配标识符:host_id,该标识符全局有效;为每个虚拟机分配标识符:vm_id,该标识符本host主机有效,并保存虚拟机和网口的映射关系;为每个虚拟路由器分配标识符:router_id,该标识符全局有效;虚拟机所属的计算节点、虚拟机网口的物理mac地址和名称、以及对应的openflow端口号、虚拟机属于哪个网络和子网的无类别域间路由cidr信息;虚拟路由器的配置、连接的子网、接口ip地址信息、以及连接的外部网络接口信息;交换机和计算节点的连接关系。本发明实施例中,所述虚拟交换机,还用于收到用于创建虚拟机的消息通知时,下发用于指示虚拟机流量进出的流表;其中,所述流表包括:表项1:优先级32768,匹配:虚拟机网口,动作:添加vlan标签,配 置vlanid为所述分配的本地vlan_id,转发到连接openflow交换机的端口;表项2:优先级32767,匹配:连接openflow交换机的端口,虚拟机mac_da地址,动作:剥除vlan标签,发送给虚拟机网口;表项3:优先级0,匹配:任意报文,动作:丢弃。本发明实施例中,所述用于处理广播报文的流表,包括:表项1:优先级32768,匹配:mac_da为ff:ff:ff:ff:ff:ff,dl_type为0x0806,arp_op=1,动作:设置arp_op=2,复制mac_sa到mac_da,复制arp_sha字段到arp_tha字段,复制arp_spa字段到arp_tpa字段,复制arp_tpa字段到arp_spa,通过packet_in消息上送所述openflow交换机;表项2:优先级32767,匹配:mac_da为ff:ff:ff:ff:ff:ff,且udp端口号为67的广播报文,动作:通过packet_in消息上送所述openflow交换机;表项3:优先级1,匹配:mac_da地址为ff:ff:ff:ff:ff:ff的广播报文,动作:丢弃;表项4:优先级0,匹配:任意报文,动作:跳转到用于识别网络的流表。本发明实施例中,所述用于识别网络的流表,包括:表项1:优先级32768,匹配:vlanid,动作:设置metadata值为host_id和vlan_id的拼接:host_id<<13|vlan_id;表项2:优先级32767,匹配:tun_id,动作:剥除tunnel头,根据映射关系,添加vlan标签,配置本地vlan_id,设置metadata值为host_id和vlan_id的拼接:host_id<<13|vlan_id;表项3:优先级0,匹配:任意报文,动作:跳转到用于生成2层转发信息的流表。本发明实施例中,所述用于生成2层转发信息的流表,包括:表项1:优先级32768,匹配mac_da为交换机直连节点的虚拟机mac地址,动作:根据查找出的映射关系,设置metadata的vm_id字段;根据 连接虚拟机所在节点的交换机端口号,设置metadata的out_port字段,跳转到用于安全组过滤的流表;表项2:优先级32767,匹配mac_da为交换机跨机架连接的虚拟机mac地址,动作:剥除vlan标签,并根据映射关系设置对应的tun_id,发送给跨机架虚拟机所在节点的隧道端口;表项3:优先级0,匹配:任意报文,动作:跳转到用于安全组过滤的流表。本发明实施例中,所述用于安全组过滤的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的vm_id为虚拟机id,匹配安全组表项的各过滤字段,动作:丢弃;表项2:优先级0,匹配:任意报文,动作:跳转到用于生成3层分布式转发信息的流表。本发明实施例中,所述用于生成3层分布式转发信息的流表,包括:表项1:优先级32768,匹配:ip_da为本交换机直连节点上的虚拟机,动作:配置metadata中的router_id字段为虚拟机所连的虚拟路由器的id;设置mac_da为目的虚拟机的mac地址;根据连接虚拟机所在节点的交换机端口号,设置metadata的out_port字段;表项2:优先级32767,匹配:ip_da为跨机架连接的节点上的虚拟机,动作:设置metadata中的router_id字段为虚拟机所连的虚拟路由器的id;配置mac_da为目的虚拟机的mac地址;剥除vlan标签,根据映射关系设置对应的tun_id,发送给跨机架目的虚拟机所在节点的隧道端口。表项3:优先级0,匹配:任意报文,动作:跳转到用于防火墙过滤的流表。本发明实施例中,所述用于防火墙过滤的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的router_id字段为防火墙绑定的虚拟路由器,匹配防火墙规则的各过滤字段,动作:丢弃;表项2:优先级0,匹配:任意报文,动作:跳转到用于转发的流表。本发明实施例中,所述用于转发的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的out_port 字段不为0,动作:转发到out_port字段所表示的端口;表项2:优先级0,匹配:任意报文,动作:丢弃。本发明实施例中,所述openflow交换机,还用于收到packet_in消息时,从所述云计算网络平台获得如下信息:网络节点上dhcp服务的端口mac地址、openflow端口、网络节点是否和所述openflow交换机在同个机架上、以及端口连接关系。本发明实施例中,所述openflow交换机,还用于当收到dhcp报文时,将mac_da改为网络节点上dhcp服务端口的mac地址;当网络节点和所述openflow交换机在同个机架上时,通过packet_out消息把该报文发送到和网络节点相连接的端口上;当网络节点和所述openflow交换机在不同机架上时,剥除vlan标签,打上对应的tun_id,通过packet_out消息发送到和网络节点相连接的隧道端口上;当收到arp报文时,通过arp_spa查找到对应端口的mac地址,并配置到报文的mac_sa和arp_sha中,发送该报文到openflow虚拟端口in_port。本发明实施例的技术方案中,利用openflow交换机和openflow应用来动态计算出3层路由流表,以达到分布式跨网段路由的目的,对于网络的大量可能存在环路的广播报文,会对其做特殊的处理,达到抑制广播的目的,同时会在openflow交换机中实现安全组和防火墙功能。本发明实施例的有益效果如下:1)、本发明实施例的技术方案采用7级openflow流表,不同类型的功能放在相同流表中,且通过metadata传送特殊标记,不用重新组合不同功能的流表,这样可以节约大量宝贵的硬件表项资源。2)、现有方案中,计算节点上采用3个网桥、多个网络空间、还有vethpair等系统设备来完成2层交换和3层分布式路由。这些都在计算节点上通过软件完成,配置非常复杂,且会消耗很多计算资源。本发明实施例通过只保留计算节点的虚拟交换机,并且把所有消耗资源的交换、路由操作都放到了openflow硬件交换机上通过openflow实现,大大提高了转发效率,并且减小了计算节 点的负担。3)、本发明实施例的3层分布式转发中,通过过滤所有和本交换机所连接的节点下的所有虚拟机,使交换机只处理本机架下虚拟机之间的3层转发,不处理不必要的其他3层转发,提高了流表利用率。4)、本发明实施例的2、3层转发流表中,在做跨机架隧道转发时,是先进行剥除vlan的操作,然后通过对端的用于识别网络的流表来配置本地vlan。这样可以在隧道网络中大大减少vlan头带来的额外报文开销,提高隧道网络的带宽利用率。5)、本发明实施例中,通过分配metadata为多个自定义字段,解决了openflow不能很好支持云计算网络的问题,这样可以通过vm_id,router_id支持安全组和防火墙。6)、本发明实施例通过对节点分配本地vlan,以及做机架间隧道和节点+vlan的映射,很好地解决了vlan网络4094的限制,这样整个云计算网络中可以创建远大于4094个虚拟网络。7)、现有方案中,openflow控制器部署在服务器上,不能够解决控制器的单一故障和高可靠性。本发明实施例通过把openflow控制器部署在交换机上,来达到分布式openflow控制器的目的,可以解决控制器的单一故障,以及提高控制器和交换机的访问速度。8)、本发明实施例中,通过在流表中修改arp广播报文,上送至控制器中配置mac_sa,arp_sha字段,并发送至in_port,来实现arp代理,从而抑制arp广播,防止形成广播风暴,也提高了网络利用率。9)、本发明实施例中,通过上送dhcp广播报文,修改其目的地址为单播报文,并发送至dhcp服务端口,从而抑制dhcp广播,防止形成广播风暴,也提高了网络利用率。10)、本发明实施例中,2、3层转发表通过在metadata上自定义用于识别出端口的out_port字段,在最后一张表中转发,而不是直接转发。这样做可以使报文进入安全组、防火墙进项安全过滤,而不是过早的被错误转发。附图说明图1为本发明实施例的系统架构示意图;图2为本发明实施例的基于openflow的云计算分布式网络实现方法的流程示意图;图3为本发明实施例的openflow交换机上的流表转发示意图;图4为本发明实施例的基于openflow的云计算分布式网络实现系统的结构组成示意图。具体实施方式为了能够更加详尽地了解本发明实施例的特点与技术内容,下面结合附图对本发明实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明实施例。传统的数据中心云计算网络中,东西向流量都需要经过一个集中式的网络节点做3层跨网段路由交换,网络节点处理速度慢,会产生单点故障。一般地,传统云计算会通过网络控制器,来下发用户的配置:如创建网络、创建子网、增加路由接口、增加安全组规则、增加防火墙规则等等。云计算网络节点会用来做3层路由转发和防火墙安全功能。而计算节点会用于创建虚拟机,提供一个虚拟交换机模块用来做2层转发,以及提供安全组功能。本发明实施例的技术方案,利用openflow交换机和openflow应用来动态计算出3层路由流表,以达到分布式跨网段路由的目的,对于网络的大量可能存在环路的广播报文,会对其做特殊的处理,达到抑制广播的目的,同时会在openflow交换机中实现安全组和防火墙功能。本发明实施例的系统架构如图1所示,在每个机架上放一台支持openflow1.5的柜顶式(tor)openflow交换机,每个机架上所有的计算节点和网络节点通过数据网口连到openflow交换机上。跨机架的openflow交换机之间通过上联口和传统的2层交换机相连接实现互通,形成数据网络。而云计算网络控制器会通过传统交换机和openflow交换机以及计算节点上的虚拟交 换机直接3层互联,形成控制网络。如图1所示的黑虚线为控制网络,用来通过远程协议(rpc,remoteprocedurecallprotocol)控制openflow交换机,以及计算节点上的虚拟交换机;黑直线为数据网络,用来传输虚拟机(vm,virtualmachine)之间的数据流量。每台openflow交换机上还应该配置一个openflow控制器,其北向接口通过rpc和云计算网络平台相连,南向接口通过openflow协议用于控制交换机上的数据通道(datapath)。其中,计算节点上运行多个虚拟机,所有虚拟机的虚拟网口都会连接到虚拟交换机上。网络节点将只提供动态主机配置协(dhcp,dynamichostconfigurationprotocol)服务,虚拟专用网络(vpn,virtualprivatenetwork)服务等,外部网络服务,而不提供虚拟3层路由器的跨网段服务,安全组,防火墙功能,这些服务将由openflow交换机实现。本发明实施例的技术方案中,交换机需要支持以下能力:计算/网络节点上的虚拟交换机应当支持openflow协议1.0以上版本,只需支持匹配域:端口、vlan_id、mac_da,动作:添加、剥除vlan标签,转发至物理端口即可。openflow交换机应当支持openflow协议1.5以上版本,至少支持7张流表,且各流表应当支持如下基本功能:1、流表优先级。2、匹配域:端口、mac_da、vlan_id、tun_id、dl_type、arp_op、ip协议号、传输层端口号、带掩码的metadata。此外,还需要支持云计算网络平台要求的安全组、防火墙所需的过滤字段,一般为mac_sa、mac_da、ip协议号、ip_sa、ip_da、tcp/udp端口号。3、动作:丢弃报文,转发至物理端口,转发至隧道端口,转发至控制器,push_vlan(添加vlan标签),pop_vlan(剥除vlan标签),set_field(设置报文字段),copy_field(复制特定字段),goto_table(流表跳转)。图2为本发明实施例的基于openflow的云计算分布式网络实现方法的流程示意图,如图2所示,所述基于openflow的云计算分布式网络实现方法包 括以下步骤:步骤201:云计算网络平台将消息通知发送给虚拟交换机和/或开openflow交换机。本发明实施例中,当用户通过云计算网络平台发送网络、子网、路由器、安全组、防火墙等资源的添加、更新、删除动作后(以下统称消息通知),云计算网络控制器将会发送给交换机驱动程序,交换机驱动程序会将该消息通知转换为rpc并通知各openflow交换机和虚拟交换机,云计算网络控制器和各交换机之间还会定时同步这些消息通知。这里,消息通知的协议不限于特定的rpc,也可以使用某种同步协议或组件来实现驱动程序和交换机之间的消息传输和同步,如可以使用zookeeper及其zab协议来实现。本发明实施例中,云计算网络平台将获得的配置数据发送给所述openflow交换机;其中,所述配置数据包括:所述云计算网络平台根据下联的openflow交换机个数,为各交换机建立逻辑上的全网状隧道;当配置虚拟网络时,为每个计算节点上分配本地有效的虚拟网络id:vlan_id,以及为虚拟网络分配全局唯一的隧道id:tun_id,并保存各节点上的本地vlan_id和全局tun_id之间的映射关系;为每个计算节点分配标识符:host_id,该标识符全局有效;为每个虚拟机分配标识符:vm_id,该标识符本host主机有效,并保存虚拟机和网口的映射关系;为每个虚拟路由器分配标识符:router_id,该标识符全局有效;虚拟机所属的计算节点、虚拟机网口的物理mac地址和名称、以及对应的openflow端口号、虚拟机属于哪个网络和子网的无类别域间路由cidr信息;虚拟路由器的配置、连接的子网、接口ip地址信息、以及连接的外部网络接口信息;交换机和计算节点的连接关系。openflow交换机根据这些配置数据下发流表。步骤202:当计算节点或网络节点上的所述虚拟交换机收到所述消息通知时,下发用于指示虚拟机流量进出的流表。本发明实施例中,当计算节点或网络节点上的虚拟交换机收到创建虚拟机的消息通知时,会下发1张openflow流表,该流表用于指示虚拟机流量进出;所述流表包括:表项1:优先级32768,匹配:虚拟机网口,动作:添加vlan标签,配置vlanid为所述分配的本地vlan_id,转发到连接openflow交换机的端口;表项2:优先级32767,匹配:连接openflow交换机的端口,虚拟机mac_da地址,动作:剥除vlan标签,发送给虚拟机网口;表项3:优先级0,匹配:任意报文,动作:丢弃。步骤203:当所述openflow交换机收到所述消息通知时,根据配置数据下发以下7张流表:用于处理广播报文的流表、用于识别网络的流表、用于生成2层转发信息的流表、用于安全组过滤的流表、用于生成3层分布式转发信息的流表、用于防火墙过滤的流表、用于转发的流表。本发明实施例中,当openflow交换机上的本地控制器收到虚拟机、路由器、安全组、防火墙等创建消息通知后,会将配置数据保存在本地数据库中。然后,根据这些配置数据,下发如下7张openflow流表:流表0:用于处理广播报文的流表,包括:表项1:优先级32768,匹配:mac_da为ff:ff:ff:ff:ff:ff,dl_type为0x0806,arp_op=1,动作:设置arp_op=2,复制mac_sa到mac_da,复制arp_sha字段到arp_tha字段,复制arp_spa字段到arp_tpa字段,复制arp_tpa字段到arp_spa,通过packet_in消息上送所述openflow交换机;表项2:优先级32767,匹配:mac_da为ff:ff:ff:ff:ff:ff,且udp端口号为67的广播报文,动作:通过packet_in消息上送所述openflow交换机;表项3:优先级1,匹配:mac_da地址为ff:ff:ff:ff:ff:ff的广播报文, 动作:丢弃;表项4:优先级0,匹配:任意报文,动作:跳转到用于识别网络的流表。流表1:用于识别网络的流表,包括:表项1:优先级32768,匹配:vlanid,动作:设置metadata值为host_id和vlan_id的拼接:host_id<<13|vlan_id;表项2:优先级32767,匹配:tun_id,动作:剥除tunnel头,根据映射关系,添加vlan标签,配置本地vlan_id,设置metadata值为host_id和vlan_id的拼接:host_id<<13|vlan_id;表项3:优先级0,匹配:任意报文,动作:跳转到用于生成2层转发信息的流表。这里,根据用户网络个数和虚拟机的配置组合,表项1、2可能会有很多条。其中,metadata为openflow协议中的元数据,用于在流表中间传递数据。该字段为64位,这里对metadata做如下定义:64位-63位:保留字段(共2位)62位-53位:out_port字段,表示openflow交换机上的出方向端口号(共10位)52位-41位:router_id字段,表示虚拟机连接的虚拟路由器id(共12位)40位-26位:vm_id字段,表示虚拟机的id(共15位)25位:保留字段(共1位)24位-13位:host_id字段,表示虚拟机所属的节点id(共12位)12位-1位:vlan_id字段,表示虚拟机所属虚拟网络的id(共12位)流表2:用于生成2层转发信息的流表,首先,查找出连接在该交换机下各节点上的所有虚拟机所属的网络和dhcp服务所属的网络。遍历上述网络,找出网络下所有连接的虚拟机网口mac地址、dhcp服务mac地址和 vm_id,以及所在的节点信息、端口连接信息和隧道信息。生成表项,包括:表项1:优先级32768,匹配mac_da为交换机直连节点的虚拟机mac地址,动作:根据查找出的映射关系,设置metadata的vm_id字段;根据连接虚拟机所在节点的交换机端口号,设置metadata的out_port字段,跳转到用于安全组过滤的流表;表项2:优先级32767,匹配mac_da为交换机跨机架连接的虚拟机mac地址,动作:剥除vlan标签,并根据映射关系设置对应的tun_id,发送给跨机架虚拟机所在节点的隧道端口;表项3:优先级0,匹配:任意报文,动作:跳转到用于安全组过滤的流表。这里,根据虚拟机和网络个数组合,表项1、2可能会有很多条。流表3:用于安全组过滤的流表,当用户给虚拟机绑定安全组后,根据每条安全组规则,以及本交换机同一台机架上虚拟机(vm_id)的组合,生成流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的vm_id为虚拟机id,匹配安全组表项的各过滤字段,动作:丢弃;表项2:优先级0,匹配:任意报文,动作:跳转到用于生成3层分布式转发信息的流表。这里,根据用户的安全组配置组合,表项1可能会有很多条。流表4:用于生成3层分布式转发信息的流表,当用户关联了不同子网到虚拟路由器上后,这些不同子网下的虚拟机将可以通过虚拟路由器进行互通。本发明实施例会在每台相关openflow交换机的流表4中配置流表,达到分布式路由的目的。1、遍历所有虚拟路由器,找出虚拟路由器所有接口的mac地址,所有连接着的子网,以及子网下的所有虚拟机。2、过滤出所有和本交换机所连接的节点下的所有虚拟机。3、找出通过虚拟路由器连接且不在同一网段的所有虚拟机,并对这些虚拟机两两组合成配对组。根据如上查找出的跨网段路由器连接的虚拟机配对组,生成流表,包括:表项1:优先级32768,匹配:ip_da为本交换机直连节点上的虚拟机,动作:配置metadata中的router_id字段为虚拟机所连的虚拟路由器的id;设置mac_da为目的虚拟机的mac地址;根据连接虚拟机所在节点的交换机端口号,设置metadata的out_port字段;表项2:优先级32767,匹配:ip_da为跨机架连接的节点上的虚拟机,动作:设置metadata中的router_id字段为虚拟机所连的虚拟路由器的id;配置mac_da为目的虚拟机的mac地址;剥除vlan标签,根据映射关系设置对应的tun_id,发送给跨机架目的虚拟机所在节点的隧道端口。表项3:优先级0,匹配:任意报文,动作:跳转到用于防火墙过滤的流表。这里,表项1、2,可能会有很多条。流表5:用于防火墙过滤的流表,当用户给虚拟路由器绑定防火墙后,根据每条防火墙规则,以及虚拟路由器(router_id)的组合,生成流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的router_id字段为防火墙绑定的虚拟路由器,匹配防火墙规则的各过滤字段,动作:丢弃;表项2:优先级0,匹配:任意报文,动作:跳转到用于转发的流表。这里,根据用户的配置组合,表项1可能会有很多条。流表6:用于转发的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的out_port字段不为0,动作:转发到out_port字段所表示的端口;表项2:优先级0,匹配:任意报文,动作:丢弃。这里,表项1,可能会有很多条。本发明实施例中,当所述openflow交换机收到packet_in消息时,从所 述云计算网络平台获得如下信息:网络节点上dhcp服务的端口mac地址、openflow端口、网络节点是否和所述openflow交换机在同个机架上、以及端口连接关系。当收到dhcp报文时,将mac_da改为网络节点上dhcp服务端口的mac地址;当网络节点和所述openflow交换机在同个机架上时,通过packet_out消息把该报文发送到和网络节点相连接的端口上;当网络节点和所述openflow交换机在不同机架上时,剥除vlan标签,打上对应的tun_id,通过packet_out消息发送到和网络节点相连接的隧道端口上;当收到arp报文时,通过arp_spa查找到对应端口的mac地址,并配置到报文的mac_sa和arp_sha中,发送该报文到openflow虚拟端口in_port。上述方案中,openflow交换机是指openflow交换机中的控制器。具体地,在openflow交换机上运行的本地控制器,将会收到packet_in消息,即arp和dhcp广播报文。控制器会通过rpc从云计算网络平台得到如下信息:网络节点上dhcp服务的端口mac地址、openflow端口、网络节点是否和openflow交换机在同个机架上、以及端口连接关系。当收到dhcp报文时,控制器将会把mac_da改为网络节点上dhcp服务端口的mac地址。当网络节点和openflow交换机在同个机架上,那么控制器会通过packet_out消息把该报文发送到和网络节点相连接的端口上。当网络节点和openflow交换机在不同机架上,那么控制器会剥除vlan标签,打上对应的tun_id,通过packet_out消息发送到和网络节点相连接的隧道端口上。该处理将会重定向dhcp广播报文到dhcp服务端口,从而实现抑制dhcp广播。当收到arp报文时,控制器将会通过arp_spa查找到对应端口的mac地址,并配置到报文的mac_sa和arp_sha中,然后发送该报文到openflow虚拟端口in_port,即发回源端口。该处理会实现arp代理,抑制arp广播。本发明实施例中,当用户做出修改、删除虚拟机、网络、子网、路由器或迁移虚拟机时,上述步骤203中的相关表项也需要重新计算,并做相应的修改、删除流表的动作。本发明实施例中,openflow交换机上的流表转发示意图如图3所示,流表0用于处理广播报文;流表1用于识别网络;流表2用于生成2层转发信息;流表3用于安全组过滤;流表4用于生成3层分布式转发信息;流表5用于防火墙过滤;流表6用于最终转发。转发的详细流程可参照上述各个流表的具体表项进行理解,此处不再赘述。图4为本发明实施例的基于openflow的云计算分布式网络实现系统的结构组成示意图,如图4所示,所述基于openflow的云计算分布式网络实现系统,包括:云计算网络平台41、计算节点42、网络节点43、位于所述计算节点42/网络节点43上的虚拟交换机44、openflow交换机45、所述云计算网络平台41,用于将消息通知发送给虚拟交换机44和/或openflow交换机45;所述虚拟交换机44,用于收到所述消息通知时,下发用于指示虚拟机流量进出的流表;所述openflow交换机45,用于收到所述消息通知时,根据配置数据下发以下7张流表:用于处理广播报文的流表、用于识别网络的流表、用于生成2层转发信息的流表、用于安全组过滤的流表、用于生成3层分布式转发信息的流表、用于防火墙过滤的流表、用于转发的流表。本发明实施例中,所述云计算网络平台41,还用于将获得的配置数据发送给所述openflow交换机45;其中,所述配置数据包括:所述云计算网络平台41根据下联的openflow交换机45个数,为各交换机建立逻辑上的全网状隧道;当配置虚拟网络时,为每个计算节点42上分配本地有效的虚拟网络id:vlan_id,以及为虚拟网络分配全局唯一的隧道id:tun_id,并保存各节点上的本地vlan_id和全局tun_id之间的映射关系;为每个计算节点42分配标识符:host_id,该标识符全局有效;为每个虚拟机分配标识符:vm_id,该标识符本host主机有效,并保存虚拟机和网口的映射关系;为每个虚拟路由器分配标识符:router_id,该标识符全局有效;虚拟机所属的计算节点42、虚拟机网口的物理mac地址和名称、以及对应的openflow端口号、虚拟机属于哪个网络和子网的无类别域间路由cidr信息;虚拟路由器的配置、连接的子网、接口ip地址信息、以及连接的外部网络接口信息;交换机和计算节点42的连接关系。本发明实施例中,所述虚拟交换机44,还用于收到用于创建虚拟机的消息通知时,下发用于指示虚拟机流量进出的流表;其中,所述流表包括:表项1:优先级32768,匹配:虚拟机网口,动作:添加vlan标签,配置vlanid为所述分配的本地vlan_id,转发到连接openflow交换机45的端口;表项2:优先级32767,匹配:连接openflow交换机45的端口,虚拟机mac_da地址,动作:剥除vlan标签,发送给虚拟机网口;表项3:优先级0,匹配:任意报文,动作:丢弃。本发明实施例中,所述用于处理广播报文的流表,包括:表项1:优先级32768,匹配:mac_da为ff:ff:ff:ff:ff:ff,dl_type为0x0806,arp_op=1,动作:设置arp_op=2,复制mac_sa到mac_da,复制arp_sha字段到arp_tha字段,复制arp_spa字段到arp_tpa字段,复制arp_tpa字段到arp_spa,通过packet_in消息上送所述openflow交换机45;表项2:优先级32767,匹配:mac_da为ff:ff:ff:ff:ff:ff,且udp端口号为67的广播报文,动作:通过packet_in消息上送所述openflow交换机45;表项3:优先级1,匹配:mac_da地址为ff:ff:ff:ff:ff:ff的广播报文,动作:丢弃;表项4:优先级0,匹配:任意报文,动作:跳转到用于识别网络的流表。本发明实施例中,所述用于识别网络的流表,包括:表项1:优先级32768,匹配:vlanid,动作:设置metadata值为host_id和vlan_id的拼接:host_id<<13|vlan_id;表项2:优先级32767,匹配:tun_id,动作:剥除tunnel头,根据映射关系,添加vlan标签,配置本地vlan_id,设置metadata值为host_id和vlan_id的拼接:host_id<<13|vlan_id;表项3:优先级0,匹配:任意报文,动作:跳转到用于生成2层转发信息的流表。本发明实施例中,所述用于生成2层转发信息的流表,包括:表项1:优先级32768,匹配mac_da为交换机直连节点的虚拟机mac地址,动作:根据查找出的映射关系,设置metadata的vm_id字段;根据连接虚拟机所在节点的交换机端口号,设置metadata的out_port字段,跳转到用于安全组过滤的流表;表项2:优先级32767,匹配mac_da为交换机跨机架连接的虚拟机mac地址,动作:剥除vlan标签,并根据映射关系设置对应的tun_id,发送给跨机架虚拟机所在节点的隧道端口;表项3:优先级0,匹配:任意报文,动作:跳转到用于安全组过滤的流表。本发明实施例中,所述用于安全组过滤的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的vm_id为虚拟机id,匹配安全组表项的各过滤字段,动作:丢弃;表项2:优先级0,匹配:任意报文,动作:跳转到用于生成3层分布式转发信息的流表。本发明实施例中,所述用于生成3层分布式转发信息的流表,包括:表项1:优先级32768,匹配:ip_da为本交换机直连节点上的虚拟机,动作:配置metadata中的router_id字段为虚拟机所连的虚拟路由器的id;设置mac_da为目的虚拟机的mac地址;根据连接虚拟机所在节点的交换机端口号,设置metadata的out_port字段;表项2:优先级32767,匹配:ip_da为跨机架连接的节点上的虚拟机,动作:设置metadata中的router_id字段为虚拟机所连的虚拟路由器的id;配置mac_da为目的虚拟机的mac地址;剥除vlan标签,根据映射关系设置对应的tun_id,发送给跨机架目的虚拟机所在节点的隧道端口。表项3:优先级0,匹配:任意报文,动作:跳转到用于防火墙过滤的流表。本发明实施例中,所述用于防火墙过滤的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的router_id字段为防火墙绑定的虚拟路由器,匹配防火墙规则的各过滤字段,动作:丢弃;表项2:优先级0,匹配:任意报文,动作:跳转到用于转发的流表。本发明实施例中,所述用于转发的流表,包括:表项1:优先级32768,匹配:通过掩码匹配出metadata的out_port字段不为0,动作:转发到out_port字段所表示的端口;表项2:优先级0,匹配:任意报文,动作:丢弃。本发明实施例中,所述openflow交换机45,还用于收到packet_in消息时,从所述云计算网络平台41获得如下信息:网络节点43上dhcp服务的端口mac地址、openflow端口、网络节点43是否和所述openflow交换机45在同个机架上、以及端口连接关系。本发明实施例中,所述openflow交换机45,还用于当收到dhcp报文时,将mac_da改为网络节点43上dhcp服务端口的mac地址;当网络节点43和所述openflow交换机45在同个机架上时,通过packet_out消息把该报文发送到和网络节点43相连接的端口上;当网络节点43和所述openflow交换机45在不同机架上时,剥除vlan标签,打上对应的tun_id,通过packet_out消息发送到和网络节点43相连接的隧道端口上;当收到arp报文时,通过arp_spa查找到对应端口的mac地址,并配置到报文的mac_sa和arp_sha中,发送该报文到openflow虚拟端口in_port。本发明实施例的技术方案中,采用7级流表,每张流表的特有规则可以使openflow交换机实现云计算数据中心网络的2层转发,3层分布式路由,安全 组和防火墙。消除网络节点上的多网桥、网络空间、vethpair、通过openflow交换机来实现相应的功能,提高了转发效率。对openflow流表的metadata进行自定义,可以节约大量硬件表项资源。对openflow流表的metadata进行自定义,可以使openflow交换机支持安全组和防火墙的功能。对节点分配本地vlan,然后机架间做host+vlan和tunnel转换,避免了只能创建4094个vlan虚拟网络的限制,大大提高了云计算网络中的虚拟网络数目。通过集成openflow控制器在交换机上,使控制器分布式,可以解决控制器的单一故障,并能提高控制器和交换机的访问速度。3层转发中,通过过滤虚拟机,使本交换机只处理直连虚拟机之间的3层转发,提高了流表利用率。做跨机架转发时,先剥除vlan报文头,再转发至隧道网络,这样可以减少vlan头带来的额外开销,提高隧道网络的带宽利用率。通过流表先修改arp广播报文相关字段,再通过packet-in上送控制器配置mac_sa,arp_sha字段,并发送至in_port,来实现arp代理,从而抑制arp广播,防止形成广播风暴,也提高了网络利用率。上送dhcp广播报文,修改其目的地址使其成为单播报文,并发送至dhcp服务端口,从而抑制dhcp广播,防止形成广播风暴,也提高了网络利用率。下面对本发明上述实施例出现的技术术语作解释说明:mac_sa:以太网中的源mac地址mac_da:以太网中的目的mac地址dl_type:以太网中链路层网络类型ip_da:目的ip地址ip_sa:源ip地址vlan_id:虚拟局域网标识符metadata:openflow协议中的元数据tun_id:隧道标识符arp:地址解析协议arp_op:地址解析协议中的操作码,其中1为:请求;2为:回复arp_tha:地址解析协议中的目标硬件地址arp_sha:地址解析协议中的发送者硬件地址arp_tpa:地址解析协议中的目标协议地址arp_spa:地址解析协议中的发送者协议地址openflow:开放流协议openflow:流表项的优先级为数字越大优先级越高,范围是0-65535。host:服务器节点,包括控制节点、计算节点、网络节点等。本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。在本发明所提供的几个实施例中,应该理解到,所揭露的方法和智能设备,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。另外,在本发明各实施例中的各功能单元可以全部集成在一个第二处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
:的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1