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

六、业务连通性测试与动态观测 (Traffic Test & Observation)

(续)

E03:Packet Walk (IPv6 数据流全景解析)

本篇将通过真实的数据包转发过程(Packet Walk),观察 IPv6 流量在 Underlay 与 Overlay 之间的封装、解封装与转发表匹配行为。

本节不再关注配置命令本身 ,而是完全站在数据包真实转发视角,验证 EVPN 控制平面设计是否按预期工作。

📌 说明

以下各场景 均假设为独立的首次通信

以便清晰观察 IPv6 下的完整收敛过程。


0. 场景预设与基础信息(IPv6)

0.1 拓扑与设备角色
  • 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

0.2 IPv6 子网与 Anycast Gateway 规划
VLAN / BD IPv6 前缀 Anycast Gateway IPv6
VLAN 10 / BD100 / BD300 172:16:1::/64 172:16:1::1
VLAN 20 / BD200 / BD400 10:10:10::/64 10:10:10::1

0.3 终端 IPv6 信息表
角色 IPv6 地址 接入 Leaf VLAN / BD VNI
Serv1 172:16:1::10 Leaf1 VLAN 10 / BD100 L2VNI 8000
Serv2 10:10:10::10 Leaf1 VLAN 20 / BD200 L2VNI 9000
Serv3 172:16:1::20 Leaf2 VLAN 30 / BD300 L2VNI 8000
Serv4 10:10:10::20 Leaf2 VLAN 40 / BD400 L2VNI 9000

0.4 IPv6 邻居发现与地址映射技术说明

在 IPv6 场景下,不再使用 ARP 协议完成 IP → MAC 的解析,而是通过 IPv6 邻居发现协议(NDP) 实现同等功能。

从 EVPN / VXLAN 的视角看,NDP 与 ARP 在机制层面完全等价,只是报文类型与组播模型不同。


一、IPv6 邻居发现协议(NDP)工作机制

IPv6 邻居发现协议(NDP)是 ICMPv6 的核心组成部分,整合了 IPv4 中以下功能:

  • ARP(地址解析)
  • 路由器发现
  • ICMP 重定向
  • 重复地址检测(DAD)

在地址解析场景中:

  1. 当节点需要与某个 IPv6 地址通信,但未知其 MAC 地址时
  2. 会发送 邻居请求(NS, Neighbor Solicitation)
  3. 目标节点收到后,使用 邻居通告(NA, Neighbor Advertisement) 单播回复自身 MAC
  4. 发起节点将 IPv6 ↔ MAC 映射写入邻居缓存(Neighbor Cache)

📌 在 EVPN 场景中:

  • NS / NA 本质仍是二层控制报文
  • 是否跨 Leaf,取决于 L2VNI + Type 3 的泛洪范围

二、IPv6 单播地址 → 请求节点组播地址映射(以 Serv1 为例)

IPv6 为避免无意义的广播,引入了 请求节点组播地址(Solicited Node Multicast Address)

映射规则(RFC 4291)如下:

  1. 固定前缀:ff02::1:ff
  2. 提取目标 IPv6 地址 最后 24 位
  3. 拼接生成请求节点组播地址

示例(Serv1)

  • Serv1 IPv6 地址:

    复制代码
    172:16:1::10
  • 完整展开后:

    复制代码
    0172:0016:0001:0000:0000:0000:0000:0010
  • 提取最后 24 位:

    复制代码
    000010
  • 生成请求节点组播地址

    复制代码
    ff02::1:ff00:0010

三、IPv6 组播地址 → 二层以太网 MAC 映射(以 Serv1 为例)

IPv6 组播报文在以太网上传输时,需要进一步映射为 二层组播 MAC 地址,规则遵循 RFC 2464:

  1. 固定前缀:33:33
  2. 提取 IPv6 组播地址 最后 32 位
  3. 拼接生成以太网组播 MAC

示例

  • IPv6 请求节点组播地址:

    复制代码
    ff02::1:ff00:0010
  • 提取最后 32 位:

    复制代码
    ff00:0010
  • 对应二层组播 MAC:

    复制代码
    33:33:ff:00:00:10

小结:为什么这些细节在 EVPN 中很重要?
  • NS / NA ≈ ARP

    • 只是表现形式不同
  • IPv6 组播 ≠ 无控制泛洪

    • 在 EVPN 中同样受 Type 3 约束
  • IPv6 主机 MAC / IP

    • 仍然通过 EVPN Type 2(MAC + IPv6) 进行通告
  • IPv6 的引入:

    • 没有改变 EVPN 的控制平面逻辑
    • 只是把"地址族"从 IPv4 扩展为 IPv6

场景一(IPv6):同子网二层互通

Intra-Subnet Bridging over EVPN VXLAN (IPv6)

流量路径

Serv1 (172:16:1::10) → Serv3 (172:16:1::20)

通信特征
  • 源目 IPv6 地址同属 172:16:1::/64
  • 分别接入 不同 Leaf
  • Leaf1 的 BD100 与 Leaf2 的 BD300
    → 通过 EVPN/VXLAN + L2VNI 8000 组成同一个逻辑二层广播域
  • VLAN / BD 仅具备本地意义(Local Significance)
  • Leaf 在本场景中 全程作为二层桥(Bridge)
  • Overlay 使用 VXLAN L2VNI = 8000
  • 地址解析由 IPv6 邻居发现(ND) 完成,而非 ARP

阶段 1:Serv1 的 ND 请求触发 BUM 泛洪(Type 3 决定泛洪范围)

1️⃣ Serv1 发送 Neighbor Solicitation(NS)

  • Serv1 需要解析 Serv3 的 MAC 地址

  • 构造 Neighbor Solicitation(NS) 报文:

    • "Who has 172:16:1::20? Tell 172:16:1::10"
  • 报文特征:

    • SMAC = Serv1
    • DMAC = IPv6 Solicited-Node 对应的二层组播 MAC
      33:33:ff:xx:xx:xx
    • ICMPv6 Type 135(NS)

📌 与 IPv4 的区别

  • ARP Broadcast → IPv6 Solicited-Node Multicast
  • 但在 EVPN 看来,仍然是一个 BUM 报文
bash 复制代码
#  **Neighbor Solicitation(NS)** 报文
Frame 5: Packet, 90 bytes on wire (720 bits), 90 bytes captured (720 bits)
Ethernet II, Src: 40:3f:ab:de:4d:11, Dst: 33:33:ff:00:00:20
    Destination: 33:33:ff:00:00:20
    Source: 40:3f:ab:de:4d:11
    Type: 802.1Q Virtual LAN (0x8100)
    [Stream index: 2]
802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 10
    000. .... .... .... = Priority: Best Effort (default) (0)
    ...0 .... .... .... = DEI: Ineligible
    .... 0000 0000 1010 = ID: 10
    Type: IPv6 (0x86dd)
Internet Protocol Version 6, Src: 172:16:1::10, Dst: ff02::1:ff00:20
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 32
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: 172:16:1::10
    Destination Address: ff02::1:ff00:20
    [Stream index: 0]
Internet Control Message Protocol v6
    Type: Neighbor Solicitation (135)
    Code: 0
    Checksum: 0x3d0e [correct]
    [Checksum Status: Good]
    Reserved: 00000000
    Target Address: 172:16:1::20
    ICMPv6 Option (Source link-layer address : 40:3f:ab:de:4d:11)
        Type: Source link-layer address (1)
        Length: 1 (8 bytes)
        Link-layer address: 40:3f:ab:de:4d:11

2️⃣ Leaf1 入站处理(Ingress Bridge)

  • Leaf1 在接入口收到 NS 报文
  • VLAN 10 → 映射到 本地 BD100
  • Leaf1 判断该帧属于 L2VNI 8000

此时 Leaf1 同样执行两个并行但逻辑独立的动作:


🔹 动作 A:本地 MAC 学习(数据平面)

  • Leaf1 在 BD100 的 MAC 表中学习:

    • Serv1 MAC → 本地接入接口

这是所有后续控制与转发行为的起点


🔹 动作 B:触发 EVPN Type 2(MAC-only)路由生成(控制平面)

由于:

  • BD100 绑定 L2VNI 8000
  • EVPN 已启用
  • 当前仅完成 MAC 学习,尚未获得 IPv6 地址绑定

👉 Leaf1 立即生成一条 EVPN Type 2(MAC-only)路由

"MAC Serv1 属于 L2VNI 8000,对应的 VTEP 是 20.20.20.20"

并通过 BGP EVPN 通告给 Leaf2。

📌 关键点
IPv6 并不会改变 Type 2(MAC-only)的产生逻辑

只要 Leaf 首次学习到 MAC,就会立即通告。


3️⃣ Leaf1 执行 BUM 泛洪(基于 EVPN Type 3)

回到数据平面流程:

  • Leaf1 判断该 NS 报文为 BUM 流量

  • 查找 L2VNI 8000 的 头端复制列表

    • 该列表由 EVPN Type 3(IMET)路由构建

随后执行 VXLAN 封装:

  • VNI = 8000
  • Outer Src IP = 20.20.20.20
  • Outer Dst IP = 30.30.30.30
  • Inner Payload = 原始 IPv6 NS 报文

并将报文单播发送至 Leaf2。


阶段 2:Leaf2 接收 NS 报文(控制平面 & 数据平面并发收敛)

1️⃣ Leaf2 解封装并泛洪

  • Leaf2 收到 VXLAN 报文
  • 根据 VNI 8000 映射到 本地 BD300
  • 在 BD300 内执行泛洪
  • Serv3 收到 NS 报文

2️⃣ Leaf2 的两条"学习路径"

此时 Leaf2 几乎同时获得 Serv1 MAC 的两类信息:


🔹 路径 A:控制平面(BGP EVPN)

  • Leaf2 通过 BGP 收到:

    • EVPN Type 2(MAC-only)路由
  • 内容:

    • Serv1 MAC → VTEP 20.20.20.20
  • 这是 权威的控制平面信息


🔹 路径 B:数据平面(Flooding & Learning)

  • Leaf2 在解封装 NS 报文时:

    • 从 Inner Ethernet Header 中看到:

      • SMAC = Serv1
  • 尝试在 BD300 中学习:

    • Serv1 MAC → VXLAN 隧道口(20.20.20.20)

❓关键问题:最终采用哪一条 MAC 表项?

结论与 IPv4 场景完全一致:

EVPN 控制平面(Type 2)优先,覆盖数据平面学习结果

IPv6 ND 的引入 不会改变这一优先级规则


阶段 3:Neighbor Advertisement(NA)触发对称 MAC 学习与反向 EVPN 通告

1️⃣ Serv3 发送 Neighbor Advertisement(NA)

  • Serv3 构造 NA 报文:

    • "172:16:1::20 is at fa:9e:65:74:00:10"
  • 报文特征:

    • SMAC = Serv3
    • DMAC = Serv1
    • ICMPv6 Type 136(NA)
  • 这是一个 标准二层单播帧


2️⃣ Leaf2 入站处理:本地 MAC 学习

  • Leaf2 在接入口收到 NA 报文

  • BD300 的 MAC 表中学习:

    • Serv3 MAC → 本地接入接口

3️⃣ Leaf2 触发 EVPN Type 2(MAC-only)路由生成

由于:

  • BD300 绑定 L2VNI 8000
  • EVPN 已启用

👉 Leaf2 生成 EVPN Type 2(MAC-only)路由

"MAC Serv3 属于 L2VNI 8000,对应的 VTEP 是 30.30.30.30"

并通告给 Leaf1。


4️⃣ Leaf2 单播 VXLAN 转发 NA 报文

  • Leaf2 查 BD300 / EVPN 表

  • 命中:

    • Serv1 MAC → VTEP 20.20.20.20

执行 VXLAN 封装:

  • VNI = 8000
  • Outer Src IP = 30.30.30.30
  • Outer Dst IP = 20.20.20.20
bash 复制代码
#  Leaf2 单播 VXLAN 转发 NA 报文
Frame 17: Packet, 136 bytes on wire (1088 bits), 136 bytes captured (1088 bits)
Ethernet II, Src: fa:e8:d2:bf:00:12, Dst: fa:e8:d2:bf:00:22
Internet Protocol Version 4, Src: 30.30.30.30, Dst: 20.20.20.20 # Leaf2 -> Leaf1
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
    Total Length: 122
    Identification: 0x0000 (0)
    000. .... = Flags: 0x0
    ...0 0000 0000 0000 = Fragment Offset: 0
    Time to Live: 253
    Protocol: UDP (17)
    Header Checksum: 0x590f [validation disabled]
    [Header checksum status: Unverified]
    Source Address: 30.30.30.30
    Destination Address: 20.20.20.20
    [Stream index: 1]
User Datagram Protocol, Src Port: 4789, Dst Port: 4789
    Source Port: 4789
    Destination Port: 4789
    Length: 102
    Checksum: 0x0000 [zero-value ignored]
    [Stream index: 0]
    [Stream Packet Number: 2]
    [Timestamps]
    UDP payload (94 bytes)
Virtual eXtensible Local Area Network
    Flags: 0x0800, VXLAN Network ID (VNI)
    Group Policy ID: 0
    VXLAN Network Identifier (VNI): 8000
    Reserved: 0
Ethernet II, Src: fa:9e:65:74:00:10, Dst: 40:3f:ab:de:4d:11 # Serv3 -> Serv1 MAC Address
    Destination: 40:3f:ab:de:4d:11
    Source: fa:9e:65:74:00:10
    Type: IPv6 (0x86dd)
    [Stream index: 6]
Internet Protocol Version 6, Src: 172:16:1::20, Dst: 172:16:1::10
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 32
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: 172:16:1::20
    Destination Address: 172:16:1::10
    [Stream index: 1]
Internet Control Message Protocol v6
    Type: Neighbor Advertisement (136)
    Code: 0
    Checksum: 0xb095 [correct]
    [Checksum Status: Good]
    Flags: 0x60000000, Solicited, Override
    Target Address: 172:16:1::20
    ICMPv6 Option (Target link-layer address : fa:9e:65:74:00:10)
        Type: Target link-layer address (2)
        Length: 1 (8 bytes)
        Link-layer address: fa:9e:65:74:00:10

5️⃣ Leaf1 解封装并完成闭环

  • Leaf1 解封装 VXLAN

  • 根据 VNI 映射到 BD100

  • 转发 NA 报文给 Serv1

  • 同时确认:

    • Serv3 MAC → VTEP 30.30.30.30

✅ IPv6 场景一完成后的全网状态

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)

场景一(IPv6)总结
  • IPv6 ND ≠ 新机制

    • 只是 ARP 的 IPv6 表现形式
  • L2VNI 定义逻辑广播域

    • 与 IPv4 完全一致
  • EVPN Type 3

    • 决定 NS / NA 的泛洪范围
  • EVPN Type 2(MAC-only)

    • 仍然是二层单播转发的权威来源
  • IPv6 的引入

    • 没有改变 EVPN 的控制平面哲学
    • 只是验证了其协议无关性

场景二(IPv6):同 Leaf 跨子网三层互通

Intra-Leaf Inter-Subnet Routing over EVPN (IPv6)

流量路径

Serv1 (172:16:1::10) → Serv2 (10:10:10::10)

通信特征
  • 源目地址位于 不同 IPv6 前缀
  • 均接入在 同一台 Leaf(Leaf1)
  • 通信起点仍然是 二层 → 三层的过渡过程
  • 会触发 NDP(默认网关与目标主机的邻居解析)
  • 会触发 EVPN Type 2(MAC + IPv6)路由生成
  • 不会触发 VXLAN 封装

👉 IPv6 的三层通信同样必须先完成"主机 → 网关"的二层解析

只不过这个过程由 NDP(Neighbor Discovery Protocol) 完成,而不是 ARP。


阶段 1:Serv1 解析 IPv6 默认网关的 MAC(三层通信的真实起点)

这是一个 IPv6 场景下同样不可跳过的前置阶段


1️⃣ Serv1 发送 Neighbor Solicitation(NS)

  • Serv1 判断目标地址 10:10:10::10 不在本地前缀
  • 需要将报文交给默认网关 172:16:1::1
  • 但本地 Neighbor Cache 中尚无该条目

于是 Serv1 发送 NDP Neighbor Solicitation

  • 报文语义:

"Who has 172:16:1::1? Tell 172:16:1::10"

  • 报文特征:

    • SMAC = Serv1
    • DMAC = Solicited-Node Multicast
    • SIP = 172:16:1::10
    • DIP = FF02::1:FFxx:xxxx
  • 本质仍然是二层泛洪语义(IPv6 多播)


2️⃣ Leaf1 接收 NS(命中 Anycast Gateway)

  • Leaf1 在 VLAN 10 / BD100 收到 NS

  • 发现目标 IPv6 地址 172:16:1::1 是:

    • 本地配置的 Anycast Gateway IPv6 地址

Leaf1 的行为是:

  • 不会泛洪
  • 直接本地应答

3️⃣ Leaf1 回复 Neighbor Advertisement(NA)

  • Leaf1 构造 NA 报文

    • "172:16:1::1 is at Anycast GW MAC"
  • 单播返回给 Serv1

bash 复制代码
# Leaf1 回复 Neighbor Advertisement(NA)
Frame 5: Packet, 90 bytes on wire (720 bits), 90 bytes captured (720 bits)
Ethernet II, Src: 00:01:00:01:00:01, Dst: 40:3f:ab:de:4d:11
802.1Q Virtual LAN, PRI: 6, DEI: 0, ID: 10
Internet Protocol Version 6, Src: 172:16:1::1, Dst: 172:16:1::10
Internet Control Message Protocol v6
    Type: Neighbor Advertisement (136)
    Code: 0
    Checksum: 0x90f3 [correct]
    [Checksum Status: Good]
    Flags: 0xe0000000, Router, Solicited, Override
        1... .... .... .... .... .... .... .... = Router: Set
        .1.. .... .... .... .... .... .... .... = Solicited: Set
        ..1. .... .... .... .... .... .... .... = Override: Set
        ...0 0000 0000 0000 0000 0000 0000 0000 = Reserved: 0
    Target Address: 172:16:1::1
    ICMPv6 Option (Target link-layer address : 00:01:00:01:00:01)
        Type: Target link-layer address (2)
        Length: 1 (8 bytes)
        Link-layer address: 00:01:00:01:00:01

🔑 关键点:EVPN Type 2(MAC + IPv6)的生成时刻

就在 Leaf1 收到 Serv1 发来的 NS 的这一刻,Leaf1 同时完成了三件事:


✅ ① 本地 MAC 学习(数据平面)

  • BD100 的 MAC 表中学习:

    • Serv1 MAC → 本地接入接口

✅ ② IPv6 Neighbor Cache 学习(IP → MAC)

  • VBDIF100(IPv6 三层接口) 中记录:

    • 172:16:1::10 → Serv1 MAC
bash 复制代码
# IPv6 Neighbor Cache 学习(IP → MAC)
[Leaf1]dis ipv6 neighbors 172:16:1::10
-----------------------------------------------------------------------------
IPv6 Address : 172:16:1::10                                                     
Link-layer   : 403f-abde-4d11                     State     : REACH             
Interface    : GE1/0/2.1                          Age       : 0                 
VLAN         : 10                                 CEVLAN    : -                 
VPN name     : vpn1                               Is Router : FALSE             
Secure FLAG  : UN-SECURE                          Nickname  : -                 
Source IP    : -                                                                
Destination IP: -                                                               
VNI          : -                                  BD        : 100               

-----------------------------------------------------------------------------
Total: 1        Dynamic: 1      Static: 0       Remote: 0      
[Leaf1]

✅ ③ 触发 EVPN Type 2(MAC + IPv6)路由生成(控制平面)

由于:

  • BD100 绑定 L2VNI 8000
  • VRF vpn1 绑定 L3VNI 100
  • 已开启 IPv6 Host Collect / ND 同步

👉 Leaf1 生成一条 EVPN Type 2(MAC + IPv6)路由

"主机 172:16:1::10 / MAC Serv1

位于 L2VNI 8000 / L3VNI 100,

对应的 VTEP 是 20.20.20.20"

并通过 BGP EVPN 通告给其他 Leaf。

也同时生成一条EVPN Type 2 MAC路由。

📌 与 IPv4 完全一致的结论

  • 是否跨 Leaf ❌ 无关
  • 是否使用 VXLAN ❌ 无关
  • 只与 Leaf 是否首次完整感知到主机 MAC / IPv6 地址有关
bash 复制代码
# Leaf1 生成一条 EVPN Type 2(MAC + IPv6)路由,也同时生成一条EVPN Type 2 MAC路由。
Frame 12: Packet, 313 bytes on wire (2504 bits), 313 bytes captured (2504 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: 54133, Dst Port: 179, Seq: 1, Ack: 1, Len: 259
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 147
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 124
    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: 40
            Carried extended communities: (5 communities)
                Route Target: 100:10 [Transitive 2-Octet AS-Specific]
                Route Target: 200:10 [Transitive 2-Octet AS-Specific]
                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
                ARP/ND: 0x0200 0x0000 0x0000 [Transitive EVPN]
                    Type: Transitive EVPN (0x06)
                        0... .... = IANA Authority: Allocated on First Come First Serve Basis
                        .0.. .... = Transitive across ASes: Transitive
                    Subtype (EVPN): ARP/ND (0x08)
                    Raw Value: 0x0200 0x0000 0x0000
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
            Type Code: MP_REACH_NLRI (14)
            Length: 63
            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: MAC Advertisement Route
                    Route Type: MAC Advertisement Route (2)
                    Length: 52
                    Route Distinguisher: 0000001400000001 (20:1)
                    ESI: 00: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: 128
                    IPv6 address: 172:16:1::10
                    VNI: 8000
                    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
        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
                    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

阶段 2:Serv1 发送 ICMPv6 Echo Request
  • Serv1 已获得:

    • 网关 IPv6 → MAC 映射
  • 正式发送 ICMPv6 Echo Request:

报文特征:

  • SMAC = Serv1
  • DMAC = Anycast Gateway MAC
  • SIP = 172:16:1::10
  • DIP = 10:10:10::10
  • Next Header = ICMPv6
bash 复制代码
# Serv1 发送 ICMPv6 Echo Request
Frame 7: Packet, 122 bytes on wire (976 bits), 122 bytes captured (976 bits)
Ethernet II, Src: 40:3f:ab:de:4d:11, Dst: 00:01:00:01:00:01
802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 10
Internet Protocol Version 6, Src: 172:16:1::10, Dst: 10:10:10::10
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
    .... 1101 1000 0010 1011 0000 = Flow Label: 0xd82b0
    Payload Length: 64
    Next Header: ICMPv6 (58)
    Hop Limit: 64
    Source Address: 172:16:1::10
    Destination Address: 10:10:10::10
    [Stream index: 4]
Internet Control Message Protocol v6
    Type: Echo (ping) request (128)
    Code: 0
    Checksum: 0x3e9a [correct]
    [Checksum Status: Good]
    Identifier: 0x0003
    Sequence: 1
    [No response seen] # 第一个ping包通常会timeout,因为目的网段的网关还需要解析目的地址的mac.
    Timestamp from Echo data: Jan 19, 2026 05:52:06.293896000 中国标准时间
    [Timestamp from Echo data (relative): 863.845000 milliseconds]
HiPerConTracer Trace Service
    Magic Number: 0x10111213
    Send TTL: 20
    Round: 21
    Checksum Tweak: 0x1617
    Send Time Stamp: Oct  8, 2031 18:37:15.066146335 UTC

阶段 3:Leaf1 发现 Serv2 为本地直连主机,但尚未知其 MAC

1️⃣ Leaf1 路由查表:确认 Serv2 为本地直连

  • Leaf1 在 VRF vpn1(IPv6 RIB) 中查找:
text 复制代码
10:10:10::10/128  Direct  VBDIF200

Leaf1 已明确:

  • Serv2 位于 本地 Leaf
  • 不需要 VXLAN
  • 下一跳为 VBDIF200

❗关键问题:Leaf1 是否已经知道 Serv2 的 MAC?

答案:不一定。

首次通信时:

  • 已知:

    • IPv6 地址直连
  • 但未知:

    • 10:10:10::10 → MAC

2️⃣ Leaf1 发送 Neighbor Solicitation(查询 Serv2 MAC)

  • Leaf1 作为 IPv6 网关
  • 在 VLAN 20 / BD200 中发送 NS:

"Who has 10:10:10::10? Tell 10:10:10::1"

  • 报文特征:

    • SMAC = Anycast Gateway MAC
    • DMAC = Solicited-Node Multicast
    • SIP = 10:10:10::1

📌 这是 Leaf 作为三层网关主动发起的 NDP

bash 复制代码
# Leaf1 发送 Neighbor Solicitation(查询 Serv2 MAC)
Frame 8: Packet, 90 bytes on wire (720 bits), 90 bytes captured (720 bits)
Ethernet II, Src: 00:02:00:02:00:02, Dst: 33:33:ff:00:00:10
802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 20
Internet Protocol Version 6, Src: 10:10:10::1, Dst: ff02::1:ff00:10
    0110 .... = Version: 6
    .... 1100 0000 .... .... .... .... .... = Traffic Class: 0xc0 (DSCP: CS6, ECN: Not-ECT)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 32
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: 10:10:10::1
    Destination Address: ff02::1:ff00:10
    [Stream index: 5]
Internet Control Message Protocol v6
    Type: Neighbor Solicitation (135)
    Code: 0
    Checksum: 0x7918 [correct]
    [Checksum Status: Good]
    Reserved: 00000000
    Target Address: 10:10:10::10
    ICMPv6 Option (Source link-layer address : 00:02:00:02:00:02)
        Type: Source link-layer address (1)
        Length: 1 (8 bytes)
        Link-layer address: 00:02:00:02:00:02

3️⃣ Serv2 返回 Neighbor Advertisement

  • Serv2 回复 NA:

    • "10:10:10::10 is at "
  • 单播返回 Leaf1

bash 复制代码
#  Serv2 返回 Neighbor Advertisement
Frame 9: Packet, 90 bytes on wire (720 bits), 90 bytes captured (720 bits)
Ethernet II, Src: 76:4e:c0:14:7d:7a, Dst: 00:02:00:02:00:02
802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 20
Internet Protocol Version 6, Src: 10:10:10::10, Dst: 10:10:10::1
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 32
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: 10:10:10::10
    Destination Address: 10:10:10::1
    [Stream index: 6]
Internet Control Message Protocol v6
    Type: Neighbor Advertisement (136)
    Code: 0
    Checksum: 0x6115 [correct]
    [Checksum Status: Good]
    Flags: 0x60000000, Solicited, Override
        0... .... .... .... .... .... .... .... = Router: Not set
        .1.. .... .... .... .... .... .... .... = Solicited: Set
        ..1. .... .... .... .... .... .... .... = Override: Set
        ...0 0000 0000 0000 0000 0000 0000 0000 = Reserved: 0
    Target Address: 10:10:10::10
    ICMPv6 Option (Target link-layer address : 76:4e:c0:14:7d:7a)
        Type: Target link-layer address (2)
        Length: 1 (8 bytes)
        Link-layer address: 76:4e:c0:14:7d:7a

4️⃣ Leaf1 完成本地 IPv6 对称学习

Leaf1 在收到 NA 后,同时完成:

✅ MAC 表学习

  • BD200:

    • Serv2 MAC → 本地接口

✅ IPv6 Neighbor Cache

  • VBDIF200:

    • 10:10:10::10 → Serv2 MAC
bash 复制代码
# IPv6 Neighbor Cache
[Leaf1]dis ipv6 neighbors 10:10:10::10
-----------------------------------------------------------------------------
IPv6 Address : 10:10:10::10                                                     
Link-layer   : 764e-c014-7d7a                     State     : REACH             
Interface    : GE1/0/2.2                          Age       : 0                 
VLAN         : 20                                 CEVLAN    : -                 
VPN name     : vpn1                               Is Router : FALSE             
Secure FLAG  : UN-SECURE                          Nickname  : -                 
Source IP    : -                                                                
Destination IP: -                                                               
VNI          : -                                  BD        : 200               

-----------------------------------------------------------------------------
Total: 1        Dynamic: 1      Static: 0       Remote: 0      

🔔 是否触发 EVPN Type 2(MAC + IPv6)?

答案:一定会。

由于:

  • BD200 绑定 L2VNI 9000
  • VRF vpn1 绑定 L3VNI 100

👉 Leaf1 同样会生成:

  • EVPN Type 2(MAC + IPv6)路由

    • 10:10:10::10 / MAC Serv2
    • Next-hop VTEP = 20.20.20.20

并向其他 Leaf 通告。

📌 即使 Serv1 与 Serv2 在同一台 Leaf 上

EVPN 控制平面依然要保持"全网可达的一致认知"


阶段 4:Leaf1 完成真正的三层转发

至此:

  • Serv1 → 网关:网关MAC已解析
  • 网关 → Serv2:Serv2 MAC已解析

Leaf1 执行真正的 IPv6 三层转发:

  • 重写二层 MAC
  • Hop Limit -- 1
  • ICMPv6 Echo Request 转发给 Serv2

场景二(IPv6)总结

IPv6 并没有改变 EVPN 的收敛哲学,只是更换了"触发工具"。

  • IPv6 三层通信 ≠ 不需要二层解析

  • NDP(NS / NA):

    • 在 IPv6 中承担了 ARP 的角色
  • 每一次主机 MAC + IPv6 的首次完整识别

    • 都会触发 EVPN Type 2(MAC + IPv6)
  • 是否 VXLAN 封装

    • 只取决于下一跳是否为远端 VTEP
  • EVPN 控制平面

    • 依然比数据平面更早收敛,为未来跨 Leaf 流量提前铺路

场景三(IPv6):跨 Leaf + 跨子网三层互通

Inter-Leaf Inter-Subnet Routing over EVPN VXLAN (IPv6, Symmetric IRB)

流量路径

Serv1 → Serv4

  • Serv1172:16:1::10(Leaf1)
  • Serv410:10:10::20(Leaf2)

通信特征
  • 源目 IPv6 地址位于 不同前缀
  • 分别接入在 不同 Leaf
  • 每台 Leaf 均部署 Anycast IPv6 Gateway
  • 使用 EVPN VXLAN + Symmetric IRB
  • 首次通信时,控制平面信息尚未完备
  • 会发生一次跨 Leaf 的 NDP(NS/NA)解析
  • 邻居收敛完成后,后续流量进入 确定性 IPv6 单播转发

阶段 1:Serv1 发起跨前缀通信(主机侧行为)

Serv1 判断目标 IPv6 地址 10:10:10::20

  • 不属于本地前缀 172:16:1::/64
  • 默认网关为 172:16:1::1

由于这是一次全新通信

  • Serv1 的 Neighbor Cache 中尚无:

    • 172:16:1::1 → MAC

因此 Serv1 发送 Neighbor Solicitation(NS)

text 复制代码
Who has 172:16:1::1?
Tell 172:16:1::10

Leaf1 作为 Anycast IPv6 Gateway

  • 本地应答 Neighbor Advertisement(NA)

  • 并在此过程中完成:

    • Serv1 的 MAC / IPv6 学习
    • 触发 EVPN Type 2(MAC + IPv6,Serv1)

📌 该机制与 IPv4 场景二 / 场景三中的

"主机 → 网关 NDP"完全等价,此处不再展开。


阶段 2:Leaf1 查 IPv6 路由,确认目标前缀为"直连子网"

Serv1 随后发送 ICMPv6 Echo Request:

text 复制代码
SIP = 172:16:1::10
DIP = 10:10:10::20
DMAC = Anycast Gateway MAC

Leaf1 收到报文后:

1️⃣ 进入 VRF vpn1 的 IPv6 转发表

2️⃣ 查找目的地址 10:10:10::20

命中一条 直连前缀路由

text 复制代码
10:10:10::/64  Direct  VBDIF200

此时 Leaf1 的判断是:

  • 目标前缀 10:10:10::/64本地直连子网
  • 默认网关地址为 10:10:10::1
  • 但尚未知 Serv4 的 MAC

阶段 3:Leaf1 发起 NDP,请求解析远端 Serv4 的 MAC

这是 IPv6 场景中最关键、也最容易被忽略的一步

由于:

  • Leaf1 需要把报文交付给 10:10:10::20

  • 但 Neighbor Cache 中尚无:

    • 10:10:10::20 → MAC

👉 Leaf1 必须主动发送 Neighbor Solicitation

text 复制代码
Who has 10:10:10::20?
Tell 10:10:10::1

这个 NS 报文的命运

  • 该 NS 属于:

    • BD200 / L2VNI(10:10:10::/64 所在广播域)
  • Leaf1 查找该 L2VNI 的泛洪范围

  • 依据 EVPN Type 3(IMET)

  • VXLAN L2VNI 方式:

    • 将 NS 报文发送至 Leaf2

📌 注意

  • 此阶段:

    • 不是 L3VNI
    • 不是单播
  • 而是一轮标准的:
    跨 Leaf 的 IPv6 二层邻居发现泛洪

bash 复制代码
# Leaf1 发起 NDP,请求解析远端 Serv4 的 MAC
Frame 20: Packet, 136 bytes on wire (1088 bits), 136 bytes captured (1088 bits)
Ethernet II, Src: fa:e8:d2:bf:00:22, Dst: fa:e8:d2:bf:00:12
Internet Protocol Version 4, Src: 20.20.20.20, Dst: 30.30.30.30
User Datagram Protocol, Src Port: 4789, Dst Port: 4789
Virtual eXtensible Local Area Network
    Flags: 0x0800, VXLAN Network ID (VNI)
    Group Policy ID: 0
    VXLAN Network Identifier (VNI): 9000
    Reserved: 0
Ethernet II, Src: 00:02:00:02:00:02, Dst: 33:33:ff:00:00:20
Internet Protocol Version 6, Src: 10:10:10::1, Dst: ff02::1:ff00:20
    0110 .... = Version: 6
    .... 1100 0000 .... .... .... .... .... = Traffic Class: 0xc0 (DSCP: CS6, ECN: Not-ECT)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 32
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: 10:10:10::1
    Destination Address: ff02::1:ff00:20
    [Stream index: 2]
Internet Control Message Protocol v6
    Type: Neighbor Solicitation (135)
    Code: 0
    Checksum: 0x78f8 [correct]
    [Checksum Status: Good]
    Reserved: 00000000
    Target Address: 10:10:10::20
    ICMPv6 Option (Source link-layer address : 00:02:00:02:00:02)
        Type: Source link-layer address (1)
        Length: 1 (8 bytes)
        Link-layer address: 00:02:00:02:00:02

阶段 4:Leaf2 接收 NS,请求到达 Serv4

1️⃣ Leaf2 接收 VXLAN 报文

2️⃣ 根据 L2VNI 映射到本地 BD

3️⃣ 在 BD 内泛洪 NS

4️⃣ Serv4 收到 Neighbor Solicitation:

text 复制代码
Who has 10:10:10::20?

阶段 5:Serv4 回复 NA,触发 Leaf2 学习与 EVPN 通告

Serv4 返回 Neighbor Advertisement(NA) (单播),由Leaf2的网关接收和处理,注意不是Leaf1的网关,这也是分布式网关的意义之一:

text 复制代码
10:10:10::20 is at <Serv4 MAC>

Leaf2 在这一刻完成三件关键事情:


✅ ① 本地 MAC 学习(数据平面)

  • 在 BD200 中学习:

    • Serv4 MAC → 本地接入接口

同时触发 EVPN Type 2 的生成条件。


✅ ② IPv6 Neighbor Cache 学习(IP → MAC)

  • 在 Anycast Gateway 接口 10:10:10::1

    • 学习 10:10:10::20 → Serv4 MAC

✅ ③ 触发 EVPN Type 2(MAC + IPv6)路由生成

由于:

  • BD 绑定 L2VNI
  • VRF 绑定 L3VNI
  • 已开启 IPv6 Host Collect / ND 同步

👉 Leaf2 生成一条 EVPN Type 2(MAC + IPv6)路由

text 复制代码
10:10:10::20 / MAC Serv4
Next-hop VTEP = 30.30.30.30

并通过 BGP EVPN 通告给 Leaf1。

📌 关键点

  • 该 Type 2 路由:

    • 一定由 首次真实接入该主机的 Leaf(Leaf2) 产生
    • 且一定发生在 NDP 完整收敛之后
bash 复制代码
# Leaf2 生成EVPN Type 2(MAC + IPv6)路由和MAC路由, 并通过 **BGP EVPN** 通告给 Leaf1。
Frame 21: Packet, 341 bytes on wire (2728 bits), 341 bytes captured (2728 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: 54133, Seq: 438, Ack: 396, Len: 287
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
        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 - 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: 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: 0
                    IP Address: NOT INCLUDED
                    VNI: 9000
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 161
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 138
    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
        Path Attribute - EXTENDED_COMMUNITIES
            Flags: 0xc0, Optional, Transitive, Complete
            Type Code: EXTENDED_COMMUNITIES (16)
            Length: 40
            Carried extended communities: (5 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]
                ARP/ND: 0x0200 0x0000 0x0000 [Transitive EVPN]
                    Type: Transitive EVPN (0x06)
                    Subtype (EVPN): ARP/ND (0x08)
                    Raw Value: 0x0200 0x0000 0x0000
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
            Type Code: MP_REACH_NLRI (14)
            Length: 63
            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: 52
                    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: 128
                    IPv6 address: 10:10:10::20
                    VNI: 9000
                    VNI: 100

阶段 6:Leaf1 收到 Type 2(MAC/IPv6),通信进入确定性阶段

Leaf1 通过 BGP EVPN 收到:

text 复制代码
10:10:10::20/128 → VTEP 30.30.30.30

此时:

  • Leaf1 已完整掌握 Serv4 的位置

  • IPv6 转发表中新增:

    • 一条 EVPN 学到的 IPv6 主机路由
bash 复制代码
# Leaf1 已完整掌握 Serv4 的位置
[Leaf1]dis ipv6 routing-table vpn-instance vpn1
Route Flags: R - relay, D - download to fib, T - to vpn-instance, B - black hole route
------------------------------------------------------------------------------
Routing Table : vpn1
         Destinations : 8        Routes : 8         

...
Destination  : 10:10:10::20                            PrefixLength : 128
NextHop      : ::FFFF:30.30.30.30                      Preference   : 255
Cost         : 0                                       Protocol     : IBGP
RelayNextHop : ::                                      TunnelID     : 0x0000000027f0000001
Interface    : VXLAN                                   Flags        : RD

阶段 7:后续 ICMPv6 报文基于 EVPN 主机路由转发

后续,Leaf1 再次收到来自 Serv1 的 ICMPv6 Echo Request 时:

  • 查 IPv6 路由:

    • 命中 10:10:10::20/128(EVPN)
  • 判断:

    • 下一跳为 远端 VTEP(Leaf2)

Leaf1 执行 VXLAN 封装:

text 复制代码
VNI = L3VNI 100
Outer Src IP = 20.20.20.20
Outer Dst IP = 30.30.30.30
Inner Payload = IPv6 Packet

并将报文单播发送给 Leaf2。

bash 复制代码
# Serv1 的 ICMPv6 Echo Request,Leaf1 执行 VXLAN 封装,将报文单播发送给 Leaf2
Frame 23: Packet, 168 bytes on wire (1344 bits), 168 bytes captured (1344 bits)
Ethernet II, Src: fa:e8:d2:bf:00:22, Dst: fa:e8:d2:bf:00:12
Internet Protocol Version 4, Src: 20.20.20.20, Dst: 30.30.30.30
User Datagram Protocol, Src Port: 4789, Dst Port: 4789
Virtual eXtensible Local Area Network
    Flags: 0x0800, VXLAN Network ID (VNI)
    Group Policy ID: 0
    VXLAN Network Identifier (VNI): 100
    Reserved: 0
Ethernet II, Src: 00:01:00:01:00:01, Dst: fa:e8:d2:bf:00:31
    Destination: fa:e8:d2:bf:00:31 #  EVPN Router's MAC: fa:e8:d2:bf:00:31,Type2 mac/ip路由通过携带过来的
    Source: 00:01:00:01:00:01
    Type: IPv6 (0x86dd)
    [Stream index: 7]
Internet Protocol Version 6, Src: 172:16:1::10, Dst: 10:10:10::20
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
    .... 0000 1001 1110 0101 1101 = Flow Label: 0x09e5d
    Payload Length: 64
    Next Header: ICMPv6 (58)
    Hop Limit: 63
    Source Address: 172:16:1::10
    Destination Address: 10:10:10::20
    [Stream index: 3]
Internet Control Message Protocol v6
    Type: Echo (ping) request (128)
    Code: 0
    Checksum: 0x8da8 [correct]
    [Checksum Status: Good]
    Identifier: 0x0004
    Sequence: 2
    [Response In: 25]
    Timestamp from Echo data: Jan 19, 2026 06:28:38.807713000 中国标准时间
    [Timestamp from Echo data (relative): 8.903000 milliseconds]
HiPerConTracer Trace Service

Leaf2 解封装后:

  • 查本地直连 IPv6 路由
  • 重写二层头
  • 将 ICMPv6 报文交付给 Serv4

场景三(IPv6)总结

这个 IPv6 场景揭示了一个与 IPv4 完全一致,但常被忽视的事实

1️⃣ 跨 Leaf + 跨前缀通信,第一次一定是"非确定性的"

  • 在 EVPN IPv6 主机路由建立前:

    • Leaf 必须依赖 NDP
    • NDP 可能跨 Leaf 泛洪(L2VNI + Type 3)

2️⃣ EVPN Type 2(MAC + IPv6)不是"先天存在的"

  • 它一定由:

    • 首次真实接入该主机的 Leaf
    • NDP 收敛完成后(就是产生Neighbor cache,类似ARP cache后)
    • 才生成并通告

3️⃣ 真正的 VXLAN L3 单播,是"后半段故事"

  • 邻居发现阶段

    • L2VNI + Type 3(IMET)
  • 业务转发阶段

    • L3VNI + Type 2(MAC + IPv6)(意思就是数据平面根据产生的主机路由进行转发)

4️⃣ Symmetric IRB 的真正价值(IPv6 同样成立)

它允许:

  • 初始阶段依赖泛洪(NDP)
  • 一旦主机被感知,全网立刻切换为:
    高速、确定、无泛洪的 IPv6 三层单播模式

场景四(IPv6):南北向流量互通

North--South Traffic via Border Leaf(IPv6)

流量路径

Serv1 → R1

  • Serv1172:16:1::10/64
    (Tenant 内部 IPv6 主机)
  • R1182:1:1::2/64
    (外部 IPv6 网络 / Internet)

通信特征(IPv6 视角)
  • 源 IPv6 位于 EVPN VXLAN Tenant
  • 目的 IPv6 位于 VXLAN Fabric 之外
  • 流量必须经过 Border Leaf(BL1)
  • 控制平面依赖 EVPN Type 5(IPv6 Prefix Route)
  • 数据平面为 VXLAN L3 转发
  • 属于典型 IPv6 南北向流量模型

📌 IPv6 语义提醒

  • IPv6 无 ARP
  • 使用 NDP(NS / NA)
  • Type 5 可以承载 IPv6 前缀(/64、/48 等)

阶段 1:Border Leaf 生成并发布 IPv6 EVPN Type 5

南北向通信的真正起点 ,依然发生在业务流量出现之前

1️⃣ Border Leaf 学习外部 IPv6 路由

  • BL1 与外部路由器 R1 建立 IPv6 三层邻接
  • 从 R1 学习到外部 IPv6 前缀,例如:
text 复制代码
182:1:1::/64

2️⃣ Border Leaf 将 IPv6 前缀注入 EVPN

在 BL1 的 VRF(vpn1)中配置:

text 复制代码
advertise l2vpn evpn

BL1 生成一条 EVPN Type 5(IPv6 Prefix Route)

text 复制代码
Prefix: 182:1:1::/64
L3VNI: 100
Next-hop VTEP: 40.40.40.40

并通过 BGP EVPN(经 Spine RR) 通告给所有 Leaf。

📌 Type 5 的本质(再次强调)

  • 不携带 MAC

  • 不关心二层邻居

  • 只解决一件事:

    "去往这个 IPv6 前缀,Overlay 的下一跳是谁"

bash 复制代码
# EVPN Type 5(IPv6 Prefix Route)
Frame 12: Packet, 272 bytes on wire (2176 bits), 272 bytes captured (2176 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: 54133, Seq: 20, Ack: 1, Len: 218
Border Gateway Protocol - UPDATE Message
    Marker: ffffffffffffffffffffffffffffffff
    Length: 218
    Type: UPDATE Message (2)
    Withdrawn Routes Length: 0
    Total Path Attribute Length: 195
    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]
                Encapsulation: VXLAN Encapsulation [Transitive Opaque]
                EVPN Router's MAC: Router's MAC: fa:e8:d2:bf:00:41 [Transitive EVPN]
        Path Attribute - MP_REACH_NLRI
            Flags: 0x90, Optional, Extended-Length, Non-transitive, Complete
            Type Code: MP_REACH_NLRI (14)
            Length: 129
            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: 58
                    Route Distinguisher: 0000019000000001 (400:1)
                    ESI: 00:00:00:00:00:00:00:00:00:00
                    Ethernet Tag ID: 0
                    IP prefix length: 128
                    IPv6 address: 182:1:1::1
                    IPv6 Gateway address: ::
                    VNI: 100
                EVPN NLRI: IP Prefix route
                    Route Type: IP Prefix route (5)
                    Length: 58
                    Route Distinguisher: 0000019000000001 (400:1)
                    ESI: 00:00:00:00:00:00:00:00:00:00
                    Ethernet Tag ID: 0
                    IP prefix length: 64
                    IPv6 address: 182:1:1::
                    IPv6 Gateway address: ::
                    VNI: 100

阶段 2:Leaf1 的初始状态(IPv6)

在 Serv1 发包之前,Leaf1 已具备:

  • 一条 EVPN Type 5(IPv6)路由
text 复制代码
182:1:1::/64 → VTEP 40.40.40.40

Leaf1 的认知是:

  • 目的前缀在 Fabric 外
  • 下一跳是 Border Leaf
  • 不需要知道 R1 的 MAC
  • 也不会触发任何 NDP

📌
Type 5 = 纯三层指引

IPv6 下这一点反而更加"干净"。

bash 复制代码
# 在 Serv1 发包之前,Leaf1 已具备相关EVPN Type 5(IPv6)路由
[Leaf1]dis ipv6 routing-table vpn-instance vpn1 182:1:1::
Route Flags: R - relay, D - download to fib, T - to vpn-instance, B - black hole route
------------------------------------------------------------------------------
Routing Table : vpn1
Summary Count : 1

Destination  : 182:1:1::                               PrefixLength : 64
NextHop      : ::FFFF:40.40.40.40                      Preference   : 255
Cost         : 0                                       Protocol     : IBGP
RelayNextHop : 0.0.0.0                                 TunnelID     : 0x0000000027f0000002
Interface    : VXLAN                                   Flags        : RD
[Leaf1]

阶段 3:Serv1 发起 IPv6 访问(主机视角)

Serv1 访问外部 IPv6 地址:

text 复制代码
182:1:1::2

主机行为:

  • 判断目标 IPv6 不在本地前缀 172:16:1::/64
  • 向默认网关 172:16:1::1 发送 Neighbor Solicitation
  • 学习到 Anycast Gateway MAC

Leaf1(Anycast Gateway):

  • 本地回应 Neighbor Advertisement

  • 学习 Serv1 的:

    • IPv6 地址
    • MAC 地址
  • 触发 EVPN Type 2(MAC + IPv6)

  • 也会触发 EVPN Type 2(MAC )

⚠️

Type 2 的生成机制在前文已经完整说明,这里不再展开。

随后 Serv1 发送 ICMPv6 Echo Request:

text 复制代码
SIP  = 172:16:1::10
DIP  = 182:1:1::2
DMAC = Anycast Gateway MAC

阶段 4:Leaf1 查 IPv6 路由,命中 EVPN Type 5

Leaf1 在 VRF vpn1 中进行 IPv6 查表:

text 复制代码
182:1:1::2

命中:

text 复制代码
182:1:1::/64  EVPN Type-5 → VTEP 40.40.40.40

Leaf1 得出结论:

  • 目标在 VXLAN Fabric 之外
  • Overlay 下一跳是 Border Leaf
  • 需要进行 VXLAN L3 封装

阶段 5:Leaf1 → Border Leaf 的 VXLAN L3 转发(IPv6)

Leaf1 执行 VXLAN 封装:

  • VNI = L3VNI 100
  • Outer Src IP = 20.20.20.20
  • Outer Dst IP = 40.40.40.40
  • Inner Payload = 原始 IPv6 报文

📌 注意

  • 不使用 L2VNI
  • 不携带目的主机 MAC
  • 这是一次 完全基于 Type 5 的三层 Overlay 转发

阶段 6:Border Leaf 解封装并转发至外部 IPv6 网络

Border Leaf 处理流程:

1️⃣ 接收 VXLAN 报文

2️⃣ 根据 L3VNI 100 映射到 VRF vpn1

3️⃣ 解封装得到原始 IPv6 报文:

text 复制代码
SIP = 172:16:1::10
DIP = 182:1:1::2

BL1 查 VRF IPv6 路由表:

  • 命中从 R1 学习到的外部前缀

  • 执行普通 IPv6 三层转发:

    • Hop Limit -- 1
    • 重写二层 MAC
  • 将报文发送给 R1


阶段 7:返回流量(External → Tenant,IPv6)

R1 回复 ICMPv6 Echo Reply:

text 复制代码
SIP = 182:1:1::2
DIP = 172:16:1::10

Border Leaf 的回程处理

  • BL1 查 VRF 路由:

    • 172:16:1::10/128
  • 该路由来源于:

    • EVPN Type 2(MAC + IPv6,Serv1)
bash 复制代码
[BL1]dis ipv6 routing-table vpn-instance vpn1 172:16:1::10
Route Flags: R - relay, D - download to fib, T - to vpn-instance, B - black hole route
------------------------------------------------------------------------------
Routing Table : vpn1
Summary Count : 1

Destination  : 172:16:1::10                            PrefixLength : 128
NextHop      : ::FFFF:20.20.20.20                      Preference   : 255
Cost         : 0                                       Protocol     : IBGP
RelayNextHop : 0.0.0.0                                 TunnelID     : 0x0000000027f0000002
Interface    : VXLAN                                   Flags        : RD
[BL1-bgp-6-vpn1]

于是 BL1:

  • 执行 VXLAN L3 封装:

    • VNI = 100
    • Outer Dst = 20.20.20.20
  • 将报文送回 Leaf1

Leaf1 解封装后:

  • 转发给 Serv1
  • 完成一次南北向通信闭环

场景四(IPv6)总结
  • 南北向流量,IPv6 与 IPv4 的核心机制完全一致

  • 区别仅在于:

    • ARP → NDP
    • IPv4 Prefix → IPv6 Prefix
  • Type 5 是 Tenant 走向外部世界的唯一"路标"

  • Border Leaf:

    • 向内是 EVPN Fabric 的一部分
    • 向外是标准 IPv6 路由器

到此为止(IPv6 视角):

  • 场景一 :二层桥接

    (EVPN Type 2 + Type 3,IPv6 仅作为二层承载,不参与转发决策)

  • 场景二 :同 Leaf 三层互通

    (EVPN Type 2:MAC + IPv6 /128 主机路由)

  • 场景三 :跨 Leaf 三层互通

    (EVPN Type 2 主机路由 + L3VNI Overlay 单播)

  • 场景四 :南北向流量互通

    (EVPN Type 5:IPv6 Prefix Route,纯三层引导)

👉 EVPN VXLAN 在 IPv6 场景下的核心转发与收敛行为,已完整呈现。

可以看到:

  • IPv6 并没有改变 EVPN 的设计哲学

  • 控制平面仍然围绕:

    • Type 2(主机可达性)
    • Type 3(二层泛洪控制)
    • Type 5(前缀级引导)
  • 变化的只是:

    • ARP → NDP
    • IPv4 地址 → IPv6 地址
    • 而不是 EVPN 的逻辑本身
相关推荐
爱宁~2 小时前
UnityShader学习笔记[二百九十九]UGUI中的Mask遮罩半透明Shader
笔记·学习
百***78753 小时前
【实操】一步API对接GPT-5.2全流程(多语言示例+高并发优化+避坑指南)
网络·gpt
科技块儿3 小时前
【场景:识别C2通信】评估出站IP是否为已知恶意地址,方法:IP离线库+威胁情报融合
网络·网络协议·tcp/ip
小陈phd3 小时前
langGraph从入门到精通(六)——基于 LangGraph 实现结构化输出与智能 Router 路由代理
android·网络·数据库
Ares-Wang4 小时前
网络》》IP组播
网络·网络协议·tcp/ip
sunlifenger4 小时前
上海兆越人员定位系统,多元技术赋能,精准守护工业安全
网络·人工智能·安全
独行soc4 小时前
2026年渗透测试面试题总结-3(题目+回答)
网络·python·安全·web安全·渗透测试
June bug4 小时前
【实习笔记】客户端基础技术
笔记·macos·cocoa
laplace01235 小时前
第八章 agent记忆与检索 下
数据库·人工智能·笔记·agent·rag