建立隧道的路由
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 报文转发;