第174篇:EVPN 的 MAC/IP 路由通告
关键词
Type 2 路由、MAC/IP 通告、MAC 迁移、MAC 冻结、ARP 抑制、同步化、控制面学习
一、Type 2 路由详解
1.1 路由结构
Type 2 路由(MAC/IP Advertisement Route)是 EVPN 中最核心的路由类型:
NLRI for Type 2:
┌────────────────────────────────────────────┐
│ Route Distinguisher (RD) - 8 bytes │
│ Ethernet Tag ID - 4 bytes │
│ MAC Address Length - 1 byte │
│ MAC Address - 6 bytes │
│ IP Address Length - 1 byte │
│ IP Address - 0/4/16 bytes │
│ MPLS Label1 - 3 bytes │
│ MPLS Label2 - 3 bytes (optional) │
└────────────────────────────────────────────┘
关键字段说明:
| 字段 | 含义 | 说明 |
|---|---|---|
| RD | 路由标识符 | 使 MAC 地址全局唯一 |
| MAC Address | 客户 MAC 地址 | 6 字节 |
| IP Address | 关联的 IP 地址 | IPv4(4B) 或 IPv6(16B) |
| MPLS Label1 | 内层 VNI/VXLAN 标签 | 标识 EVI |
| MPLS Label2 | 第二标签(可选) | 用于 IRB 等场景 |
1.2 路由发布时机
PE 在以下事件触发时发布 Type 2 路由:
1. 新 MAC 学习(数据面 or DHCP/ARP 获取)
客户 CE1 发送帧 → PE1 学习到 MAC_A
→ PE1 发布 Type 2: MAC_A → IP(N/A or from ARP)
2. ARP/ND 解析
PE1 收到 CE1 的 ARP 请求/回复
→ 获取 MAC 和 IP 的绑定关系
→ 发布 Type 2: MAC_A → IP_A
3. MAC 迁移事件
发现 MAC_A 从不同接口出现
→ 可能有环路或 VM 迁移
→ 更新 Type 2 路由
4. 手工触发
refresh bgp evpn all
二、MAC 地址学习的过程
2.1 首次学习
PE1 初始状态:MAC-VRF 为空
CE1 向 CE2 发送第一帧(MAC_A → MAC_B):
│
▼
PE1:
① 从 AC 接口收到帧
② 数据面学习:MAC_A → AC1(入接口)
③ 查 MAC_B → 未找到
④ 触发 Type 3 IMET 泛洪(不是数据面泛洪)
⑤ 同时发布 Type 2: MAC_A → IP_A
│
▼
PE2 收到 Type 2 路由:
① 安装到 MAC-VRF: MAC_A → PE1(隧道转发)
② 不需要泛洪就能知道 MAC_A 的位置!
│
▼
CE2 回复(MAC_B → MAC_A):
① PE2 查 MAC-VRF: MAC_A → PE1
② 直接通过隧道发送到 PE1(单播,不泛洪)
③ PE2 学习 MAC_B 并发布 Type 2
2.2 控制面 vs 数据面学习
| 对比 | 数据面学习(VPLS) | 控制面学习(EVPN) |
|---|---|---|
| MAC 位置来源 | 数据面帧泛洪后的逆向学习 | MP-BGP Type 2 路由 |
| 收敛速度 | 慢 | 快(BGP 撤回 + 更新) |
| 泛洪需求 | 必要 | 仅首次未知 |
| ARP 学习 | 广播 ARP | ARP 抑制(Proxy) |
| MAC 迁移 | 依赖 MAC 表老化 | BGP 路由更新 + 序列号 |
三、MAC 迁移与 Mac Mobility
3.1 场景
VM 从 PE1 下迁移到 PE2 下:
┌─────────────┐
VM ─────┤ ESI-1 │
MAC=M │ PE1 │
IP=10.0 │ Type 2: M→PE1 │
└─────────────┘
│ 迁移
▼
┌─────────────┐
VM ─────┤ ESI-2 │
MAC=M │ PE2 │
IP=10.0 │ Type 2: M→PE2 │
└─────────────┘
3.2 迁移检测
PE2 学习到 MAC=M 后发布 Type 2 路由,PE1 收到后发现:
PE1 收到 PE2 的 Type 2 路由(MAC=M, Next-Hop=PE2):
① 检查自己的 MAC-VRF
② MAC=M 已存在(从自己本地学习)
③ 触发 MAC 迁移检测
EVPN 迁移序列号机制:
PE1 在自己发布的 Type 2 路由中携带序列号(Seq=0)
PE2 在迁移后的 Type 2 路由中携带序列号(Seq=1)
其他 PE 接收序列号更大的路由(更新转发表)
3.3 MAC 冻结(Mac Duplication Detection)
为防止 MAC 来回迁移导致的震荡,EVPN 支持MAC 冻结:
检测到 MAC=M 在短时间内多次迁移:
PE1 → PE2 → PE1 → PE2 → ...
触发 MAC 冻结条件(默认):
3 次/180 秒
处理:
冻结该 MAC 地址,暂时不接受关于 MAC=M 的新路由
日志告警,等待管理员介入
四、ARP 抑制
4.1 传统 ARP 问题
在没有 ARP 抑制的情况下:
CE1 (10.1.1.1) 需要 CE2 (10.1.1.2) 的 MAC 地址:
──▶ 广播 ARP Request(Who has 10.1.1.2?)
│
▼
PE1 通过 Type 3(IMET)复制给 PE2、PE3...
│
▼
CE2 回复 ARP Reply(10.1.1.2 is at MAC_B)
│
▼
CE1 学到 MAC_B
即使 CE1 刚收到 CE2 的 IPv6 数据包,ARP 还是需要广播...
全网范围内的大量 ARP 请求 → 巨大开销
4.2 EVPN ARP 抑制原理
EVPN 让 PE 充当 ARP Proxy:
CE1 发送 ARP Request(Who has 10.1.1.2?):
│
▼
PE1 收到:
① 查 EVPN Type 2 路由库中是否有 10.1.1.2 的条目
② 有!(PE2 发布过 Type 2: MAC_B, IP=10.1.1.2)
③ PE1 直接代替 CE2 回复 ARP Reply
④ 无需泛洪到骨干网!
│
▼
CE1 立即收到 ARP 回复,且只有本地流量
如果 PE1 没有 10.1.1.2 的信息 → 正常泛洪 ARP(触发 PE 学习)
4.3 ARP 抑制效果
| 场景 | 无抑制 | 有抑制 |
|---|---|---|
| ARP 请求次数 | 每次广播到全网 | 仅首次广播 |
| 带宽浪费 | 高 | 极低 |
| CE 响应延迟 | 高(跨网络) | 低(PE 直接回复) |
| 适用条件 | 无 | PE 需要有 MAC+IP 绑定 |
五、含 IP 的 Type 2 vs 不含 IP 的 Type 2
| 场景 | Type 2 包含 IP | Type 2 不包含 IP |
|---|---|---|
| 内容 | MAC + IP | 仅 MAC |
| 来源 | ARP/ND/DHCP Snooping | 数据面 MAC 学习 |
| ARP 抑制 | 支持 | 不支持 |
| 路由控制 | 更精确 | 较粗 |
最佳实践:在数据中心场景中,开启 ARP snooping 或 DHCP snooping,让 PE 能获取 MAC+IP 绑定,发布含 IP 的 Type 2 路由。
六、配置示例(华为)
6.1 基础 EVPN 配置
# PE1 配置
evpn-overlay enable # 使能 EVPN
#
bridge-domain 10 # 创建桥接域
vxlan vni 100 # VNI = 100
evpn # EVPN 模式
route-distinguisher 100:1
vpn-target 1:1 export-extcommunity
vpn-target 1:1 import-extcommunity
#
interface GigabitEthernet0/0/0.100
vlan-type dot1q 100
bridge-domain 10 # 绑定桥接域
#
bgp 100
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface LoopBack0
#
l2vpn-family evpn
peer 2.2.2.2 enable
peer 2.2.2.2 route-reflector-client
6.2 验证
# 查看 EVPN Type 2 路由
<PE1> display bgp evpn all routing-table
EVPN instance 10:
Route type: 2 (MAC/IP Advertisement)
RD: 100:1
MAC: 00e0-fc00-0001
IP: 10.1.1.1
VNI: 100
Next Hop: 2.2.2.2
Status: Established
# 查看 MAC-VRF 转发表
<PE1> display bridge-domain 10 mac-address
MAC Address Type Interface VNI
00e0-fc00-0001 Dynamic GE0/0/0.100 100
00e0-fc00-0002 Remote Peer 2.2.2.2 100
(VXLAN Tunnel)
七、总结
| 知识点 | 核心要点 |
|---|---|
| Type 2 路由 | 通告 MAC 地址和可选的 IP 地址 |
| 控制面学习 | 通过 MP-BGP 而非数据面泛洪学习 MAC |
| MAC 迁移 | 通过序列号机制检测和处理 MAC 移动 |
| MAC 冻结 | 防止 MAC 频繁迁移导致路由震荡 |
| ARP 抑制 | PE 作为 ARP Proxy,减少广播流量 |
| 含 IP 的 Type 2 | 支持 ARP 抑制,更精确的路由控制 |
八、思考
- EVPN Type 2 路由包含哪些关键字段?IP 地址字段为什么是可选的?
- EVPN 如何实现 MAC 迁移检测?序列号机制是如何工作的?
- MAC 冻结(MAC Duplication Detection)的作用是什么?
- ARP 抑制的原理是什么?它依赖于 EVPN 的哪项能力?
- 含 IP 的 Type 2 路由和不含 IP 的 Type 2 路由有什么区别?
下篇预告:第175篇《EVPN VXLAN 网关:集中式与分布式》——在 EVPN+VXLAN 网络中,如何实现不同子网之间的三层转发?集中式网关和分布式网关分别适用于什么场景。