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