EVPN学习笔记

一、介绍

  通过VXLAN的封装我们知道,若想指导VXLAN的转发,VTEP节点需要解决三元组问题,这个三元组是:

      内部 MAC 、 VNI 、 VTEP IP

  原有的VXLAN实现方案没有控制平面,是通过数据平面的流量泛洪进行VTEP发现和主机信息(包括IP地址、MAC地址、VNI、网关VTEP IP地址)学习的,这种方式导致数据中心网络存在很多泛洪流量。为了解决这一问题,VXLAN引入了EVPN作为控制平面,通过在VTEP之间交换BGP EVPN路由实现VTEP的自动发现、主机信息相互通告等特性,从而避免了不必要的数据流量泛洪。

  EVPN通过扩展BGP协议新定义了几种BGP EVPN路由,这些BGP EVPN路由可以用于传递VTEP地址和主机信息,因此EVPN应用于VXLAN网络中,可以使VTEP发现和主机信息学习从数据平面转移到控制平面。

二、BGP EVPN路由

  为了解决上述问题,BGP EVPN在BGP协议的基础上定义了一种新的NLRI(Network Layer Reachability Information,网络层可达信息)即EVPN NLRI,EVPN NLRI定义了几种新的BGP EVPN路由类型,用于处在二层网络的不同站点之间的MAC地址学习和发布。

  1.  Ethernet Auto-discovery Route(RT-1):用来在站点多归属组网中通告ES信息,以便实现水平分割、Aliasing和主备备份等特性。
  2.  MAC/IP Advertisement Route(RT-2):用来通告MAC/IP地址信息。

      该类型的路由报文格式如下:

        

      各字段解释如下:

      

    该类型路由在VXLAN控制平面中的作用包括:

    对于IPV4:

      1. 主机MAC地址通告

      2. 主机ARP通告

      3. 主机IP路由通告

    对于IPv6:

      1. ND表项扩散

      2. 主机IPv6路由通告

  3. Inclusive Multicast Ethernet Tag Route(RT-3):用来通告VTEP及其所属VXLAN,以实现VTEP自动发现、自动建立VXLAN隧道、自动创建VXLAN广播表等。

  4. Ethernet Segment Route(RT-4):用来通告ES及其连接的VTEP信息,以便发现连接同一ES的VTEP冗余组其他成员,以及在冗余组之间选举指定转发器DF等。

  5. IP Prefix Advertisement Route(RT-5):IP前缀路由,用来以IP前缀的形式通告引入的外部路由。

三、解决VXLAN的问题

  VTEP节点需要解决三元组问题,这个三元组是:

      内部 MAC 、 VNI 、 VTEP IP

  1. VTEP IP和VNI

  VXLAN是一种”MAC in UDP”技术, 是在IP网络基础之上构建的一种Overlay架构。在IP网络上传输时,RFC定义了几种组播技术,例如Ingress Replication、RSVP-TE P2MP LSP、mLDP P2MP、PIM-SSM、PIM-SM、BIDIR-PIM等。 目前EVPN使用的是Ingress Replication,即头端复制。所谓头端复制,就是在VXLAN转发实体里面存在一个需要复制到的远端PE设备隧道列表,此列表叫做BUM广播表。BUM广播表的建立是依靠EVPN的第3类路由,即集成多播路由建立的。此路由也用于VTEP站点的自动发现。

  看一下第三类路由的格式:

  

  从上面路由参数可以看到,第三类路由主要包含RD、VTEP地址、二层VNI。

  二层VXLAN广播域建立过程:

  每个站点都通过三类路由通告自己的VTEP地址和VNI信息,如果对端VTEP IP地址是三层路由可达的,则建立一条到对端的VXLAN隧道。同时,如果对端VNI与本端相同,则创建一个头端复制表,用于后续BUM报文转发。

  2. MAC地址学习

  EVPN在控制面学习MAC和ARP。在EVPN里面,站点的MAC和ARP信息是通过EVPN的MAC/IP路由通告的,即Route Type 2。因此,在EVPN网络里面,不需要将ARP请求泛洪到网络中。

  二类路由主要传递的信息包括RD、主机MAC、主机IP、二层VNI和三层VNI。

  本地的MAC和ARP是通过传统的方式学习到的,EVPN控制面将本地的IP、MAC和VNI信息通过BGP邻居分发到其他VTEP设备。为了抑制ARP广播,VTEP节点在通告MAC的同时会选择携带IP,这样,可以让对端VTEP学习到本端VTEP下挂的主机ARP,从而使得远端VTEP可以直接代答回应远端主机发起的ARP请求。

  ARP广播抑制。当三层网关学习到其子网下的主机ARP时,生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由将主机信息同步到二层网关上。这样当二层网关再收到ARP请求时,先查找是否存在目的IP地址对应的主机信息,如果存在,则直接将ARP请求报文中的广播MAC地址替换为目的单播MAC地址,实现广播变单播,达到ARP广播抑制的目的。

  在集中式网关里面,二层VTEP需要将学习到的ARP通告给网关,在GW上需要下发ARP,并产生32位直连路由。此路由的下一跳就是路由本身。ARP里的MAC为主机或虚机的真实MAC。从GW往VTEP的报文转发时,在VTEP上做二层MAC转发。

  而在分布式网关里,每一个分布式网关都会将学习到的ARP通告给其他网关。在远端VTEP上,2类路由里面的IP会下发到VRF表形成32位主机路由,此路由的下一跳为通告此路由的VTEP设备。报文转发时,从网关发出的报文内层MAC为对端VTEP设备的MAC,因此报文在对端VTEP上做三层转发。

  这样VXLAN内部通信需要的三元组信息就都解决了,接下来需要解决外部路由问题,我们通过VXLAN建立了一个私有的VXLAN网络,那么怎么跟外部网络通信呢。

  3. 外部网络通信

  EVPN网络构建的是一个私有网络,它也可以通过接入外网,实现跟外网通信的目的。通常在EVPN的Spine-Leaf架构中,会有1台或多台专门接入外网的设备,我们把它叫做Board Leaf。Board Leaf通过普通接口跟外网建立普通路由协议,学习路由,然后在Board Leaf上EVPN可以引入这些外部路由,形成EVPN 5类路由,进而通告到EVPN网络中,使其他VTEP也能学到这些外部路由。这些路由的下一跳均指向通告此路由的Board Leaf。当网络中存在多台Board Leaf时,多台Board Leaf都可以通告此路由,这样在远端还可以形成等价路由,以达到网络负载分担的目的。

  以下是5类路由的字段格式:

  

  可以看到5类路由主要包含RD、IP前缀和三层VNI。

  4. 其他

  ARP广播抑制:

  当三层网关学习到其子网下的主机ARP时,生成主机信息(包含主机IP地址、主机MAC地址、二层VNI、网关VTEP IP地址),然后通过传递ARP类型路由将主机信息同步到二层网关上。这样当二层网关再收到ARP请求时,先查找是否存在目的IP地址对应的主机信息,如果存在,则直接将ARP请求报文中的广播MAC地址替换为目的单播MAC地址,实现广播变单播,达到ARP广播抑制的目的。

  不管是集中式网关还是分布式网关,都是三层网关学习学习到其子网现的arp信息,然后通过EVPN传递给其他二层网关,当二层网关收到arp请求的时候,将目的mac的全F替换为真实主机的mac地址,然后转发到对应的vtep节点,vtep再接封装到目的主机,目的主机收到该arp请求之后,进行应答。

  若二层网关上不存在该目的IP对应的MAC地址,则执行头端复制,将按照BUM头端复制表,对该arp报文进行vxlan封装,然后转发到对应的vtep节点,vtep节点收到之后进行解封装,发现目的mac是全F,则在其子网内的非vxlan接口泛洪。

  BUM可以使用头端复制、集中复制和组播复制来进行转发。

  头端复制:在发送方vtep上将BUM报文进行复制封装到vxlan,然后转发到对应子网的其他vtep节点。

  集中复制:网络中有一个集中复制点,发送方vtep先将BUM报文发送给集中复制点,由集中复制点来进行复制,集中复制点在复制的时候不改变外层源IP,该报文的外层源IP仍是发送方的vtep地址。接收方vtep收到之后,可以学习或更新他的mac表(mac和vtep的对应)。

  组播复制:同一个VNI的所有VTEP都加入同一个组播组,利用组播路由协议(如PIM)为该组播组建立组播转发表项,当源端VTEP收到BUM报文后,为该BUM报文封装组播目的IP地址(例如225.0.0.1),封装后的报文根据已建立的组播转发表项转发到远端VTEP,从而减少流量洪泛。最后远端VTEP再对VXLAN报文解封装。

  虚拟机迁移:

  MAC地址迁移是指虚拟机或主机从其介入的VTEP或网关设备迁到数据中心网络的另一台VTEP或网关下。新迁移到的VTEP或网关会重新感知到主机/虚拟机上线,会重新通告该MAC/IP路由,此路由跟迁移前通告的MAC/IP路由的区别在于在BGP update消息中携带了一种新的扩展团体:MAC Mobility扩展团体。此扩展团体里面包含一个系列号。每次迁移,迁移序列号将递增,远端在收到一个比自己系列号更大的消息时,更新自己的MAC/IP路由消息,下一跳指向迁移后通告此路由的VTEP或GW。原VTEP在收到此路由更新后,撤销之前通告的路由。

  二层VNI和三层VNI:

  二层VNI是用来标识报文属于哪一个BD,相当于vlan id。

  三层VNI用来标识报文属于哪一个VRF,相当于租户。

posted on 2020-05-08 09:56  torotoise512  阅读(3453)  评论(0编辑  收藏  举报