4.7. PIM Bootstrap and RP Discovery (PIM 引导和 RP 发现)
PIM-SM 需要一种机制来让域中的所有路由器知道每个组播组的汇聚点 (Rendezvous Point, RP) 地址.本节描述 RP 发现的机制.
RP 发现方法
PIM-SM 支持多种 RP 发现方法:
- 静态配置: 管理员手动配置每个路由器的组到 RP 映射
- Bootstrap Router (BSR) 机制: 动态分发 RP 信息 [RFC 5059]
- Embedded-RP: 在 IPv6 组播地址中嵌入 RP 地址 [RFC 3956]
- Auto-RP: Cisco 专有的动态 RP 发现机制
本节重点描述 BSR 机制和组到 RP 映射的基本原理.
Bootstrap Router (BSR) 机制概述
BSR 机制提供了一种动态,容错的方式来分发 RP 信息:
- BSR 选举: 域中的路由器自动选举一个 Bootstrap Router
- RP 候选通告: 配置为 RP 候选的路由器向 BSR 发送 Candidate-RP-Advertisement 消息
- RP-Set 分发: BSR 收集候选信息并通过 Bootstrap 消息分发 RP-Set
- 逐跳泛洪: Bootstrap 消息在域中逐跳泛洪
4.7.1. Group-to-RP Mapping (组到 RP 映射)
每个路由器维护一个组到 RP 的映射表.对于给定的组 G, 路由器需要确定使用哪个 RP.
映射过程:
- 查找覆盖组 G 的所有 RP 候选
- 使用哈希函数选择特定 RP
- 缓存映射以提高效率
组范围: RP 可以为特定的组范围配置, 例如:
- RP1 服务 239.1.0.0/16
- RP2 服务 239.2.0.0/16
4.7.2. Hash Function (哈希函数)
PIM-SM 使用哈希函数将组地址映射到 RP-Set 中的特定 RP.哈希函数设计为:
- 确定性: 所有路由器对相同组选择相同 RP
- 保序性: RP-Set 变化时最小化重新映射
- 负载分布: 在多个 RP 之间分布组
哈希算法 (简化):
1. 从 RP-Set 中筛选服务该组的 RP
2. 对每个 RP:
value = 1103515245 * ((1103515245 * (G) + 12345) XOR RP) + 12345
3. 选择 value 最大的 RP
4. 如果多个 RP 的 value 相同, 选择 IP 地址最大的
示例:
Group: 239.1.1.1
RP-Set: {10.0.0.1 (服务 239.0.0.0/8), 10.0.0.2 (服务 239.0.0.0/8)}
计算哈希值:
- RP 10.0.0.1: hash(239.1.1.1, 10.0.0.1) = 0x12345678
- RP 10.0.0.2: hash(239.1.1.1, 10.0.0.2) = 0x23456789
选择: RP 10.0.0.2 (哈希值更大)
RP 状态维护
每个路由器维护以下 RP 相关状态:
- 当前 RP-Set: 从 BSR 接收的 RP 候选列表
- 组到 RP 映射缓存: 已计算的映射结果
- RP 优先级: 每个 RP 的优先级值
当 RP-Set 发生变化时:
- 路由器重新计算受影响组的 RP 映射
- 如果 RP 改变, 触发状态重建(发送 Prune 到旧 RP, Join 到新 RP)
其他 RP 发现机制
Embedded-RP (IPv6):
- RP 地址直接编码在组播组地址中
- 格式: ff7x:0yz0:RIID::/96
- 无需额外的发现协议
静态配置:
- 简单可靠, 适用于小型网络
- 缺乏灵活性和容错能力
- 配置示例:
ip pim rp-address 10.0.0.1 239.0.0.0/8
备注
关于 BSR 机制的详细规范, 请参阅 RFC 5059.关于 Embedded-RP, 请参阅 RFC 3956.