转自:https://www.jianshu.com/p/cccfb481d548

产生背景:云计算成为企业IT建设新形态

  云计算,凭借其在系统利用率高、人力/管理成本低、灵活性、可扩展性强等方面表现出的优势,已经成为目前企业IT建设的新形态;而在云计算中,大量的采用和部署虚拟化是一个基本的技术模式。服务器虚拟化技术的广泛部署,极大地增加了数据中心的计算密度;同时,为了实现业务的灵活变更,虚拟机VM(Virtual Machine)需要能够在网络中进行不受限得迁移,如下图所示。实际上,对于数据中心而言,虚拟机迁移已经成为了一个常态性业务。VXLAN正是为了解决云计算时代虚拟化中的一系列问题而产生的一项技术。

  

  虚拟机数量的快速增长与虚拟机迁移业务的日趋频繁,给传统的“二层+三层”数据中心网络带来了新的挑战:

  虚拟机规模受网络设备表项规格的限制
  对于同网段主机的通信而言,报文通过查询MAC表进行二层转发。服务器虚拟化后,数据中心中VM的数量比原有的物理机发生了数量级的增长,伴随而来的便是虚拟机网卡MAC地址数量的空前增加。

  一般而言,接入侧二层设备的规格较小,MAC地址表项规模已经无法满足快速增长的VM数量。

  传统网络的隔离能力有限
  VLAN作为当前主流的网络隔离技术,在标准定义中只有12比特,也就是说可用的VLAN数量只有4096。对于公有云或其它大型虚拟化云计算服务这种动辄上万甚至更多租户的场景而言,VLAN的隔离能力显然已经力不从心。

  虚拟机迁移范围受限
  虚拟机迁移,顾名思义,就是将虚拟机从一个物理机迁移到另一个物理机,但是要求在迁移过程中业务不能中断。要做到这一点,需要保证虚拟机迁移前后,其IP地址、MAC地址等参数维持不变。这就决定了,虚拟机迁移必须发生在一个二层域中。而传统数据中心网络的二层域,将虚拟机迁移限制在了一个较小的局部范围内。

  值得一提的是,通过堆叠、SVF、TRILL等技术构建物理上的大二层网络,可以将虚拟机迁移的范围扩大。但是,构建物理上的大二层,难免需要对原来的网络做大的改动,并且物理大二层网络的范围依然会受到种种条件的限制。

简介:

  VXLAN(Virtual eXtensible Local Area Network,虚拟扩展局域网),是由IETF定义的NVO3(Network Virtualization over Layer 3)标准技术之一。它采用L2 over L4(MAC-in-UDP)的报文封装模式,将二层报文用三层协议进行封装,可实现二层网络在三层范围内进行扩展,同时满足数据中心大二层虚拟迁移和多租户的需求。

VXLAN网络模型

    

  从上图中可以发现,VXLAN网络中出现了以下传统数据中心网络中没有的新元素:

  • VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端点)

  VXLAN网络的边缘设备,是VXLAN隧道的起点和终点,VXLAN报文的相关处理均在这上面进行。总之,它是VXLAN网络中绝对的主角。VTEP既可以是一个独立的网络设备(比如华为的CE系列交换机),也可以是虚拟机所在的服务器。

  • VNI(VXLAN Network Identifier,VXLAN 网络标识符)

  前文提到,以太网数据帧中VLAN只占了12比特的空间,这使得VLAN的隔离能力在数据中心网络中力不从心。而VNI的出现,就是专门解决这个问题的。VNI是一种类似于VLAN ID的用户标示,一个VNI代表了一个租户,属于不同VNI的虚拟机之间不能直接进行二层通信。VXLAN报文封装时,给VNI分配了足够的空间使其可以支持海量租户的隔离。

  • VXLAN隧道

  “隧道”是一个逻辑上的概念,它并不新鲜,比如大家熟悉的GRE。说白了就是将原始报文“变身”下,加以“包装”,好让它可以在承载网络(比如IP网络)上传输。从主机的角度看,就好像原始报文的起点和终点之间,有一条直通的链路一样。而这个看起来直通的链路,就是“隧道”。顾名思义,“VXLAN隧道”便是用来传输经过VXLAN封装的报文的,它是建立在两个VTEP之间的一条虚拟通道。

  1)VTEP将大量VM的MAC地址“隐形”,以减小设备上的MAC表项。VTEP会将VM发出的原始报文封装成一个新的UDP报文,并使用物理网络的IP和MAC地址作为外层头,对网络中的其他设备只表现为封装后的参数。也就是说,网络中的其他设备看不到VM发送的原始报文。

  如果服务器作为VTEP,那从服务器发送到接入设备的报文便是经过封装后的报文,这样,接入设备就不需要学习VM的MAC地址了,它只需要根据外层封装的报文头负责基本的三层转发就可以了。因此,虚拟机规模就不会受网络设备表项规格的限制了。

  当然,如果网络设备作为VTEP,它还是需要学习VM的MAC地址。但是,从对报文进行封装的角度来说,网络设备的性能还是要比服务器强很多。

  2)对于“传统网络的隔离能力有限”这个问题,VXLAN采用了“扩容”的解决方法,引入了类似VLAN ID的用户标示,也就是前文提到的VNI。一个VNI代表了一个租户,属于不同VNI的虚拟机之间不能直接进行二层通信。VTEP在对报文进行VXLAN封装时,给VNI分配了24比特的空间,这就意味着VXLAN网络理论上支持多达16M(即:2^24-1)的租户隔离。相比VLAN,VNI的隔离能力得到了巨大的提升,有效得解决了云计算中海量租户隔离的问题。

  3)有了VTEP的封装机制和VXLAN隧道后,所谓的 “二层域”就可以轻而易举的突破物理上的界限。也就是说,在IP网络中, “明”里传输的是跨越三层网络的UDP报文,“暗”里却已经悄悄将源VM的原始报文送达目的VM。就好像在三层的网络之上,构建出了一个虚拟的二层网络,而且只要IP网络路由可达,这个虚拟的二层网络想做多大就做多大。所以说VXLAN是一种NVO3技术。

VXLAN报文格式
  

  VTEP对VM发送的原始以太帧(Original L2 Frame)进行了以下“包装”:

  • VXLAN Header

  增加VXLAN头(8字节),其中包含24比特的VNI字段,用来定义VXLAN网络中不同的租户。此外,还包含VXLAN Flags(8比特,取值为00001000)和两个保留字段(分别为24比特和8比特)。

  • UDP Header

  VXLAN头和原始以太帧一起作为UDP的数据。UDP头中,目的端口号(VXLAN Port)固定为4789,源端口号(UDP Src. Port)是原始以太帧通过哈希算法计算后的值。

  • Outer IP Header

  封装外层IP头。其中,源IP地址(Outer Src. IP)为源VM所属VTEP的IP地址,目的IP地址(Outer Dst. IP)为目的VM所属VTEP的IP地址。

  • Outer MAC Header

  封装外层以太头。其中,源MAC地址(Src. MAC Addr.)为源VM所属VTEP的MAC地址,目的MAC地址(Dst. MAC Addr.)为到达目的VTEP的路径上下一跳设备的MAC地址。

VXLAN报文转发机制

  建立VXLAN隧道

  1.哪些VTEP间需要建立VXLAN隧道

  

  如前所述,通过VXLAN隧道,“二层域”可以突破物理上的界限,实现大二层网络中VM之间的通信。所以,连接在不同VTEP上的VM之间如果有“大二层”互通的需求,这两个VTEP之间就需要建立VXLAN隧道。换言之,同一大二层域内的VTEP之间都需要建立VXLAN隧道。例如,假设上图中VTEP_1连接的VM、VTEP_2连接的VM以及VTEP_3连接的VM之间需要“大二层”互通,那VTEP_1、VTEP_2和VTEP_3之间就需要两两建立VXLAN隧道。如下图

    

  1)什么是“同一大二层域”

  前面提到的“同一大二层域”,就类似于传统网络中VLAN(虚拟局域网)的概念,只不过在VXLAN网络中,它有另外一个名字,叫做Bridge-Domain,简称BD。

我们知道,不同的VLAN是通过VLAN ID来进行区分的,那不同的BD是如何进行区分的呢?其实前面已经提到了,就是通过VNI来区分的。对于华为CE系列交换机而言,BD与VNI是1:1的映射关系,这种映射关系是通过在VTEP上配置命令行建立起来的。配置如下:

  bridge-domain 10 //表示创建一个“大二层广播域”BD,其编号为10

  vxlan vni 5000 //表示在BD 10下,指定与之关联的VNI为5000

  VTEP会根据以上配置生成BD与VNI的映射关系表,该映射表可以通过命令行查看,如下所示:

  <HUAWEI> display vxlan vni

  Number of vxlan vni : 1

  VNI BD-ID State

  ----------------------------------

  5000 10 up

  有了映射表后,进入VTEP的报文就可以根据自己所属的BD来确定报文封装时该添加哪个VNI。
  2)如何确定报文属于哪个BD

  这里要先澄清下,VTEP只是交换机承担的一个角色而已,只是交换机功能的一部分。也就是说,并非所有进入到交换机的报文都会走VXLAN隧道(也可能报文就是走普通的二三层转发流程)。所以,我们在回答“如何确定报文属于哪个BD”之前,必须先要回答“哪些报文要进入VXLAN隧道”。

  报文要进入交换机进行下一步处理,首先得先过接口这一关,可以说接口掌控着对报文的“生杀大权”。传统网络中定义了三种不同类型的接口:Access、Trunk、Hybrid。这三种类型的接口虽然应用场景不同,但他们的最终目的是一样的:一是根据配置来检查哪些报文是允许通过的;二是判断对检查通过的报文怎样的处理。

  其实在VXLAN网络中,VTEP上的接口也承担着类似的任务,只不过在CE系列交换机中,这里的接口不是物理接口,而是一个叫做“二层子接口”的逻辑接口。类似的,二层子接口主要做两件事:一是根据配置来检查哪些报文需要进入VXLAN隧道;二是判断对检查通过的报文怎样的处理。下面我们就来看下,二层子接口是如何完成这两件事的。

  在二层子接口上,可以根据需要定义不同的流封装类型(类似于传统网络中不同的接口类型)。CE系列交换机目前支持三种不同的流封装类型,分别是dot1q、untag和default,它们各自对报文的处理方式如下表所示。

  

  VXLAN隧道两端二层子接口的配置并不一定是完全对等的。正因为这样,才可能实现属于同一网段但是不同VLAN的两个VM通过VXLAN隧道进行通信。

  3)二层子接口加入BD

  看了上面的描述,再来回答“如何确定报文属于哪个BD”就非常简单了。其实,只要将二层子接口加入指定的BD,然后根据二层子接口上的配置,就可以确定报文属于哪个BD啦!比如下图所示的组网,我们可以分别在VTEP的两个物理接口10GE 1/0/1和10GE 1/0/2上配置不同流封装类型的二层子接口并将其分别加入不同的BD。

  

  基于二层物理接口10GE 1/0/1,分别创建二层子接口10GE 1/0/1.1和10GE 1/0/1.2,且分别配置其流封装类型为dot1q和untag。配置如下:

  interface 10GE1/0/1.1 mode l2 //创建二层子接口10GE1/0/1.1

  encapsulation dot1q vid 10 //只允许携带VLAN Tag 10的报文进入VXLAN隧道

  bridge-domain 10 //报文进入的是BD 10

  interface 10GE1/0/1.2 mode l2 //创建二层子接口10GE1/0/1.2

  encapsulation untag //只允许不携带VLAN Tag的报文进入VXLAN隧道

  bridge-domain 20 //报文进入的是BD 20

  基于二层物理接口10GE 1/0/2,创建二层子接口10GE 1/0/2.1,且流封装类型为default。配置如下:

  interface 10GE1/0/2.1 mode l2 //创建二层子接口10GE1/0/2.1

  encapsulation default //允许所有报文进入VXLAN隧道

  bridge-domain 30 //报文进入的是BD 30

  此时你可能会有这样的疑问,为什么要在10GE 1/0/1上创建两个不同类型的子接口?是否还可以继续在10GE 1/0/1上创建一个default类型的二层子接口?换句话说,用户应该如何选择配置哪种类型的二层子接口?三种类型的二层子接口之间,是否存在配置约束关系?

  4)各类型二层子接口的应用场景
  我们先来解答下是否可以在10GE 1/0/1上再创建一个default类型的二层子接口。答案是不可以。其实根据上表的描述,这一点很容易理解。因为default类型的二层子接口允许所有报文进入VXLAN隧道,而dot1q和untag类型的二层子接口只允许某一类报文进入VXLAN隧道。这就决定了,default类型的二层子接口跟其他两种类型的二层子接口是不可以在同一物理接口上共存的。否则,报文到了接口之后如何判断要进入哪个二层子接口呢。所以,default类型的子接口一般应用在经过此接口的报文均需要走同一条VXLAN隧道的场景,即下挂的VM全部属于同一BD。例如,上图中VM3和VM4均属于BD 30,则10GE 1/0/2上就可以创建default类型的二层子接口。

  再来看下为什么可以在10GE 1/0/1上分别创建dot1q和untag类型的二层子接口。如上图所示,VM1和VM2分别属于VLAN 10和VLAN 20,且分别属于不同的大二层域BD 10和BD 20,显然他们发出的报文要进入不同的VXLAN隧道。如果VM1和VM2发出的报文在到达VTEP的10GE 1/0/1接口时,一个是携带VLAN 10的Tag的,一个是不携带VLAN Tag的(比如二层交换机上行连接VTEP的接口上配置的接口类型是Trunk,允许通过的VLAN为10和20,PVID为VLAN 20),则为了区分两种报文,就必须要在10GE 1/0/1上分别创建dot1q和untag类型的二层子接口。所以,当经过同一物理接口的报文既有带VLAN Tag的,又有不带VLAN Tag的,并且他们各自要进入不同的VXLAN隧道,则可以在该物理接口上同时创建dot1q和untag类型的二层子接口。

  当然,现网中可能存在各种不同的组网,在实际应用中,请务必根据组网需求,结合上表,合理规划二层子接口的流封装类型。

  5)VXLAN隧道怎么建

  现在,我们可以来看下VXLAN隧道是怎么建立起来的了。

  一般而言,隧道的建立不外乎手工方式和自动方式两种。

  手工方式
  这种方式需要用户手动指定VXLAN隧道的源和目的IP地址分别为本端和对端VTEP的IP地址,也就是人为的在本端VTEP和对端VTEP之间建立静态VXLAN隧道。

  对于CE系列交换机,以上配置是在NVE(Network Virtualization Edge)接口下完成的。配置过程如下

  interface Nve1 //创建逻辑接口NVE 1

  source 1.1.1.1 //配置源VTEP的IP地址(推荐使用Loopback接口的IP地址)

  vni 5000 head-end peer-list 2.2.2.2

  vni 5000 head-end peer-list 2.2.2.3
  其中,vni 5000 head-end peer-list 2.2.2.2和vni 5000 head-end peer-list 2.2.2.3的配置,表示属于VNI 5000的对端VTEP有两个,IP地址分别为2.2.2.2和2.2.2.3。根据这两条配置,VTEP上会生成如下所示的一张表:
  <HUAWEI> display vxlan vni 5000 verbose

  BD ID : 10

  State : up

  NVE : 288

  Source : 1.1.1.1

  UDP Port : 4789

  BUM Mode : head-end

  Group Address : -

  Peer List : 2.2.2.2 2.2.2.3

  根据vxlan vni 5000 verbose中的Peer List,本端VTEP就可以知道属于同一BD(或同一VNI)的对端VTEP都有哪些,这也就决定了同一大二层广播域的范围。当VTEP收到BUM(Broadcast&Unknown-unicast&Multicast,广播&未知单播&组播)报文时,会将报文复制并发送给Peer List中所列的所有对端VTEP(这就好比广播报文在VLAN内广播)。因此,这张表也被称为“头端复制列表”。当VTEP收到已知单播报文时,会根据VTEP上的MAC表来确定报文要从哪条VXLAN隧道走。而此时Peer List中所列的对端,则充当了MAC表中“出接口”的角色。在后面的报文转发流程中,你将会看到头端复制列表是如何在VXLAN网络中指导报文进行转发的。

  自动方式
  自动方式下VXLAN隧道的建立需要借助于其他的协议,例如BGP。CE系列交换机中,自动方式建立VXLAN隧道主要应用在EVN(Ethernet Virtual Network)和VXLAN的分布式网关场景中。

  6)如何确定报文要进哪条隧道

  从前面的描述我们知道,属于同一BD的VXLAN隧道可能不止一条,比如前面的头端复制列表中,同一个源端VTEP(1.1.1.1)对应了两个对端VTEP(2.2.2.2和2.2.2.3)。那就带来了另一个问题,报文到底应该走哪一条隧道呢?

  我们知道,基本的二三层转发中,二层转发依赖的是MAC表,如果没有对应的MAC表,则主机发送ARP广播报文请求对端的MAC地址;三层转发依赖的是FIB表。在VXLAN中,其实也是同样的道理。下面就让我们来看下,VXLAN网络中报文的转发流程。相信看完下面的内容,关于“如何确定报文要进哪条隧道”的疑惑也就迎刃而解了。

  2.VXLAN网络中报文的转发流程

  1)同子网互通

  

  如上图所示,VM_A、VM_B和VM_C同属于10.1.1.0/24网段,且同属于VNI 5000。此时,VM_A想与VM_C进行通信。由于是首次进行通信,VM_A上没有VM_C的MAC地址,所以会发送ARP广播报文请求VM_C的MAC地址。

  下面就让我们根据ARP请求报文及ARP应答报文的转发流程,来看下MAC地址是如何进行学习的。

  ※ARP请求报文转发流程
  

  ARP请求报文的转发流程如下:

  1.VM_A发送源MAC为MAC_A、目的MAC为全C、源IP为IP_A、目的IP为IP_C的ARP广播报文,请求VM_C的MAC地址。

  2.VTEP_1收到ARP请求后,根据二层子接口上的配置判断报文需要进入VXLAN隧道。确定了报文所属BD后,也就确定了报文所属的VNI。同时,VTEP_1学习MAC_A、VNI和报文入接口(Port_1,即二层子接口对应的物理接口)的对应关系,并记录在本地MAC表中。之后,VTEP_1会根据头端复制列表对报文进行复制,并分别进行封装。

可以看到,这里封装的外层源IP地址为本地VTEP(VTEP_1)的IP地址,外层目的IP地址为对端VTEP(VTEP_2和VTEP_3)的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。

封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

  3.报文到达VTEP_2和VTEP_3后,VTEP对报文进行解封装,得到VM_A发送的原始报文。同时,VTEP_2和VTEP_3学习VM_A的MAC地址、VNI和远端VTEP的IP地址(IP_1)的对应关系,并记录在本地MAC表中。之后,VTEP_2和VTEP_3根据二层子接口上的配置对报文进行相应的处理并在对应的二层域内广播。

  VM_B和VM_C接收到ARP请求后,比较报文中的目的IP地址是否为本机的IP地址。VM_B发现目的IP不是本机IP,故将报文丢弃;VM_C发现目的IP是本机IP,则对ARP请求做出应答。下面,让我们看下ARP应答报文是如何进行转发的。

  ※ARP应答报文转发流程
  

  ARP应答报文的转发流程如下:

  4 由于此时VM_C上已经学习到了VM_A的MAC地址,所以ARP应答报文为单播报文。报文源MAC为MAC_C,目的MAC为MAC_A,源IP为IP_C、目的IP为IP_A。

  5 VTEP_3接收到VM_C发送的ARP应答报文后,识别报文所属的VNI(识别过程与步骤2类似)。同时,VTEP_3学习MAC_C、VNI和报文入接口(Port_3)的对应关系,并记录在本地MAC表中。之后,VTEP_3对报文进行封装。可以看到,这里封装的外层源IP地址为本地VTEP(VTEP_3)的IP地址,外层目的IP地址为对端VTEP(VTEP_1)的IP地址;外层源MAC地址为本地VTEP的MAC地址,而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

  6 报文到达VTEP_1后,VTEP_1对报文进行解封装,得到VM_C发送的原始报文。同时,VTEP_1学习VM_C的MAC地址、VNI和远端VTEP的IP地址(IP_3)的对应关系,并记录在本地MAC表中。之后,VTEP_1将解封装后的报文发送给VM_A。

  至此,VM_A和VM_C均已学习到了对方的MAC地址。之后,VM_A和VM_C将采用单播方式进行通信。单播报文的封装与解封装过程,与上中所展示的类似。

  2)不同子网互通

  

  如图3-7所示,VM_A和VM_B分别属于10.1.10.0/24网段和10.1.20.0/24网段,且分别属于VNI 5000和VNI 6000。VM_A和VM_B对应的三层网关分别是VTEP_3上BDIF 10和BDIF 20的IP地址。VTEP_3上存在到10.1.10.0/24网段和10.1.20.0/24网段的路由。此时,VM_A想与VM_B进行通信。

  BDIF接口的功能与VLANIF接口类似,是基于BD创建的三层逻辑接口,用以实现不同子网VM之间或VXLAN网络与非VXLAN网络之间的通信。

  由于是首次进行通信,且VM_A和VM_B处于不同网段,VM_A需要先发送ARP广播报文请求网关(BDIF 10)的MAC,获得网关的MAC后,VM_A先将数据报文发送给网关;之后网关也将发送ARP广播报文请求VM_B的MAC,获得VM_B的MAC后,网关再将数据报文发送给VM_B。以上MAC地址学习的过程与同子网互通中MAC地址学习的流程一致,不再赘述。现在假设VM_A和VM_B均已学到网关的MAC、网关也已经学到VM_A和VM_B的MAC,下面就让我们看下数据报文是如何从VM_A发送到VM_B的。

   

 如上图所示,数据报文从VM_A发送到VM_B的流程如下:

  1 VM_A先将数据报文发送给网关。报文的源MAC为MAC_A,目的MAC为网关BDIF 10的MAC_10,源IP地址为IP_A,目的IP为IP_B。

  2 VTEP_1收到数据报文后,识别此报文所属的VNI(VNI 5000),并根据MAC表项对报文进行封装。可以看到,这里封装的外层源IP地址为本地VTEP的IP地址(IP_1),外层目的IP地址为对端VTEP的IP地址(IP_3);外层源MAC地址为本地VTEP的MAC地址(MAC_1),而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。

  封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

  3 报文进入VTEP_3,VTEP_3对报文进行解封装,得到VM_A发送的原始报文。然后,VTEP_3会对报***如下处理:

  • VTEP_3发现该报文的目的MAC为本机BDIF 10接口的MAC,而目的IP地址为IP_B(10.1.20.1),所以会根据路由表查找到IP_B的下一跳。

  • 发现下一跳为10.1.20.10,出接口为BDIF 20。此时VTEP_3查询ARP表项,并将原始报文的源MAC修改为BDIF 20接口的MAC(MAC_20),将目的MAC修改为VM_B的MAC(MAC_B)。

  • 报文到BDIF 20接口时,识别到需要进入VXLAN隧道(VNI 6000),所以根据MAC表对报文进行封装。这里封装的外层源IP地址为本地VTEP的IP地址(IP_3),外层目的IP地址为对端VTEP的IP地址(IP_2);外层源MAC地址为本地VTEP的MAC地址(MAC_3),而外层目的MAC地址为去往目的IP的网络中下一跳设备的MAC地址。

  封装后的报文,根据外层MAC和IP信息,在IP网络中进行传输,直至到达对端VTEP。

  4 报文到达VTEP_2后,VTEP_2对报文进行解封装,得到内层的数据报文,并将其发送给VM_B。

  VM_B回应VM_A的流程与上述过程类似,本文就不再赘述啦!

  VXLAN网络与非VXLAN网络之间的互通,也需要借助于三层网关。其实现与图3-8的不同点在于报文在VXLAN网络侧会进行封装,而在非VXLAN网络侧不需要进行封装。报文从VXLAN侧进入网关并解封装后,就按照普通的单播报文发送方式进行转发。

VXLAN应用部署方式 

  以下图所示的典型的“Spine-Leaf”数据中心组网为例,给大家介绍一下CE系列交换机VXLAN的应用场景和部署方案。

  

  在上图所示的数据中心里,企业用户拥有多个部门(部门1和部门2),每个部门中拥有多个VM(VM1和VM3,VM2和VM4)。同部门的VM属于同一个网段,不同部门的VM属于不同的网段。用户希望同一部门VM之间、不同部门VM之间,VM与Internet之间均可相互访问。

  1.VXLAN网络的子网互通

  1)相同子网互通

  如下图所示,Leaf1和Leaf2作为VXLAN网络的VTEP,两个Leaf之间搭建VXLAN隧道,并在每个Leaf上部署VXLAN二层网关,即可实现同一部门VM之间的相互通信。此时Spine只作为VXLAN报文的转发节点,不感知VXLAN隧道的存在,可以是任意的三层网络设备。

  部署方案

  

  2)不同子网互通(集中式网关)

  

  3)不同子网互通(分布式网关)

  出现背景

  细心的读者可能已经发现,在不同子网互通(集中式网关)中,同一Leaf(Leaf1)下挂的不同网段VM(VM1和VM2)之间的通信,都需要在Spine上进行绕行,这样就导致Leaf与Spine之间的链路上,存在冗余的报文,额外占用了大量的带宽。同时,Spine作为VXLAN三层网关时,所有通过三层转发的终端租户的表项都需要在该设备上生成。但是,Spine的表项规格有限,当终端租户的数量越来越多时,容易成为网络瓶颈。分布式网关的出现,很好的解决了这两个问题。

  部署方案

  • 同Leaf节点下不同部门VM之间的通信

如下图所示,Leaf1作为VXLAN网络的VTEP,在Leaf1上部署VXLAN三层网关,即可实现同Leaf下不同部门VM之间的相互通信。此时,VM1和VM2互访时,流量只需要在Leaf1节点进行转发,不再需要经过Spine节点,从而节约了大量的带宽资源。

  • 跨Leaf节点不同部门VM之间的通信

  如下图所示,Leaf1和Leaf2作为VXLAN网络的VTEP,在Leaf1和Leaf2上部署VXLAN三层网关。两个VXLAN三层网关之间通过BGP动态建立VXLAN隧道,并通过BGP的remote-nexthop属性发布本网关下挂的主机路由信息给其他BGP邻居,从而实现跨Leaf节点不同部门VM之间的相互通信。

  

  Leaf作为VXLAN三层网关时,只学习其下挂终端租户的表项,而不必像集中式三层网关一样,需要学习网络中所有终端租户的表项,从而解决了集中式三层网关带来表项瓶颈问题。

  2.VXLAN网络的可靠性

  随着网络的快速普及和应用的日益深入,基础网络的可靠性日益成为用户关注的焦点,如何能够保证网络传输不中断对于终端用户而言非常重要。

  在VXLAN网络的子网互通中,VM与Leaf之间,Leaf与Spine之间都是通过单归方式接入的。这种组网接入方式,显然已经不能满足用户对VXLAN网络可靠性的需求。

  这时,可以按照如下图所示方式,提升VXLAN网络的可靠性。

  

  1)接入层的可靠性

通常采用堆叠(CSS)方式提升接入层的可靠性。这是因为,接入层的设备数量繁多,堆叠方式可以将多台交换机设备组合在一起,虚拟化成一台交换设备,所有配置均在这一台虚拟交换机上进行,从而简化了接入层设备的运维复杂度。此外,堆叠系统内成员交换机之间在进行冗余备份的同时,能够利用跨设备的Eth-Trunk实现设备间链路的负载分担。

  

  如上图所示,Leaf1和Leaf2组建为堆叠系统CSS-1,Leaf3和Leaf4组建为堆叠系统CSS-2,VM1~VM4均通过双归的方式接入到各自的CSS系统中。CSS-1和CSS-2作为VXLAN网络的VTEP,两个CSS之间搭建VXLAN隧道,并在每个CSS上部署VXLAN二层网关,从而实现同一部门VM之间的相互通信。当CSS系统正常时,VM1与VM3之间互访的流量,通过CSS-1堆叠系统中的Leaf1和Leaf2进行负载分担转发。当CSS系统故障时(Leaf1故障),VM1与VM3之间互访的流量,全部切换到CSS-1堆叠系统中的Leaf2进行转发,从而实现了流量的不间断,提升了接入层的可靠性。

  2)核心层的可靠性

  通常采用多活网关方式提升核心层的可靠性。这是因为,核心层设备物理位置较为分散,传统的设备级备份无法满足要求,必须通过协议级备份来实现。

  在多活网关组网中,通过给多台Spine设备部署相同的网关信息,将它们对外模拟成VXLAN网络中的一个虚拟VTEP,然后在所有Spine设备上配置三层网关,使得无论流量发到哪一个Spine,该设备都可以提供服务,将报文正确转发给下一跳设备。此外,多活网关中的多台Spine之间形成负载分担关系,共同进行流量转发。

  

  如上图所示,Spine1、Spine2分别与接入层的堆叠系统CSS-1和CSS-2之间建立VXLAN隧道,在Spine1、Spine2上配置VXLAN三层网关功能,Spine1、Spine2上部署相同的网关MAC地址、网关IP地址以及源VTEP地址,以便对外模拟成一个虚拟的VTEP,从而实现了不同网段VM之间、VM与外网之间的互通。

  当多活网关系统正常时,VM1与VM4之间互访的流量、VM1与Internet之间互访的流量,通过Spine1和Spine2进行负载分担转发。

  当多活网关系统故障时(Spine1故障),VM1与VM4之间互访的流量、VM1与Internet之间互访的流量,全部切换到Spine2进行转发,从而实现了流量的不间断,提升了核心层的可靠性。

  3.VXLAN网络的部署方案

  CE系列交换机支持通过单机方式和控制器方式来部署VXLAN网络。这两种方式中VXLAN网络的子网互通以及VXLAN网络的可靠性的实现均与前面一致,不同点在于VXLAN的配置下发方式不同:单机方式是通过CLI手动在设备上进行配置,控制器方式是通过控制器向设备下发配置或流表,设备仅作为转发器。

  下面以图4-6所示组网为例,简单介绍一下当前CE系列交换机支持的VXLAN控制器部署方式:SNC控制器方式和AC控制器方式。

  

  SNC控制器方式

  SNC控制器方式是指通过SNC控制器动态建立VXLAN隧道。

  此方式下,CE系列交换机作为转发器,无需进行VXLAN配置。VXLAN隧道的创建以及指导报文转发的表项,均由SNC控制器通过OpenFlow协议向转发器下发。

  AC控制器方式

  AC控制器方式是指通过AC控制器动态建立VXLAN隧道。

  此方式下,CE系列交换机作为转发器,需要预先完成部分基础配置(具体配置内容请参考产品配置指南),AC控制器通过NETCONF协议向转发器下发建立VXLAN隧道的配置,通过OpenFlow协议控制报文在隧道中的转发。

  VXLAN通过MAC-in-UDP的报文封装,实现了二层报文在三层网络上的透传,在云端上架起了一道道无形的“彩虹”,解决了云计算中虚拟化带来的一系列问题。

  

VXLAN理论解析的更多相关文章

  1. dig与dns基本理论——解析和缓存

    DNS(Domain Name System,域名系统)也许是我们在网络中最常用到的服务,它把容易记住的域名,如 www.google.com 翻译成人类不易记住的IP地址,如 173.194.127 ...

  2. CAP理论-解析

          分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:● 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值.(等同于所有节点访问同一份最新的数据副本) ...

  3. 损失函数Center Loss 代码解析

    center loss来自ECCV2016的一篇论文:A Discriminative Feature Learning Approach for Deep Face Recognition. 论文链 ...

  4. vxlan 协议

    vxlan 协议原理简介 1. vxlan 简介 VXLAN 全称是 Virtual eXtensible Local Area Network,虚拟可扩展的局域网.它是一种 overlay 技术,通 ...

  5. 理论优美的深度信念网络--Hinton北大最新演讲

    什么是深度信念网络 深度信念网络是第一批成功应用深度架构训练的非卷积模型之一. 在引入深度信念网络之前,研究社区通常认为深度模型太难优化,还不如使用易于优化的浅层ML模型.2006年,Hinton等研 ...

  6. 2020年深度学习DeepLearning技术实战班

    深度学习DeepLearning核心技术实战2020年01月03日-06日 北京一.深度学习基础和基本思想二.深度学习基本框架结构 1,Tensorflow2,Caffe3,PyTorch4,MXNe ...

  7. 【转】Error,java对常量池来说字符串xxx的UTF8表示过长的解决及其理解

    做项目,客户端这里自己模拟json数据时,一时没忍住搞得json字符串太长了(idea上大概有600多行吧),这个问题就蹦出来了.老方法直接google.百度然后看到一堆有关String 字符串常量池 ...

  8. ANSYS 非线性材料模型简介1 ---常用弹塑性模型

    目录 1. 材料非线性 2. 三个准则 2.1 屈服准则 2.2 流动准则 2.3 强化准则 3. 常用弹塑性模型 3.1 双线性等向强化 3.2 多线性等向强化 3.3 非线性等向强化 3.4 双线 ...

  9. 聊聊我对 GraphQL 的一些认知

    每隔一段时间就能看到一篇 GraphQL 的文章,但是打开文章一看,基本上就是简单的介绍下 GraphQL 的特性.很多文章其实就是 github 上找个 GraphQL 的项目,然后按照对应的 de ...

随机推荐

  1. Elastisearch在kibana下常用命令总结

    1.获取所有数据 GET /_search 2.创建一个Document PUT /ecommerce/product/1 { "name" : "gaolujie ya ...

  2. 关于es6 let var const 以及Symbol的总结

    ```javascript //es6新增块级作用域.声明变量用关键字let const , // es5中只有函数作用域和全局作用域,声明变量用关键字var  // let 和const 声明的变量 ...

  3. 【Flutter】可滚动组件之GridView

    前言 GridView可以构建一个二维网格列表.需要关注的是gridDelegate参数,类型是SliverGridDelegate,它的作用是控制GridView子组件如何排列(layout).Sl ...

  4. spring ioc踏出第一步

    spring IOC(容器) AOP(面向切面编程) IOC容器:他的功能就是可以整合像 Structs2 .Hibernate.Mybatis: IOC:控制反转:所谓的控制就是控制资源的获取方法, ...

  5. 使用Jenkins+Pipline 持构建自动化部署之安卓源码打包、测试、邮件通知

    一.引言 Jenkins 2.x的精髓是Pipeline as Code,那为什么要用Pipeline呢?jenkins1.0也能实现自动化构建,但Pipeline能够将以前project中的配置信息 ...

  6. 音视频入门-20-BMP、PNG、JPG、GIF静态图生成GIF动态图

    * 音视频入门文章目录 * 静态图 -> 动态图 前面 [18-手动生成一张GIF图片] 和 [19-使用giflib处理GIF图片] 生成的 GIF 每一帧都是一个颜色,平时用到的 GIF 每 ...

  7. Linux应急响应--入侵排查

    1.入侵者可能会删除机器的日志信息,可以查看日志信息是否还存在或者是否被清空,相关命令示例: ll -h /var/log/*  系统日志一般都存在/var/log下常用的系统日志如下:核心启动日志: ...

  8. 【高级排序算法】1、归并排序法 - Merge Sort

    归并排序法 - Merge Sort 文章目录 归并排序法 - Merge Sort nlogn 比 n^2 快多少? 归并排序设计思想 时间.空间复杂度 归并排序图解 归并排序描述 归并排序小结 参 ...

  9. [翻译]Azure 网关迁移至 .NET Core 3.1 性能提升一倍

    原文:[Azure Active Directory's gateway is on .NET Core 3.1!] Azure Active Directory 的网关服务是一个反向代理,它为构成 ...

  10. 【Linux】nginx详细说明

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...