ENSP Pro Lab笔记:配置BGP EVPN VXLAN双栈(2)

六、业务连通性测试与动态观测 (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。

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。
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。

终端信息表:

角色 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 = Serv1
    • DMAC = 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 = "我从流量里猜到它可能在哪"

从这个场景的时间线上看

  1. Leaf1 学习 Serv1 MAC → 立即通告 Type 2
  2. Leaf2 很快收到 Type 2 mac route(控制平面)
  3. 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 = Serv1
    • DMAC = 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 = Serv1
  • DMAC = Anycast Gateway MAC
  • SIP = 172.16.1.10
  • DIP = 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 MAC
    • DMAC = 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 的主要核心行为,已经完整呈现。

相关推荐
La Pulga10 小时前
【FreeRTOS源码学习笔记】任务延时列表
笔记·mcu·学习·嵌入式·freertos·实时操作系统
Peter-OK14 小时前
PostgreSQL学习笔记(入门-进阶-精通说明)
笔记·学习·postgresql
承渊政道15 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
成都蜀味缘餐饮技术培训学校16 小时前
手撕烤兔技术培训实战指南,秘制腌料配方比例与调制手法
大数据·经验分享·笔记·其他·微信公众平台
希和202718 小时前
免费AI视频生成工具汇总(国内优先,适合做漫剧、短视频,Obsidian笔记版)
人工智能·笔记·音视频
蒸蒸yyyyzwd19 小时前
秋招学习笔记 day109
笔记·八股
爱和冰阔落19 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
严肃小白兔20 小时前
Cloudflare 更新 API Token 管理:从最小权限到自动化凭据安全
网络·安全·自动化
只愿云淡风清21 小时前
正则表达式学习笔记 02:基础语法
笔记·学习·正则表达式
希和20271 天前
考研英语阅读词汇笔记|城市野径、抄近道步道(非正式小路)
笔记·考研