4.2. Data Packet Forwarding Rules (数据包转发规则)
本节描述 PIM-SM 路由器如何转发组播数据包.基本原则是数据包仅在路由器具有适当的转发状态时才被转发.
数据包转发的基本规则
当组播数据包到达路由器的某个接口时, 路由器执行以下检查:
- RPF 检查 (Reverse Path Forwarding Check): 验证数据包是否从正确的接口到达(即朝向源的接口)
- 出接口列表 (Outgoing Interface List, olist) 检查: 确定数据包应该被转发到哪些接口
- TTL 阈值检查: 验证数据包的 TTL 是否足够
转发状态
PIM-SM 使用以下转发状态来确定如何处理数据包:
- (*,G) 状态: 用于共享树转发
- (S,G) 状态: 用于源特定最短路径树转发
- (S,G,rpt) 状态: 用于在共享树上排除特定源
转发算法
if (DirectlyConnected(S) == TRUE AND iif == RPF_interface(S)) {
olist = olist(*,G) (+) olist(S,G) (-) olist(S,G,rpt)
forward packet on all interfaces in olist
} else if (iif == RPF_interface(S) AND SPTbit(S,G) == TRUE) {
olist = olist(S,G) (-) olist(S,G,rpt)
forward packet on all interfaces in olist
} else if (iif == RPF_interface(RP(G)) AND SPTbit(S,G) == FALSE) {
olist = olist(*,G) (-) olist(S,G,rpt)
forward packet on all interfaces in olist
} else {
drop packet
}
4.2.1. Last-Hop Switchover to the SPT (最后一跳切换到 SPT)
当接收者的最后一跳路由器首次开始接收来自特定源的流量时, 它可能正在通过共享树 (RPT) 接收该流量.如果流量速率足够高, 最后一跳路由器可能决定切换到源特定的最短路径树 (SPT).
切换决策基于配置的阈值.一旦决定切换:
- 路由器向源发送 (S,G) Join
- 当数据开始通过 SPT 到达时, 路由器向 RP 发送 (S,G,rpt) Prune
4.2.2. Setting and Clearing the (S,G) SPTbit (设置和清除 (S,G) SPTbit)
SPTbit 用于指示路由器是通过 SPT 还是通过 RPT 转发来自特定源的流量.
设置 SPTbit: 当满足以下条件之一时:
- 接收到匹配 (S,G) 转发状态的数据包且 RPF 检查成功
- 发送 (S,G) Join 并且预期流量将通过 SPT 到达
清除 SPTbit: 当不再需要 (S,G) 特定转发时, 例如:
- 所有下游接收者都离开
- (S,G) 状态超时
备注
关于详细的转发规则,伪代码和边界情况处理, 请参阅 RFC 7761 第 4.2 节的完整规范.