六、业务连通性测试与动态观测 (Traffic Test & Observation)
E01:架构回顾与核心机制重构
在上一篇《ENSP Pro Lab笔记:配置BGP EVPN VXLAN双栈(1)》中,我们完成了基于 Spine-Leaf 架构的 IPv4/IPv6 双栈网络配置。在进入具体的 Packet Walk(数据包转发路径)分析之前,我们需要重新审视一下这个实验环境的"骨架"和"神经系统"。
1. 实验架构与核心概念 (Architecture & Concepts)

本实验采用了目前数据中心最主流的 分布式任播网关 (Distributed Anycast Gateway) 部署模式,结合 Symmetric IRB (对称集成路由桥) 转发机制。
1.1 关键角色与标识
- 拓扑结构 :Spine-Leaf 两层架构。
- Spine (1.1.1.1) :作为 BGP RR (路由反射器),只负责反射 EVPN 路由,不处理 VXLAN 封装/解封装。
- Leaf (2.2.2.2 / 3.3.3.3) :作为 VTEP (隧道端点) 和 分布式网关。
- Border Leaf (4.4.4.4):作为南北向流量的边界,负责与外部路由器 (R1) 交互。
- 双 Loopback 设计 (最佳实践) :
- Control Plane (Loopback0):用于建立 BGP 邻居 (e.g., 2.2.2.2)。
- Data Plane (Loopback10):用于作为 VXLAN 隧道的源地址 (e.g., 20.20.20.20)。此设计保证了管理面与数据面的解耦,调整隧道 IP 不影响 BGP 会话。
1.2 VNI 的双重身份
理解 VNI 的分类是理解转发路径的钥匙:
- L2VNI (Layer 2 VNI) :
- 实验值:8000 (对应 VLAN 10), 9000 (对应 VLAN 20)。
- 作用 :同子网二层互通。流量在 VXLAN 隧道中传输时,如果携带的是 L2VNI,接收端 Leaf 会将其映射回对应的 Bridge-Domain,进行二层转发。
- L3VNI (Layer 3 VNI) :
- 实验值 :100 (对应 VPN 实例
vpn1)。 - 作用 :跨子网三层路由 。在 Symmetric IRB 模式下,当流量需要跨网段转发时,源 Leaf 会先进行路由查找,封装 L3VNI 发送给目的 Leaf。目的 Leaf 看到 L3VNI,就知道这是一个三层包,需要放入对应的 VRF 路由表中查找目的地。
- 特点:IPv4 和 IPv6 路由共享同一个 L3VNI。
- 实验值 :100 (对应 VPN 实例
2. BGP EVPN 路由类型工作机制 (Route Types Logic)
控制平面的 BGP EVPN 路由是数据平面转发的指挥棒。在我们的实验中,Type 2、Type 3 和 Type 5 路由共同构建了完整的转发表项。
2.1 Type 3 Route:构建 BUM 泛洪树 (Inclusive Multicast)
- 场景:当主机发送广播 (如 IPv4 ARP Request) 或组播 (如 IPv6 NS) 时,Leaf 节点需要知道把这些报文泛洪给谁。
- 机制 :
- 触发 :在 NVE 接口配置
vni 8000 head-end peer-list protocol bgp。 - 内容:包含 L2VNI (8000) 和 VTEP 源地址 (20.20.20.20)。
- 结果 :Leaf 之间互相学习,建立了 头端复制列表 (Head-end Replication List)。
- Packet Walk 预告:Serv1 发送 ARP 请求找 Serv3,Leaf1 查的就是这张表,将 ARP 复制并通过单播 VXLAN 隧道发给 Leaf2。
- 触发 :在 NVE 接口配置
bash
#Type 3 Route:
Frame 59: Packet, 523 bytes on wire (4184 bits), 523 bytes captured (4184 bits)
Ethernet II, Src: fa:e8:d2:bf:00:22, Dst: fa:e8:d2:bf:00:12
Internet Protocol Version 4, Src: 2.2.2.2, Dst: 1.1.1.1
Transmission Control Protocol, Src Port: 56268, Dst Port: 179, Seq: 1525, Ack: 65, Len: 469
[2 Reassembled TCP Segments (108 bytes): #58(107), #59(1)]
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 108
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 85
Path attributes
Path Attribute - ORIGIN: IGP
Path Attribute - AS_PATH: empty
Path Attribute - LOCAL_PREF: 100
Path Attribute - EXTENDED_COMMUNITIES
Flags: 0xc0, Optional, Transitive, Complete
Type Code: EXTENDED_COMMUNITIES (16)
Length: 24
Carried extended communities: (3 communities)
Route Target: 100:20 [Transitive 2-Octet AS-Specific]
Route Target: 200:10 [Transitive 2-Octet AS-Specific]
Encapsulation: VXLAN Encapsulation [Transitive Opaque]
Path Attribute - PMSI_TUNNEL_ATTRIBUTE
Flags: 0xc0, Optional, Transitive, Complete
Type Code: PMSI_TUNNEL_ATTRIBUTE (22)
Length: 9
Flags: 0
Tunnel Type: Ingress Replication (6)
VNI: 9000
Tunnel ID: tunnel end point -> 20.20.20.20
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
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: 20.20.20.20
IPv4 Address: 20.20.20.20
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: 0000001400000002 (20:2)
Ethernet Tag ID: 0
IP Address Length: 32
IPv4 address: 20.20.20.20
2.2 Type 2 Route:EVPN 的基石 (MAC/IP Advertisement)
Type 2 路由最为灵活,它有两种形态,对应两种不同的转发行为:
形态 A:纯 MAC 路由 (MAC only)
- 触发:Leaf 端口收到数据帧,学习到源 MAC。
- 内容 :
[MAC: 40-3F-xx, L2VNI: 8000, NextHop: 20.20.20.20] - 作用 :二层互通。告诉远端 Leaf:"去往这个 MAC 的二层报文,请发给我,使用 L2VNI"。
形态 B:IRB 主机路由 (MAC + IP)
- 触发 :开启
arp collect host enable(IPv4) 或ipv6 nd collect host enable(IPv6)。 - 内容 :
[MAC: 40-3F-xx, IP: 172.16.1.10, L2VNI: 8000, L3VNI: 100] - 作用 :三层互通 (分布式网关) 。
- 这是 Symmetric IRB 的核心。它告诉远端 Leaf:"去往 172.16.1.10/32 的三层报文,请发给我,使用 L3VNI 100"。
- 注意:在 eNSP Pro 中,如果不配置 Host Collect,这类路由不会生成,跨网段通信会失败。
2.3 Type 5 Route:网段路由 (IP Prefix Route)
- 场景:路由引入或网段通告。
- 触发 :在 VPN 实例下配置
advertise l2vpn evpn。 - 内容 :
[Prefix: 182.1.1.0/24, L3VNI: 100, NextHop: 40.40.40.40] - 作用 :南北向流量 / 默认路由 。
- 它不包含具体的 MAC 地址,只通告网段。
- Packet Walk 预告:当 Serv1 访问 Internet (182.1.1.2) 时,Leaf1 查路由表匹配到的就是 BL1 发来的 Type 5 路由。
理解了上述架构与路由机制后,我们就可以通过抓包(Packet Capture)和表项分析,以此来追踪一个数据包从 Serv1 出发,是如何穿过 VXLAN 网络到达 Serv2 (跨网段) 或 Internet 的。接下来,让我们进入 Packet Walk 实战环节。
好的,我们正式进入第二篇博客的核心部分------Packet Walk(数据流全景解析)。
在这一部分,我们将通过"显微镜"般的视角,追踪一个数据包是如何在 EVPN VXLAN 网络中传输的。我们将结合控制平面表项 (Display 命令)和数据平面抓包(Wireshark)来验证之前的理论。
E02:Packet Walk (IPv4 数据流全景解析)
在完成了架构部署与控制平面收敛后,我们终于迎来了最激动人心的环节------数据验证。我们将模拟真实的业务访问流量,观察数据包在 Underlay 和 Overlay 之间的封装与转换。
本节不再关注配置命令本身,而是从数据包真实转发视角,验证控制平面设计是否按预期工作。
以下各场景均假设为独立的首次通信,不继承前序场景的控制平面状态。
0. 场景预设与基础信息
为了方便对照分析,我们将测试环境中的关键参数梳理如下:
- 测试目标:验证 IPv4 同子网与跨子网通信。
- 拓扑位置 :
- Leaf1 : 连接 Serv1 (VLAN 10), Serv2 (VLAN 20)。VTEP IP:
20.20.20.20。 - Leaf2 : 连接 Serv3 (VLAN 30), Serv4 (VLAN 40)。VTEP IP:
30.30.30.30。 - BL1 : 连接 Internet (R1)。VTEP IP:
40.40.40.40。
- Leaf1 : 连接 Serv1 (VLAN 10), Serv2 (VLAN 20)。VTEP IP:
终端信息表:
| 角色 | IP 地址 | MAC 地址 | 接入位置 | 所属 VLAN/VNI |
|---|---|---|---|---|
| Serv1 | 172.16.1.10 |
40:3f:ab:de:4d:11 |
Leaf1 | VLAN 10 / BD100/ VNI 8000 |
| Serv2 | 10.10.10.10 |
76:4e:c0:14:7d:7a |
Leaf1 | VLAN 20 / BD200 / VNI 9000 |
| Serv3 | 172.16.1.20 |
fa:9e:65:74:00:10 |
Leaf2 | VLAN 30 / BD300 / VNI 8000 |
| Serv4 | 10.10.10.20 |
38:05:60:49:71:64 |
Leaf2 | VLAN 40 / BD400 / VNI 9000 |
场景一:同子网二层互通(Intra-Subnet Bridging over EVPN VXLAN)
流量路径:Serv1 → Serv3
通信特征
- 源目 IP 同属
172.16.1.0/24 - 分别接入 不同 Leaf
- Leaf1 的 BD100 与 Leaf2 的 BD300
→ 通过 EVPN + L2VNI 8000 组成同一个逻辑二层广播域 - VLAN / BD 仅为本地概念(Local Significance)
- Leaf 全程作为 二层桥(Bridge)
- VXLAN 使用 L2VNI = 8000
阶段 1:Serv1 的 ARP 请求触发 BUM 泛洪(Type 3 决定"泛洪范围")
1️⃣ Serv1 发起 ARP Request
-
报文内容:
- "Who has 172.16.1.20? Tell 172.16.1.10"
-
报文特征:
SMAC = Serv1DMAC = FF:FF:FF:FF:FF:FF
-
这是一个 标准二层广播帧
2️⃣ Leaf1 入站处理(Ingress Bridge)
- Leaf1 在接入口收到广播帧
- VLAN 10 → 映射到 本地 BD100
- Leaf1 判断该帧属于 L2VNI 8000
此时 Leaf1 执行两个并行但逻辑独立的动作:
🔹 动作 A:本地 MAC 学习(数据平面)
-
Leaf1 在 BD100 的 MAC 表中记录:
Serv1 MAC → 本地接口
这是最先发生、最基础的一步。
🔹 动作 B:触发 EVPN Type 2(MAC-only)路由生成(控制平面)
由于:
- 该 BD 绑定了 L2VNI 8000
- EVPN 已启用
👉 Leaf1 立即生成一条 EVPN Type 2(纯 MAC)路由:
"MAC Serv1 属于 L2VNI 8000,对应的 VTEP 是 20.20.20.20"
并通过 BGP EVPN(经 Spine RR)通告给 Leaf2。
📌 **关键点 **
Type 2 MAC 路由是在 Leaf1 本地学习到 Serv1 MAC 后就产生的而不是等 Leaf2 收到泛洪报文后才产生。
bash
# EVPN Type 2(纯 MAC)路由
Frame 14: Packet, 166 bytes on wire (1328 bits), 166 bytes captured (1328 bits)
Ethernet II, Src: fa:e8:d2:bf:00:22, Dst: fa:e8:d2:bf:00:12
Internet Protocol Version 4, Src: 2.2.2.2, Dst: 1.1.1.1
Transmission Control Protocol, Src Port: 50979, Dst Port: 179, Seq: 1, Ack: 1, Len: 112
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 112
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 89
Path attributes
Path Attribute - ORIGIN: IGP
Path Attribute - AS_PATH: empty
Path Attribute - LOCAL_PREF: 100
Path Attribute - EXTENDED_COMMUNITIES
Flags: 0xc0, Optional, Transitive, Complete
Type Code: EXTENDED_COMMUNITIES (16)
Length: 24
Carried extended communities: (3 communities)
Route Target: 100:10 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 100
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 10
Route Target: 200:10 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 200
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 10
Encapsulation: VXLAN Encapsulation [Transitive Opaque]
Type: Transitive Opaque (0x03)
Subtype (Opaque): Encapsulation (0x0c)
Tunnel type: VXLAN Encapsulation (8)
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 44
Address family identifier (AFI): Layer-2 VPN (25)
Subsequent address family identifier (SAFI): EVPN (70)
Next hop: 20.20.20.20
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
EVPN NLRI: MAC Advertisement Route
Route Type: MAC Advertisement Route (2)
Length: 33
Route Distinguisher: 0000001400000001 (20:1)
ESI: 00:00:00:00:00:00:00:00:00:00
ESI Type: ESI 9 bytes value (0)
ESI Value: 00 00 00 00 00 00 00 00 00
ESI 9 bytes value: 00 00 00 00 00 00 00 00 00
Ethernet Tag ID: 0
MAC Address Length: 48
MAC Address: 40:3f:ab:de:4d:11
IP Address Length: 0
IP Address: NOT INCLUDED
VNI: 8000
3️⃣ Leaf1 执行 BUM 泛洪(基于 Type 3)
回到数据平面处理流程:
- Leaf1 判断这是 广播帧
- 查找 L2VNI 8000 的 头端复制列表
**通过 EVPN Type 3(IMET)路由 得到的 头端复制列表
随后执行 VXLAN 封装:
- VNI = 8000(L2VNI)
- Outer Src IP =
20.20.20.20 - Outer Dst IP =
30.30.30.30 - Inner Payload = 原始 ARP 广播帧
并将报文单播发送至 Leaf2。
阶段 2:Leaf2 接收 ARP 请求(控制平面 & 数据平面"并发收敛")
1️⃣ Leaf2 解封装并泛洪
-
Leaf2 收到 VXLAN 报文
-
根据 VNI 8000
- 映射到本地 BD300
-
在 BD300 内向所有接入口泛洪
-
Serv3 收到 ARP Request
2️⃣ Leaf2 的两种"学习路径"
此时 Leaf2 会几乎同时获得关于 Serv1 MAC 的两类信息:
🔹 路径 A:控制平面(BGP EVPN)
-
Leaf2 通过 BGP 收到 Leaf1 发来的:
- EVPN Type 2(MAC-only)路由
-
信息内容:
MAC Serv1 → Next-hop VTEP 20.20.20.20
-
这是权威、结构化的控制平面信息
🔹 路径 B:数据平面(Flooding & Learning)
-
Leaf2 在解封装 ARP Request 时:
-
从 Inner Ethernet Header 中看到:
SMAC = Serv1
-
-
于是尝试在 BD300 中学习:
Serv1 MAC → VXLAN 隧道口(20.20.20.20)
❓关键问题解答:Leaf2 最终写入 MAC 表的是哪一个?
✅ 结论先行(工程级结论)
EVPN 控制平面(Type 2)优先级更高,且最终"覆盖 / 固化"数据平面学习结果
为什么?
从设计目标上讲:
| 机制 | 定位 |
|---|---|
| Flooding & Learning | 兼容传统二层的 兜底机制 |
| EVPN Type 2 | 确定性、可控、可收敛 的主机制 |
在支持 EVPN 的实现中(包括华为 / Cisco / Juniper):
-
如果同一 MAC:
- 同时存在 EVPN 学习 与 数据平面学习
-
那么:
- EVPN 学习的表项优先
- 数据平面学习不会覆盖 EVPN 表项
你可以把它理解为:
EVPN = "我明确知道它在哪"
Flooding = "我从流量里猜到它可能在哪"
从这个场景的时间线上看
- Leaf1 学习 Serv1 MAC → 立即通告 Type 2
- Leaf2 很快收到 Type 2 mac route(控制平面)
- ARP 泛洪到达 Leaf2(数据平面)
最终:
-
Leaf2 的 BD300 MAC 表
Serv1 MAC → VTEP 20.20.20.20- 来源标记为 EVPN / Remote
bash
[Leaf2]dis mac-address bridge-domain 300
Flags: * - Backup
# - forwarding logical interface, operations cannot be performed based
on the interface.
BD : bridge-domain Age : dynamic MAC learned time in seconds
-------------------------------------------------------------------------------
MAC Address VLAN/VSI/BD Learned-From Type Age
-------------------------------------------------------------------------------
0001-0001-0001 -/-/300 20.20.20.20 dynamic 1423
0081-70b3-65c6 -/-/300 GE1/0/1.1 dynamic 110
0081-c7a5-6e6e -/-/300 GE1/0/1.1 dynamic 0
0081-f221-74bf -/-/300 GE1/0/1.1 dynamic 135
403f-abde-4d11 -/-/300 20.20.20.20 evn 75
fa9e-6574-0010 -/-/300 GE1/0/1.1 dynamic 164
-------------------------------------------------------------------------------
Total items: 6
- Flooding 学习 不会成为最终权威来源
阶段 3:ARP Reply 触发 Serv3 MAC 学习与反向 EVPN 通告(对称闭环)
在前两个阶段中,网络已经完成了以下关键准备工作:
-
Leaf1 → Leaf2:
- Serv1 的 MAC 已通过 EVPN Type 2 被全网感知
-
Leaf2:
- Serv3 已成功收到 ARP Request
此时,真正完成"二层通信闭环"的关键事件发生在 ARP Reply 返回路径 上。
1️⃣ Serv3 返回 ARP Reply(单播帧)
-
Serv3 构造 ARP Reply:
- "172.16.1.20 is at fa:9e:65:74:00:10"
-
报文特征:
SMAC = fa:9e:65:74:00:10(Serv3)DMAC = 40:3f:ab:de:4d:11(Serv1)
-
这是一个 标准二层单播帧
2️⃣ Leaf2 入站处理:本地 MAC 学习(数据平面)
-
Leaf2 在接入口(VLAN 10 → BD300)收到该单播帧
-
在 BD300 的 MAC 地址表中:
- 学习到
Serv3 MAC → 本地接入接口
- 学习到
📌 这一步与 场景二中 Leaf1 学习 Serv2 MAC 的机制完全一致:
都是典型的 接入侧 MAC 学习。
3️⃣ Leaf2 触发 EVPN Type 2(MAC-only)路由生成(控制平面)
由于:
- BD300 绑定了 L2VNI 8000
- EVPN 已启用
👉 Leaf2 在完成本地 MAC 学习后,立即生成一条 EVPN Type 2(纯 MAC)路由:
"MAC fa:9e:65:74:00:10 属于 L2VNI 8000,对应的 VTEP 是 30.30.30.30"
并通过 BGP EVPN(经 Spine RR)通告给 Leaf1。
📌 关键对称性说明
- Leaf1 学到 Serv1 → 通告 Type 2 给 Leaf2
- Leaf2 学到 Serv3 → 通告 Type 2 给 Leaf1
这正是 EVPN 二层控制平面"对称、确定"的核心价值。
bash
# EVPN Type 2(纯 MAC)路由
Frame 17: Packet, 180 bytes on wire (1440 bits), 180 bytes captured (1440 bits)
Ethernet II, Src: fa:e8:d2:bf:00:12, Dst: fa:e8:d2:bf:00:22
Internet Protocol Version 4, Src: 1.1.1.1, Dst: 2.2.2.2
Transmission Control Protocol, Src Port: 179, Dst Port: 50979, Seq: 127, Ack: 113, Len: 126
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 126
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 103
Path attributes
Path Attribute - ORIGIN: IGP
Path Attribute - AS_PATH: empty
Path Attribute - LOCAL_PREF: 100
Path Attribute - ORIGINATOR_ID: 3.3.3.3
Path Attribute - CLUSTER_LIST: 1.1.1.1
Flags: 0x80, Optional, Non-transitive, Complete
Type Code: CLUSTER_LIST (10)
Length: 4
Cluster List: 1.1.1.1
Path Attribute - EXTENDED_COMMUNITIES
Flags: 0xc0, Optional, Transitive, Complete
Type Code: EXTENDED_COMMUNITIES (16)
Length: 24
Carried extended communities: (3 communities)
Route Target: 100:10 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 100
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 10
Route Target: 200:10 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 200
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 10
Encapsulation: VXLAN Encapsulation [Transitive Opaque]
Type: Transitive Opaque (0x03)
Subtype (Opaque): Encapsulation (0x0c)
Tunnel type: VXLAN Encapsulation (8)
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 44
Address family identifier (AFI): Layer-2 VPN (25)
Subsequent address family identifier (SAFI): EVPN (70)
Next hop: 30.30.30.30
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
EVPN NLRI: MAC Advertisement Route
Route Type: MAC Advertisement Route (2)
Length: 33
Route Distinguisher: 0000001e00000001 (30:1)
ESI: 00:00:00:00:00:00:00:00:00:00
ESI Type: ESI 9 bytes value (0)
ESI Value: 00 00 00 00 00 00 00 00 00
ESI 9 bytes value: 00 00 00 00 00 00 00 00 00
Ethernet Tag ID: 0
MAC Address Length: 48
MAC Address: fa:9e:65:74:00:10
IP Address Length: 0
IP Address: NOT INCLUDED
VNI: 8000
4️⃣ Leaf2 根据已知 EVPN 表项进行单播 VXLAN 转发
此时 Leaf2 需要把 ARP Reply 送回 Serv1:
-
Leaf2 查 BD300 的 MAC 表 / EVPN 表
-
发现:
Serv1 MAC → 远端 VTEP 20.20.20.20
于是:
-
Leaf2 执行 VXLAN 封装:
- VNI = 8000(L2VNI)
- Outer Src IP =
30.30.30.30 - Outer Dst IP =
20.20.20.20
-
Inner Payload = 原始 ARP Reply 单播帧
5️⃣ Leaf1 解封装并完成反向学习闭环
- Leaf1 解封装 VXLAN
- 根据 VNI 8000 映射到 BD100
- 将 ARP Reply 转发至 Serv1
与此同时:
-
Leaf1 在 BD100 中:
- 确认 / 刷新 Serv3 MAC → 远端 VTEP 30.30.30.30
Leaf1 的 EVPN 控制平面与数据平面至此完全一致。
✅ 阶段 3 完成后的全网状态
在 ARP 交互完成后,网络中已经形成了一个完全对称、确定的二层转发表结构:
Leaf1(BD100)
| MAC | 指向 |
|---|---|
| Serv1 | 本地接口 |
| Serv3 | VTEP 30.30.30.30(EVPN Type 2) |
Leaf2(BD300)
| MAC | 指向 |
|---|---|
| Serv3 | 本地接口 |
| Serv1 | VTEP 20.20.20.20(EVPN Type 2) |
📌 阶段 3 小结
-
主机 MAC 的 EVPN Type 2 路由
- 永远由"首次本地学习该 MAC 的 Leaf"产生
-
EVPN Type 2 的传播:
- 让远端 Leaf 在数据包到来前就知道该发给谁
-
这与 场景二中本地三层接口学习 Serv2 MAC 在机制上完全一致:
- 本地学习 → 控制平面通告 → 远端确定性转发
场景一总结
-
L2VNI 定义逻辑广播域
- VLAN / BD 仅具备本地意义
-
Type 3:
- 决定 BUM 泛洪范围
-
Type 2(MAC-only):
- 是二层单播转发的权威来源
-
Flooding & Learning:
- 作为兼容与兜底存在
- 不会覆盖 EVPN 控制平面结论
场景二:同 Leaf 跨子网三层互通(Intra-Leaf Inter-Subnet Routing)
流量路径:Serv1 → Serv2
通信特征
- 源目 IP 位于 不同网段
- 均接入在 同一台 Leaf(Leaf1)
- 通信起点仍然是 二层 → 三层的过渡过程
- 会触发 ARP 网关解析
- 会触发 EVPN Type 2(MAC + IP)路由生成
- 不会触发 VXLAN 封装
👉 三层通信开始之前,一定先完成"主机 → 网关"的二层解析 ,而这个过程本身就会触发 EVPN Type 2(MAC+IP)路由的生成 。
即使是"同 Leaf 的三层转发",
只要主机需要解析网关 MAC,
Leaf 就会在收到 ARP Request / Reply 的那一刻,
学习到主机的 MAC/IP,并触发 EVPN Type 2(MAC+IP)路由通告。也就是说:
- 是否使用 VXLAN ≠ 是否产生 EVPN 路由
- 是否跨 Leaf ≠ 是否发布 Type 2(MAC/IP)
阶段 1:Serv1 解析默认网关 MAC(三层通信的真实起点)
这是一个不可跳过的前置阶段。
1️⃣ Serv1 发送 ARP Request(查询网关 MAC)
- Serv1 判断目标 IP
10.10.10.10不在本地网段 - 需要将报文交给默认网关
172.16.1.1 - 但本地 ARP 表中尚无网关条目
于是 Serv1 发送 ARP Request:
-
报文内容:
- "Who has 172.16.1.1? Tell 172.16.1.10"
-
报文特征:
SMAC = Serv1DMAC = FF:FF:FF:FF:FF:FF
-
这是一个 标准二层广播帧
2️⃣ Leaf1 接收 ARP Request(命中 Anycast Gateway)
-
Leaf1 在 VLAN 10 / BD100 收到该广播帧
-
发现目标 IP
172.16.1.1是:- 本地配置的 Anycast Gateway IP
-
Leaf1 不会泛洪该 ARP
-
而是 本地直接响应
3️⃣ Leaf1 回复 ARP Reply(网关应答)
-
Leaf1 构造 ARP Reply:
- "172.16.1.1 is at "
-
单播发送给 Serv1
🔑 关键点:EVPN Type 2(MAC + IP)的生成时刻
就在 Leaf1 收到 Serv1 发来的 ARP Request 的这一刻:
Leaf1 完成了三件事(非常关键)
✅ ① 本地 MAC 学习(数据平面)
-
在 BD100 中学习:
Serv1 MAC → 本地接入接口
✅ ② 本地 ARP 表学习(IP → MAC)
-
在三层接口(VBDIF)中记录:
172.16.1.10 → Serv1 MAC
bash
[Leaf1]dis arp vpn-instance vpn1
ARP Entry Types: D - Dynamic, S - Static, I - Interface, O - OpenFlow, RD - Redirect
EXP: Expire-time VLAN: VLAN or Bridge Domain
IP ADDRESS MAC ADDRESS EXP(M) TYPE/VLAN INTERFACE VPN-INSTANCE
----------------------------------------------------------------------------------------
172.16.1.1 0001-0001-0001 I Vbdif100 vpn1
172.16.1.10 403f-abde-4d11 10 D/BD100 GE1/0/2.1 vpn1
10.10.10.1 0002-0002-0002 I Vbdif200 vpn1
10.10.10.10 764e-c014-7d7a 10 D/BD200 GE1/0/2.2 vpn1
----------------------------------------------------------------------------------------
Total:4 Dynamic:2 Static:0 Interface:2 OpenFlow:0
Redirect:0
[Leaf1]
✅ ③ 触发 EVPN Type 2(MAC + IP)路由生成(控制平面)
由于:
- BD100 绑定 L2VNI 8000
- 对应 VRF 绑定 L3VNI 100
- 已开启
arp collect host enable
👉 Leaf1 生成一条 EVPN Type 2(MAC + IP)路由:
"主机 172.16.1.10 / MAC Serv1
位于 L2VNI 8000 / L3VNI 100,
对应的 VTEP 是 20.20.20.20"
并通过 BGP EVPN 通告给 Leaf2(经 Spine RR)。
📌 这一点非常重要
这条 Type 2(MAC/IP)路由的产生:
- 与是否跨 Leaf 无关
- 与是否走 VXLAN 无关
- 只与"Leaf 是否首次完整感知到主机 MAC/IP"有关
bash
# EVPN Type 2(MAC + IP)路由
Frame 32: Packet, 181 bytes on wire (1448 bits), 181 bytes captured (1448 bits)
Ethernet II, Src: fa:e8:d2:bf:00:22, Dst: fa:e8:d2:bf:00:12
Internet Protocol Version 4, Src: 2.2.2.2, Dst: 1.1.1.1
Transmission Control Protocol, Src Port: 50979, Dst Port: 179, Seq: 352, Ack: 413, Len: 127
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 127
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 104
Path attributes
Path Attribute - ORIGIN: IGP
Path Attribute - AS_PATH: empty
Path Attribute - LOCAL_PREF: 100
Path Attribute - EXTENDED_COMMUNITIES
Flags: 0xc0, Optional, Transitive, Complete
Type Code: EXTENDED_COMMUNITIES (16)
Length: 32
Carried extended communities: (4 communities)
Route Target: 100:10 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 100
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 10
Route Target: 200:10 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 200
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 10
Encapsulation: VXLAN Encapsulation [Transitive Opaque]
Type: Transitive Opaque (0x03)
Subtype (Opaque): Encapsulation (0x0c)
Tunnel type: VXLAN Encapsulation (8)
EVPN Router's MAC: Router's MAC: fa:e8:d2:bf:00:21 [Transitive EVPN]
Type: Transitive EVPN (0x06)
Subtype (EVPN): EVPN Router's MAC (0x03)
Router's MAC: fa:e8:d2:bf:00:21 # NVE1端口mac
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 51
Address family identifier (AFI): Layer-2 VPN (25)
Subsequent address family identifier (SAFI): EVPN (70)
Next hop: 20.20.20.20
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
EVPN NLRI: MAC Advertisement Route
Route Type: MAC Advertisement Route (2)
Length: 40
Route Distinguisher: 0000001400000001 (20:1)
ESI: 00:00:00:00:00:00:00:00:00:00
ESI Type: ESI 9 bytes value (0)
ESI Value: 00 00 00 00 00 00 00 00 00
ESI 9 bytes value: 00 00 00 00 00 00 00 00 00
Ethernet Tag ID: 0
MAC Address Length: 48
MAC Address: 40:3f:ab:de:4d:11
IP Address Length: 32
IPv4 address: 172.16.1.10
VNI: 8000
VNI: 100
阶段 2:Serv1 发起 ICMP Echo Request
-
此时:
- Serv1 已获得网关 MAC
-
正式发送 ICMP Echo Request:
报文特征:
SMAC = Serv1DMAC = Anycast Gateway MACSIP = 172.16.1.10DIP = 10.10.10.10
阶段 3:Leaf1 发现 Serv2 为本地直连主机,但尚未知其 MAC
1️⃣在前一阶段中,Leaf1 已完成:
- Anycast Gateway ARP 应答
- Serv1 的 MAC / IP 学习
- EVPN Type 2(MAC + IP)路由通告(Serv1)
接下来,Leaf1 需要将真正的业务流量转发给目标主机 Serv2。
2️⃣ Leaf1 路由查表:确认 Serv2 为本地直连主机
- Leaf1 在 VRF vpn1 中查找目的地址
10.10.10.10 - 命中一条 直连 / 主机路由:
text
10.10.10.10/32 Direct VBDIF200
这一步 Leaf1 已经明确:
- 目标主机 Serv2 位于本地
- 不需要 VXLAN 封装
- 下一跳为本地三层接口(VBDIF200)
❗关键问题:Leaf1 是否已经知道 Serv2 的 MAC?
答案:不一定。
在首次通信时,Leaf1 的状态通常是:
-
已知:
10.10.10.10是本地直连
-
但未知:
10.10.10.10 → MAC的映射关系
因此,Leaf1 无法直接完成二层封装,必须先解析 Serv2 的 MAC 地址。
3️⃣ Leaf1 发送 ARP Request(查询 Serv2 MAC)
Leaf1 在 VLAN 20 / BD200 中发起 ARP 请求:
-
报文内容:
- "Who has 10.10.10.10? Tell 10.10.10.1"
-
报文特征:
SMAC = Anycast Gateway MACDMAC = FF:FF:FF:FF:FF:FF
-
这是一个 标准二层广播帧
📌 注意
这里的 ARP 是 Leaf1 作为三层网关主动发起的 ,
而不是主机触发的。
4️⃣ Serv2 返回 ARP Reply
-
Serv2 回复 ARP:
- "10.10.10.10 is at 76:4e:c0:14:7d:7a"
-
单播返回给 Leaf1
5️⃣ Leaf1 完成本地 MAC / ARP 学习(对称机制)
Leaf1 在收到 ARP Reply 后,同时完成以下学习:
✅ 数据平面(MAC 表)
-
在 BD200 的 MAC 表中学习:
Serv2 MAC → 本地接入接口
✅ 三层 ARP 表(IP → MAC)
-
在 VBDIF200 中记录:
10.10.10.10 → Serv2 MAC
📌 这一过程与之前 Leaf1 学习 Serv1 完全对称
- Serv1:主机 → 网关 ARP
- Serv2:网关 → 主机 ARP
🔔 是否会触发 EVPN Type 2(MAC + IP)?
答案是:会的。
由于:
- BD200 绑定了 L2VNI 9000
- VRF vpn1 绑定 L3VNI 100
- 已开启 Host Collect
👉 Leaf1 在学习到 Serv2 的 MAC / IP 后:
-
同样会生成一条 EVPN Type 2(MAC + IP)路由:
10.10.10.10 / MAC Serv2- Next-hop VTEP =
20.20.20.20
并通过 BGP EVPN 通告给其他 Leaf(包括 Leaf2)。
📌 非常重要的一点
即使 Serv2 与 Serv1 在同一台 Leaf 上,
EVPN Type 2 仍然会被生成并通告 ,这是为了:
- 后续可能的跨 Leaf 访问
- 控制平面的一致性
bash
# EVPN Type 2(MAC + IP)路由
Frame 24: Packet, 293 bytes on wire (2344 bits), 293 bytes captured (2344 bits)
Ethernet II, Src: fa:e8:d2:bf:00:22, Dst: fa:e8:d2:bf:00:12
Internet Protocol Version 4, Src: 2.2.2.2, Dst: 1.1.1.1
Transmission Control Protocol, Src Port: 50979, Dst Port: 179, Seq: 113, Ack: 20, Len: 239
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 127
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 104
Path attributes
Path Attribute - ORIGIN: IGP
Path Attribute - AS_PATH: empty
Path Attribute - LOCAL_PREF: 100
Path Attribute - EXTENDED_COMMUNITIES
Flags: 0xc0, Optional, Transitive, Complete
Type Code: EXTENDED_COMMUNITIES (16)
Length: 32
Carried extended communities: (4 communities)
Route Target: 100:20 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 100
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 20
Route Target: 200:10 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 200
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 10
Encapsulation: VXLAN Encapsulation [Transitive Opaque]
Type: Transitive Opaque (0x03)
Subtype (Opaque): Encapsulation (0x0c)
Tunnel type: VXLAN Encapsulation (8)
EVPN Router's MAC: Router's MAC: fa:e8:d2:bf:00:21 [Transitive EVPN]
Type: Transitive EVPN (0x06)
Subtype (EVPN): EVPN Router's MAC (0x03)
Router's MAC: fa:e8:d2:bf:00:21
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 51
Address family identifier (AFI): Layer-2 VPN (25)
Subsequent address family identifier (SAFI): EVPN (70)
Next hop: 20.20.20.20
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI) # Type 2 irb route
EVPN NLRI: MAC Advertisement Route
Route Type: MAC Advertisement Route (2)
Length: 40
Route Distinguisher: 0000001400000002 (20:2)
ESI: 00:00:00:00:00:00:00:00:00:00
ESI Type: ESI 9 bytes value (0)
ESI Value: 00 00 00 00 00 00 00 00 00
ESI 9 bytes value: 00 00 00 00 00 00 00 00 00
Ethernet Tag ID: 0
MAC Address Length: 48
MAC Address: 76:4e:c0:14:7d:7a
IP Address Length: 32
IPv4 address: 10.10.10.10
VNI: 9000
VNI: 100
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 112
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 89
Path attributes
Path Attribute - ORIGIN: IGP
Path Attribute - AS_PATH: empty
Path Attribute - LOCAL_PREF: 100
Path Attribute - EXTENDED_COMMUNITIES
Flags: 0xc0, Optional, Transitive, Complete
Type Code: EXTENDED_COMMUNITIES (16)
Length: 24
Carried extended communities: (3 communities)
Route Target: 100:20 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 100
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 20
Route Target: 200:10 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 200
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 10
Encapsulation: VXLAN Encapsulation [Transitive Opaque]
Type: Transitive Opaque (0x03)
Subtype (Opaque): Encapsulation (0x0c)
Tunnel type: VXLAN Encapsulation (8)
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 44
Address family identifier (AFI): Layer-2 VPN (25)
Subsequent address family identifier (SAFI): EVPN (70)
Next hop: 20.20.20.20
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI) # Type 2 mac route
EVPN NLRI: MAC Advertisement Route
Route Type: MAC Advertisement Route (2)
Length: 33
Route Distinguisher: 0000001400000002 (20:2)
ESI: 00:00:00:00:00:00:00:00:00:00
ESI Type: ESI 9 bytes value (0)
ESI Value: 00 00 00 00 00 00 00 00 00
ESI 9 bytes value: 00 00 00 00 00 00 00 00 00
Ethernet Tag ID: 0
MAC Address Length: 48
MAC Address: 76:4e:c0:14:7d:7a
IP Address Length: 0
IP Address: NOT INCLUDED
VNI: 9000
6️⃣ Leaf1 完成真正的业务转发
至此,所有"前置条件"已经满足:
- Serv1 已解析网关 MAC
- Leaf1 已解析 Serv2 MAC
Leaf1 开始执行真正的三层转发:
- 重写二层 MAC
- TTL -- 1
- 将 ICMP 报文发送给 Serv2
场景二总结
通过场景二可以看到,所谓"三层通信",在真实网络中并不是"直接查路由就转发"这么简单,而是始终建立在二层解析之上的一个逐步收敛过程。
-
三层转发 ≠ 不需要 ARP
-
在一次完整的三层通信中:
- 主机需要解析 网关 MAC
- 网关也需要解析 目的主机 MAC
-
每一次"首次完整 MAC / IP 识别"
- 都可能触发 EVPN Type 2(MAC + IP)路由
-
EVPN 控制平面
- 往往比数据平面"走得更早",为后续跨 Leaf 转发提前铺路
-
是否使用 VXLAN
- 只取决于下一跳是否为远端 VTEP
场景三:跨 Leaf + 跨子网三层互通(Inter-Leaf Inter-Subnet Routing over EVPN VXLAN)
流量路径:Serv1 → Serv4
- Serv1:
172.16.1.10(Leaf1) - Serv4:
10.10.10.20(Leaf2)
通信特征
- 源目 IP 位于 不同子网
- 分别接入在 不同 Leaf
- 每台 Leaf 均部署 Anycast Gateway
- 使用 EVPN VXLAN + Symmetric IRB
- 首次通信时,控制平面信息尚未完备
- 会发生一次跨 Leaf 的 ARP 解析
- ARP 收敛完成后,后续流量才进入确定性单播阶段
阶段 1:Serv1 发起跨子网通信(主机侧行为)
Serv1 判断目标 IP 10.10.10.20 不在本地网段:
- 目标不在
172.16.1.0/24 - 默认网关为
172.16.1.1
由于这是一次全新通信:
- Serv1 本地 ARP 表中尚无网关 MAC
因此 Serv1 发送 ARP Request:
- "Who has 172.16.1.1? Tell 172.16.1.10"
Leaf1 作为 Anycast Gateway:
-
本地应答 ARP Reply
-
并在此过程中学习到:
- Serv1 的 MAC / IP
- 触发 EVPN Type 2(MAC + IP,Serv1)
📌 这一步机制与场景二一致,此处不再展开。
阶段 2:Leaf1 查路由,确认目标网段为"本地直连子网"
Serv1 随后发送 ICMP Echo Request:
text
SIP = 172.16.1.10
DIP = 10.10.10.20
DMAC = Anycast Gateway MAC
Leaf1 收到报文后:
1️⃣ 进入 VRF vpn1 的三层转发表
2️⃣ 查找目的地址 10.10.10.20
命中一条 直连路由:
text
10.10.10.0/24 Direct VBDIF200
此时 Leaf1 的判断是:
- 目标网段
10.10.10.0/24是 直连子网 - 默认网关 IP 为
10.10.10.1 - 但并不知道 Serv4 的 MAC 地址
阶段 3:Leaf1 发起 ARP,请求解析远端 Serv4 的 MAC
这是本场景最容易被忽略、但最关键的一步。
由于:
-
Leaf1 需要把报文交付给
10.10.10.20 -
但 ARP 表中尚无:
10.10.10.20 → MAC
👉 Leaf1 必须先发送 ARP Request:
text
Who has 10.10.10.20? Tell 10.10.10.1
这个 ARP 报文的命运
-
该 ARP 属于:
- BD200 / L2VNI(10.10.10.0/24 所在广播域)
-
Leaf1 查找 L2VNI 的泛洪范围
-
通过 EVPN Type 3(IMET)
-
将 ARP 报文以 VXLAN L2VNI 方式
- 发送给 Leaf2
📌 注意
此时:
- 不是 L3VNI
- 也不是单播
- 而是一次标准的 跨 Leaf 二层 ARP 泛洪
阶段 4:Leaf2 接收 ARP,请求到达 Serv4
1️⃣ Leaf2 收到 VXLAN 报文
2️⃣ 根据 L2VNI 映射到本地 BD
3️⃣ 在 BD 内泛洪 ARP Request
4️⃣ Serv4 收到 ARP 请求:
text
Who has 10.10.10.20?
阶段 5:Serv4 回复 ARP,触发 Leaf2 学习与 EVPN 通告
Serv4 返回 ARP Reply(单播):
text
10.10.10.20 is at <Serv4 MAC>
Leaf2 在此刻完成三件关键事情
✅ ① 本地 MAC 学习(数据平面)
-
在 BD200 中学习:
Serv4 MAC → 本地接口
此时会触发 EVPN Type 2 MAC 路由生成。
✅ ② 本地 ARP 表学习(IP → MAC)
-
在网关接口
10.10.10.1:- 学习
10.10.10.20 → Serv4 MAC
- 学习
✅ ③ 触发 EVPN Type 2(MAC + IP)路由生成
由于:
- BD 绑定 L2VNI
- VRF 绑定 L3VNI
- 已开启 Host Collect
👉 Leaf2 生成一条 EVPN Type 2(MAC + IP)路由:
text
10.10.10.20 / MAC Serv4
Next-hop VTEP = 30.30.30.30
并通过 BGP EVPN 通告给 Leaf1。
bash
# EVPN Type 2(MAC + IP)
Frame 17: Packet, 195 bytes on wire (1560 bits), 195 bytes captured (1560 bits)
Ethernet II, Src: fa:e8:d2:bf:00:12, Dst: fa:e8:d2:bf:00:22
Internet Protocol Version 4, Src: 1.1.1.1, Dst: 2.2.2.2
Transmission Control Protocol, Src Port: 179, Dst Port: 50979, Seq: 127, Ack: 20, Len: 141
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 141
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 118
Path attributes
Path Attribute - ORIGIN: IGP
Path Attribute - AS_PATH: empty
Path Attribute - LOCAL_PREF: 100
Path Attribute - ORIGINATOR_ID: 3.3.3.3 # Leaf2产生的
Path Attribute - CLUSTER_LIST: 1.1.1.1
Path Attribute - EXTENDED_COMMUNITIES
Flags: 0xc0, Optional, Transitive, Complete
Type Code: EXTENDED_COMMUNITIES (16)
Length: 32
Carried extended communities: (4 communities)
Route Target: 100:20 [Transitive 2-Octet AS-Specific]
Route Target: 200:10 [Transitive 2-Octet AS-Specific]
Encapsulation: VXLAN Encapsulation [Transitive Opaque]
EVPN Router's MAC: Router's MAC: fa:e8:d2:bf:00:31 [Transitive EVPN]
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 51
Address family identifier (AFI): Layer-2 VPN (25)
Subsequent address family identifier (SAFI): EVPN (70)
Next hop: 30.30.30.30
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
EVPN NLRI: MAC Advertisement Route
Route Type: MAC Advertisement Route (2)
Length: 40
Route Distinguisher: 0000001e00000002 (30:2)
ESI: 00:00:00:00:00:00:00:00:00:00
Ethernet Tag ID: 0
MAC Address Length: 48
MAC Address: 38:05:60:49:71:64
IP Address Length: 32
IPv4 address: 10.10.10.20
VNI: 9000
VNI: 100
阶段 6:Leaf1 收到 Type 2(MAC/IP),通信进入确定性阶段
Leaf1 通过 BGP EVPN 收到:
10.10.10.20/32 → VTEP 30.30.30.30
至此:
-
Leaf1 已完整掌握 Serv4 的位置
-
三层转发表中出现:
- 一条 EVPN 学习到的主机路由
阶段 7:后续 ICMP 报文基于 EVPN 主机路由转发
此后,Leaf1 再次收到 Serv1 的 ICMP Echo Request 时:
-
查路由:
- 命中
10.10.10.20/32(EVPN)
- 命中
-
判断:
- 下一跳为远端 VTEP(Leaf2)
Leaf1 执行 VXLAN 封装:
text
VNI = L3VNI 100
Outer Src IP = 20.20.20.20
Outer Dst IP = 30.30.30.30
并将报文单播发送给 Leaf2。
Leaf2 解封装后:
- 查本地直连路由
- 重写二层头
- 将报文交付给 Serv4
场景三总结
这个场景揭示了一个非常容易被忽略的事实:
1️⃣ 跨 Leaf + 跨子网通信,第一次一定是"非确定性的"
-
在 EVPN 主机路由尚未建立前:
- Leaf 必须依赖 ARP
- 并且 ARP 可能跨 Leaf 泛洪
2️⃣ EVPN Type 2(MAC/IP)不是"提前就有的"
-
它一定由:
- 首次真正连接到该主机的 Leaf
- 在 ARP 收敛完成后
- 才生成并通告
3️⃣ 真正的 VXLAN L3 单播,是"后半段故事"
-
ARP 阶段:
- L2VNI + Type 3
-
业务阶段:
- L3VNI + Type 2(MAC/IP)
4️⃣ Symmetric IRB 的真正价值
它允许:
- 初始阶段"慢一点"(ARP 收敛)
- 一旦主机被感知,全网立刻进入
高速、确定、无泛洪的三层单播模式
场景四:南北向流量互通(North--South Traffic via Border Leaf)
流量路径:Serv1 → R1
- Serv1:
172.16.1.10(Tenant 内部主机) - R1:
182.1.1.2(外部网络 / Internet)
通信特征
- 源 IP 位于 EVPN VXLAN Tenant 网络
- 目的 IP 位于 VXLAN Fabric 之外
- 流量必须经过 Border Leaf(BL1)
- 使用 EVPN Type 5(IP Prefix Route)
- 属于典型的 南北向流量模型
📌 核心区别
东西向(Leaf ↔ Leaf):
- 依赖 Type 2(MAC/IP)
南北向(Tenant ↔ External):
- 依赖 Type 5(Prefix)
阶段 1:Border Leaf 生成并发布 EVPN Type 5 路由
这是南北向通信真正的起点 ,但它发生在 业务流量出现之前。
1️⃣ Border Leaf 学习外部路由
- BL1 与外部路由器 R1 建立三层邻接
- 从 R1 学习到外部网络前缀,例如:
text
182.1.1.0/24
2️⃣ Border Leaf 将外部前缀注入 EVPN
在 BL1 的 VRF(vpn1)中配置:
text
advertise l2vpn evpn
于是 BL1 生成一条 EVPN Type 5 路由:
text
Prefix: 182.1.1.0/24
L3VNI: 100
Next-hop VTEP: 40.40.40.40
并通过 BGP EVPN(经 Spine RR)通告给所有 Leaf。
📌 非常关键
Type 5:
- 不携带 MAC
- 不关心二层
- 只描述"去往某个前缀,下一跳是谁"
bash
# EVPN Type 5 路由
Frame 12: Packet, 296 bytes on wire (2368 bits), 296 bytes captured (2368 bits)
Ethernet II, Src: fa:e8:d2:bf:00:12, Dst: fa:e8:d2:bf:00:22
Internet Protocol Version 4, Src: 1.1.1.1, Dst: 2.2.2.2
Transmission Control Protocol, Src Port: 179, Dst Port: 56268, Seq: 1, Ack: 1, Len: 242
Border Gateway Protocol - UPDATE Message
Marker: ffffffffffffffffffffffffffffffff
Length: 242
Type: UPDATE Message (2)
Withdrawn Routes Length: 0
Total Path Attribute Length: 219
Path attributes
Path Attribute - ORIGIN: INCOMPLETE
Path Attribute - AS_PATH: empty
Path Attribute - MULTI_EXIT_DISC: 0
Path Attribute - LOCAL_PREF: 100
Path Attribute - ORIGINATOR_ID: 4.4.4.4
Path Attribute - CLUSTER_LIST: 1.1.1.1
Path Attribute - EXTENDED_COMMUNITIES
Flags: 0xc0, Optional, Transitive, Complete
Type Code: EXTENDED_COMMUNITIES (16)
Length: 24
Carried extended communities: (3 communities)
Route Target: 200:10 [Transitive 2-Octet AS-Specific]
Type: Transitive 2-Octet AS-Specific (0x00)
Subtype (AS2): Route Target (0x02)
2-Octet AS: 200
Local Administrator: 0x00, Type: VID (802.1Q VLAN ID)
Service Id: 10
Encapsulation: VXLAN Encapsulation [Transitive Opaque]
Type: Transitive Opaque (0x03)
Subtype (Opaque): Encapsulation (0x0c)
Tunnel type: VXLAN Encapsulation (8)
EVPN Router's MAC: Router's MAC: fa:e8:d2:bf:00:41 [Transitive EVPN]
Type: Transitive EVPN (0x06)
Subtype (EVPN): EVPN Router's MAC (0x03)
Router's MAC: fa:e8:d2:bf:00:41
Path Attribute - MP_REACH_NLRI
Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
Type Code: MP_REACH_NLRI (14)
Length: 153
Address family identifier (AFI): Layer-2 VPN (25)
Subsequent address family identifier (SAFI): EVPN (70)
Next hop: 40.40.40.40
Number of Subnetwork points of attachment (SNPA): 0
Network Layer Reachability Information (NLRI)
EVPN NLRI: IP Prefix route
Route Type: IP Prefix route (5)
Length: 34
Route Distinguisher: 0000019000000001 (400:1)
ESI: 00:00:00:00:00:00:00:00:00:00
Ethernet Tag ID: 0
IP prefix length: 32
IPv4 address: 182.1.1.1
IPv4 Gateway address: 0.0.0.0
VNI: 100
EVPN NLRI: IP Prefix route
Route Type: IP Prefix route (5)
Length: 34
Route Distinguisher: 0000019000000001 (400:1)
ESI: 00:00:00:00:00:00:00:00:00:00
Ethernet Tag ID: 0
IP prefix length: 32
IPv4 address: 41.41.41.41
IPv4 Gateway address: 0.0.0.0
VNI: 100
EVPN NLRI: IP Prefix route
Route Type: IP Prefix route (5)
Length: 34
Route Distinguisher: 0000019000000001 (400:1)
ESI: 00:00:00:00:00:00:00:00:00:00
Ethernet Tag ID: 0
IP prefix length: 24
IPv4 address: 182.1.1.0
IPv4 Gateway address: 0.0.0.0
VNI: 100
EVPN NLRI: IP Prefix route
Route Type: IP Prefix route (5)
Length: 34
Route Distinguisher: 0000019000000001 (400:1)
ESI: 00:00:00:00:00:00:00:00:00:00
Ethernet Tag ID: 0
IP prefix length: 24
IPv4 address: 41.41.41.0
IPv4 Gateway address: 0.0.0.0
VNI: 100
3️⃣ Leaf1 的初始状态
在 Serv1 发包之前,Leaf1 已经具备:
-
一条 EVPN Type 5 路由:
182.1.1.0/24 → VTEP 40.40.40.40
-
但:
- 不知道 R1 的 MAC
- 也不需要知道
bash
[Leaf1]dis ip routing-table vpn-instance vpn1
Proto: Protocol Pre: Preference
Route Flags: R - relay, D - download to fib, T - to vpn-instance, B - black hole route
------------------------------------------------------------------------------
Routing Table : vpn1
Destinations : 12 Routes : 12
Destination/Mask Proto Pre Cost Flags NextHop Interface
10.10.10.0/24 Direct 0 0 D 10.10.10.1 Vbdif200
10.10.10.1/32 Direct 0 0 D 127.0.0.1 Vbdif200
10.10.10.20/32 IBGP 255 0 RD 30.30.30.30 VXLAN
10.10.10.255/32 Direct 0 0 D 127.0.0.1 Vbdif200
41.41.41.0/24 IBGP 255 0 RD 40.40.40.40 VXLAN
41.41.41.41/32 IBGP 255 0 RD 40.40.40.40 VXLAN
172.16.1.0/24 Direct 0 0 D 172.16.1.1 Vbdif100
172.16.1.1/32 Direct 0 0 D 127.0.0.1 Vbdif100
172.16.1.255/32 Direct 0 0 D 127.0.0.1 Vbdif100
182.1.1.0/24 IBGP 255 0 RD 40.40.40.40 VXLAN # 已经学习到外部路由
182.1.1.1/32 IBGP 255 0 RD 40.40.40.40 VXLAN
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
[Leaf1]
阶段 2:Serv1 发起访问外部网络(主机视角)
Serv1 需要访问 182.1.1.2:
- 判断目标 IP 不在本地网段
- 向默认网关
172.16.1.1发送 ARP,学习到网关mac(Anycast Gateway MAC)
Leaf1 作为 Anycast Gateway:
- 本地应答 ARP
- 学习 Serv1 的 MAC / IP
- 触发 EVPN Type 2(MAC/IP)(机制已在前文说明)
随后 Serv1 发送 ICMP Echo Request:
text
SIP = 172.16.1.10
DIP = 182.1.1.2
DMAC = Anycast Gateway MAC
阶段 3:Leaf1 查路由,命中 EVPN Type 5
Leaf1 在 VRF vpn1 中查找目的地址:
text
182.1.1.2
命中:
text
182.1.1.0/24 EVPN Type-5 → VTEP 40.40.40.40
此时 Leaf1 得出结论:
- 目的地位于 VXLAN Fabric 之外
- 下一跳是 Border Leaf
- 必须进行 VXLAN L3 封装
阶段 4:Leaf1 → Border Leaf 的 VXLAN L3 转发
Leaf1 执行 VXLAN 封装:
- VNI = L3VNI 100
- Outer Src IP =
20.20.20.20 - Outer Dst IP =
40.40.40.40 - Inner Payload = 原始三层 IP 报文
📌 注意
- 没有 L2VNI
- 没有目的主机 MAC
- 这是一次纯粹的 三层 Overlay 转发
阶段 5:Border Leaf 解封装并转发至外部网络
1️⃣ BL1 收到 VXLAN 报文
2️⃣ 根据 L3VNI 100 映射到 VRF vpn1
3️⃣ 解封装后得到原始 IP 报文:
text
SIP = 172.16.1.10
DIP = 182.1.1.2
Border Leaf 的本地三层转发:
-
BL1 查 VRF 路由表
-
命中从 R1 学习到的外部路由
-
进行普通三层转发:
- TTL -- 1
- 重写二层 MAC
-
将报文发送给 R1
阶段 6:返回流量(External → Tenant)
R1 回复 ICMP Echo Reply:
text
SIP = 182.1.1.2
DIP = 172.16.1.10
在 Border Leaf 上的处理
-
BL1 接收回程报文
-
查 VRF 路由:
172.16.1.10/32
-
该路由来源于:
- EVPN Type 2(MAC/IP,Serv1)
于是 BL1:
-
执行 VXLAN 封装:
- VNI = L3VNI 100
- Outer Dst =
20.20.20.20
-
将报文发回 Leaf1
Leaf1 解封装后:
- 转发给 Serv1
- 完成一次南北向通信闭环
场景四总结:南北向的本质
1️⃣ 南北向流量,靠的是 Type 5
-
Type 5 是:
- Tenant 与 External 世界的"边界指引"
-
不参与二层
-
不描述主机
-
只解决:
- "这个前缀往哪走"
2️⃣ Border Leaf 的真实角色
Border Leaf 不是"特殊 Leaf",
而是:
- EVPN Fabric 的一部分
- 同时也是 Tenant 的出口路由器
它同时具备:
| 方向 | 职责 |
|---|---|
| 向内 | EVPN Type 5 的发布者 |
| 向外 | 传统三层路由器 |
3️⃣ 南北向与东西向的根本差异
| 维度 | 东西向 | 南北向 |
|---|---|---|
| 路由类型 | Type 2 | Type 5 |
| 是否关心 MAC | 是 | 否 |
| VXLAN VNI | L2VNI / L3VNI | 仅 L3VNI |
| 目标 | 主机 | 网络前缀 |
4️⃣ 整个 VXLAN EVPN 的完整闭环
到此为止:
- 场景一:二层桥接(Type 2 + Type 3)
- 场景二:同 Leaf 三层(Type 2 MAC/IP)
- 场景三:跨 Leaf 三层(Type 2 + L3VNI)
- 场景四:南北向流量(Type 5)
👉 EVPN VXLAN 的主要核心行为,已经完整呈现。