「VXLAN」- 建立 VXLAN Tunnel 流程:TYPE-3-ROUTE

  CREATED BY JENKINSBOT

建立隧道的路由

TYPE-3-ROUTE(Inclusive Multicast Route),在 VXLAN 控制平面中,该类型路由主要用于 VTEP 的自动发现和 VXLAN Tunnel 的动态建立;

两端设备(作为 BGP EVPN 对等体的 VTEP),通过 TYPE-3-ROUTE 互相传递 LAYER-2-VNI 和 VTEP-IP-ADDR 信息;

报文示例(Wireshark)

...
Transmission Control Protocol, Src Port: 55383, Dst Port: 179, Seq: 139, Ack: 39, Len: 100
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 100
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 77
    Path attributes
        Path Attribute - ORIGIN: INCOMPLETE
        Path Attribute - AS_PATH: empty
        Path Attribute - LOCAL_PREF: 100
        Path Attribute - EXTENDED_COMMUNITIES
            Flags: 0xc0, Optional, Transitive, Complete
                1... .... = Optional: Set
                .1.. .... = Transitive: Set
                ..0. .... = Partial: Not set
                ...0 .... = Extended-Length: Not set
                .... 0000 = Unused: 0x0
            Type Code: EXTENDED_COMMUNITIES (16)
            Length: 16
            Carried extended communities: (2 communities)
                Route Target: 200:1 [Transitive 2-Octet AS-Specific]
                    Type: Transitive 2-Octet AS-Specific (0x00)
                        0... .... = IANA Authority: Allocated on Standard Action, Early Allocation or Experimental Basis
                        .0.. .... = Transitive across AS: Transitive
                    Subtype (AS2): Route Target (0x02)
                    2-Octet AS: 200
                    4-Octet AN: 1
                Encapsulation: VXLAN Encapsulation [Transitive Opaque]
                    Type: Transitive Opaque (0x03)
                        0... .... = IANA Authority: Allocated on Standard Action, Early Allocation or Experimental Basis
                        .0.. .... = Transitive across AS: Transitive
                    Subtype (Opaque): Encapsulation (0x0c)
                    Tunnel type: VXLAN Encapsulation (8)
        Path Attribute - PMSI_TUNNEL_ATTRIBUTE
            Flags: 0xc0, Optional, Transitive, Complete
                1... .... = Optional: Set
                .1.. .... = Transitive: Set
                ..0. .... = Partial: Not set
                ...0 .... = Extended-Length: Not set
                .... 0000 = Unused: 0x0
            Type Code: PMSI_TUNNEL_ATTRIBUTE (22)
            Length: 9
            Flags: 0
            Tunnel Type: Ingress Replication (6)
            VNI: 756
            Tunnel ID: tunnel end point -> 10.0.0.2
                Tunnel type ingress replication IP end point: 10.0.0.2
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
                1... .... = Optional: Set
                .0.. .... = Transitive: Not set
                ..0. .... = Partial: Not set
                ...1 .... = Extended-Length: Set
                .... 0000 = Unused: 0x0
            Type Code: MP_REACH_NLRI (14)
            Length: 28
            Address family identifier (AFI): Layer-2 VPN (25)
            Subsequent address family identifier (SAFI): EVPN (70)
            Next hop: 10.0.0.2
                IPv4 Address: 10.0.0.2
            Number of Subnetwork points of attachment (SNPA): 0
            Network Layer Reachability Information (NLRI)
                EVPN NLRI: Inclusive Multicast Route
                    Route Type: Inclusive Multicast Route (3)
                    Length: 17
                    Route Distinguisher: 000000c800000001 (200:1)
                    Ethernet Tag ID: 0
                    IP Address Length: 32
                    IPv4 address: 10.0.0.2

PMSI (PMSI_TUNNEL_ATTRIBUTE)

PMSI(Provider Multicast Service Interface),是个可选过渡的 BGP 属性,用来携带发送端的 VTEP-IP-ADDR、LAYER-2-VNI,以完成 VXLAN Tunnel 的动态协商;

Flags(1 Byte):在 VXLAN 场景中,该字段没有实际意义;
Tunnel Type(1 Byte):在 VXLAN 中,Tunnel Type 固定为 6,表示其支持的类型为“6:Ingress Replication”;
MPLS Label,VNI(3 Byte):该字段为此路由携带的 LAYER-2-VNI;
Tunnel Identifier,Tunnel ID(变长):在 VXLAN 中,该字段同样也是本端 VTEP IP ADDR;

NLRI (MP_REACH_NLRI)

Route Distinguisher(8 Byte):该字段为 EVPN Instance 下设置的 RD 值;
Ethernet Tag ID(4 Byte):该字段为当前设备上的 VLAN ID。在此路由中为全 0;
IP Address Length(1 Byte):该字段为此路由携带的本端 VTEP IP 地址的掩码长度;
Originating Router‘s IP Address(4 或 16 Byte):该字段为此路由携带的本端 VTEP-IP-ADDR;

建立隧道的过程

VTEP 通过 TYPE-3-ROUTE 互相传递 LAYER-2-VNI 和 VTEP-IP-ADDR 信息;
如果对端 VTEP-IP-ADDR 是三层路由可达的,则建立一条到对端的 VXLAN 隧道;
同时,如果对端 VNI 与本端相同,则创建一个头端复制列表,用于后续 BUM 报文转发;