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 的主要核心行为,已经完整呈现。

相关推荐
June bug1 小时前
【实习笔记】Fiddler学习笔记
笔记·学习·fiddler
min1811234561 小时前
HR人力资源招聘配置流程图制作教程
大数据·网络·人工智能·架构·流程图·求职招聘
JeffDingAI2 小时前
【Datawhale学习笔记】动手学RNN及LSTM
笔记·rnn·学习
weixin_516023072 小时前
ssh配合密钥连接
服务器·网络·ssh
风之子npu2 小时前
CPU基础知识(1)
笔记
陌路202 小时前
RPC分布式通信(3)--RPC基础框架接口
分布式·网络协议·rpc
JeffDingAI2 小时前
【Datawhale学习笔记】预训练模型实战
笔记·学习
tobias.b2 小时前
408真题解析-2009-36-网络-交换机转发机制
网络·智能路由器·408考研·408真题解析
来生硬件工程师3 小时前
【PCB设计笔记】PCB布局时,如何快速互换器件位置?(Altium Designer 25)
笔记