第171篇:VPLS 点到多点二层 VPN 原理
关键词
VPLS、虚拟专用LAN服务、多点二层VPN、MAC 学习、泛洪、PW 全连接、水平分割
一、从 VPWS 到 VPLS
1.1 VPWS 的局限
VPWS/VLL 提供点到点的二层连接。如果需要将三个或更多站点连接成一个二层域:
VPWS 方案:两两连线
Site1 ───── Site2
Site1 ───── Site3
Site2 ───── Site3
需要 3 条 VPWS,N 个站点需要 N(N-1)/2 条
VPLS 方案:所有站点属于同一个二层域
Site1
│
Site2 ───── VPLS ───── Site3
│
Site4
只需要 1 个 VPLS 实例
1.2 什么是 VPLS
VPLS(Virtual Private LAN Service) 在 MPLS 骨干网上模拟一个虚拟的二层交换机:
- 所有站点属于同一个广播域
- 支持 MAC 地址学习
- 支持广播、未知单播和组播的泛洪
- 透明传输客户以太网帧
┌──────────────────────┐
│ VPLS 实例 │
│ (虚拟二层交换机) │
│ │
Site1────┤ ├────Site2
│ │
Site3────┤ ├────Site4
└──────────────────────┘
二、VPLS 的核心组件
2.1 VSI(Virtual Switching Instance)
VSI 是 PE 上 VPLS 的实例,相当于一台虚拟二层交换机:
PE1 上的 VSI:
VSI-VPLS-A MAC 地址表: MAC-A → AC1 MAC-B → PW-to-PE2 MAC-C → PW-to-PE3 本地 AC:GE0/0/0.100 远端的 PW: → PE2: PW-ID=100 → PE3: PW-ID=100
2.2 PW 全连接
VPLS 要求所有 PE 之间建立全网状(Full Mesh)的 PW:
PE1
/ \
/ \
PE2 ────── PE3
PW 数量:N(N-1)/2 = 3(N=3)
2.3 AC(Attachment Circuit)
AC 是 CE 接入 PE 的接口,与 VPWS 相同。
三、VPLS MAC 地址学习
3.1 学习过程
VPLS 的 MAC 地址学习遵循标准的以太网桥接原理:
初始状态:所有 PE 的 MAC 表为空
CE1 向 CE2 发送帧(源 MAC=MA, 目的 MAC=MB):
│
▼
PE1 收到:
① 学习:MAC MA → AC1(入接口)
② 查找 MAC MB → 未找到
③ 泛洪:向所有其他 PW(PE2, PE3)发送
④ 也向其他本地 AC 发送
│
▼
PE2 收到从 PW 来的帧:
① 学习:MAC MA → PW-to-PE1(从哪条 PW 来)
② 查找 MAC MB → 未找到
③ 向本地 AC 泛洪
│
▼
CE2 收到帧并回复(源 MAC=MB, 目的 MAC=MA)
│
▼
PE2 收到回复:
① 学习:MAC MB → AC2
② 查找 MAC MA → 已存在(PW-to-PE1)
③ 通过 PW 发送到 PE1(单播,不再泛洪)
│
▼
PE1 收到:
① 学习:MAC MB → PW-to-PE2
② 查找 MAC MA → AC1
③ 从 AC1 转发到 CE1
四、VPLS 环路避免
4.1 水平分割
VPLS 使用水平分割(Split Horizon)防止环路:
规则:
- 从 PW 收到的帧,不能转发到其他 PW
- 从 AC 收到的帧,可以转发到所有 PW 和其他 AC
- 从而避免 PW 之间的环路
PE1
/ \ ← 这些 PW 之间不走流量
/ \
PE2 ────── PE3
↑ 这些 PW 之间也不走流量
4.2 为什么需要水平分割
如果没有水平分割:
PE1 从 PW(PE2) 收到帧
→ 泛洪到所有其他接口
→ 包括 PW(PE3)
→ PE3 又从 PW(PE1) 收到
→ 再泛洪到 PW(PE2)
→ PE2 又从 PW(PE3) 收到
→ 再泛洪到 PW(PE1)
→ ... 无限循环!
4.3 为什么 STP 不是必需的
在 VPLS 中,PW 全连接 + 水平分割天然防止桥接环路,因此一般不需要运行 STP。
五、VPLS 的转发过程
5.1 已知单播转发
CE1 → CE2(MAC 表已学习):
PE1 查 MAC 表:
MAC MB → PW-to-PE2(不是 AC 接口)
→ Push 标签栈 {隧道标签, VC 标签}
→ 经 MPLS 骨干发送到 PE2
PE2:
→ Pop 标签栈 → 恢复客户以太网帧
→ 查 MAC 表 → AC2
→ 从 AC2 转发到 CE2
5.2 广播/未知单播/组播(BUM)转发
CE1 发送广播帧(目的 MAC = FF:FF:FF:FF:FF:FF):
PE1:
① 查 MAC 表 → 广播地址未学习
② 向所有 PW(PE2, PE3)复制发送
③ 向所有本地 AC 发送
PE2:
① 收到的广播帧来自 PW → 不再转发给其他 PW(水平分割)
② 向本地 AC 泛洪
PE3:
① 同一操作
5.3 流量类型总结
| 流量类型 | VPLS 处理 |
|---|---|
| 已知单播 | MAC 查表 → 定向到对应 PW 或 AC |
| 未知单播 | 泛洪到所有 PW 和 AC |
| 广播 | 泛洪到所有 PW 和 AC |
| 组播 | 泛洪(或优化:IGMP Snooping) |
六、VPLS 的配置示例(华为)
6.1 PE1 配置
# 创建 VSI 实例
vsi VPLS-A
pwsignal ldp # PW 信令为 LDP
vsi-id 100 # VSI ID(全局唯一)
peer 2.2.2.2 # PE2
peer 3.3.3.3 # PE3
pw-tag 100 # PW 标签
#
# 配置 AC 接口
interface GigabitEthernet0/0/0.100
vlan-type dot1q 100
l2 binding vsi VPLS-A # 绑定到 VSI
6.2 验证
# 查看 VSI 状态
<PE1> display vsi name VPLS-A
VSI Name : VPLS-A
VSI Index : 1
VSI State : Up
VSI Type : LDP
VSI ID : 100
VSI Description : -
PW Signaling : LDP
MAC Learning : Enable
MAC Limit : 16384
...
# 查看 MAC 地址表
<PE1> display vpls mac-address vsi VPLS-A
MAC Address VSI Name Type Interface State
00e0-fc00-0001 VPLS-A Dynamic GE0/0/0.100 Learned
00e0-fc00-0002 VPLS-A Dynamic PW(2.2.2.2) Learned
00e0-fc00-0003 VPLS-A Dynamic PW(3.3.3.3) Learned
七、VPLS 的局限
| 局限 | 说明 | 演进方案 |
|---|---|---|
| PW 全连接 | N 个 PE 需要 N(N-1)/2 条 PW | H-VPLS 分层架构 |
| MAC 表膨胀 | PE 需要学习所有客户 MAC | MAC 表限制、EVPN 控制面学习 |
| BUM 泛洪 | 广播/未知单播占带宽 | IGMP Snooping、EVPN 优化 |
| LDP 信令 | LDP 扩展性不如 BGP | BGP VPLS、EVPN |
| 无转发优化 | 不能精确控制路径 | EVPN + TI-LFA |
八、VPLS vs L3VPN vs VPWS
| 对比维度 | VPLS | L3VPN | VPWS/VLL |
|---|---|---|---|
| 网络层次 | 二层 | 三层 | 二层 |
| 连接类型 | 点到多点 | 点到多点 | 点到点 |
| MAC 学习 | PE 学习 MAC | 不需要 | 不需要 |
| 客户路由 | 不参与 | 参与(VRF) | 不参与 |
| 广播域 | 跨站点共享 | 站点隔离 | 仅两点共享 |
| 适用场景 | DCI、VM 迁移 | 企业 WAN | 专线、存储互联 |
九、总结
| 知识点 | 核心要点 |
|---|---|
| VPLS 本质 | MPLS 网络上的虚拟二层交换机 |
| PW 全连接 | 所有 PE 之间建立全网状 PW |
| MAC 学习 | 标准桥接学习(源 MAC + 入接口) |
| 水平分割 | PW 收到的帧不会转发到其他 PW |
| BUM 处理 | 广播/未知单播/组播泛洪 |
| 无需 STP | 水平分割 + 全连接天然防环 |
十、思考
- VPLS 和 VPWS 的主要区别是什么?
- VPLS 中如何进行 MAC 地址学习?与普通二层交换机的学习方式相同吗?
- 水平分割在 VPLS 中起什么作用?为什么需要它?
- VPLS 中为什么不需要运行 STP?
- VPLS 的 BUM 流量如何转发?会不会造成带宽浪费?
下篇预告:第172篇《H-VPLS 分层 VPLS 架构》——通过分层架构解决 VPLS 的全连接扩展性问题,理解接入层和汇聚层的角色划分。