HCIP-20.5 PIM DM
PIM:Protocol Independent Multicast,协议无关的组播路由协议
注意:组播PIM底层是单播路由协议
PIM两种模式
DM:密集模式,不常用
SM:稀疏模式,常用
PIM-DM : Protocol Independent Multicast – Dense Mode
PIM-SM:Protocol Independent Multicast – Spouse Mode
组播报文发给一组特定的接收者,这些接收者可能分布在网络中的任意位置,为了实现组播报文正确、高效地转发,组播路由器需要建立和维护组播路由表项。
随着多个组播路由协议的开发与应用,人们渐渐感觉到,如果像单播路由一样,通过多种路由算法动态生成组播路由,会带来不同路由协议间在互相引入时操作繁琐的问题。
PIM(Protocol Independent Multicast)直接利用单播路由表的路由信息进行组播报文RPF(Reverse Path Forwarding,逆向路径转发)检查,创建组播路由表项,转发组播报文。
–
- PIM路由表项即通过PIM协议建立的组播路由表项。PIM网络中存在两种路由表项:( S , G )路由表项或( , G )路由表项。S表示组播源,G表示组播组, 表示任意。
- ( S , G )路由表项主要用于在PIM网络中建立SPT。对于PIM-DM网络和PIM-SM网络适用。
- ( * , G )路由表项主要用于在PIM网络中建立RPT。对于PIM-SM网络适用。
- PIM路由器上可能同时存在两种路由表项,当收到源地址为S,组播地址为G的组播报文,且RPF检查通过的情况下,按照如下的队则转发:
- 如果存在 ( S , G )路由表项,则由( S , G )路由表项指导转发。
- 如果不存在( S , G )路由表项,只存在( , G )路由表项,则先依照( , G )路由表项创建 ( S , G )路由表项,再由( S , G )路由表项指导报文转发。
DM模式只有 ( S , G )表项。
–
PIM-DM假设网络中的组成员分布非常稠密,每个网段都可能存在组成员,其设计思想是:
- 首先将组播数据报文扩散到各个网段
- 然后再剪裁叼不存在组成员的网段
- 通过周期性的“扩散——剪枝”,构建并维护一棵连接组播源和组成员的单向无环SPT。PIM-DM的关键工作机制包括邻居发现、扩散剪枝、状态刷新、嫁接和断言。
一、PIM-DM基本概述
(1)采用“推(Push)模式”转发组播报文
(2)PIM-DM的关键任务
- 建立SPT(Short Path Tree,最短路径树)
(3)PIM-DM工作机制
- 邻居发现、扩散与剪枝、状态刷新、嫁接、断言
二、PIM-DM邻居发现
三、PIM-DM构建SPT
剪枝过程:当下游没有组播成员,扩散组播报文会导致带库资源的浪费。为了避免带宽的浪费PIM-DM使用剪枝机制。
(1)当下游节点没有组播组成员,则路由器向上游节点发送Prune消息,通知上游节点不用再转发数据到该分支。上游节点收到Prune消息后,就相应的接口从其组播转发表项 ( S , G )对应的输出发送列表中删除。剪枝过程继续直到PIM-DM中仅剩下了必要的分支,这就建立了一个以组播源为根的SPT。
(2)各个被剪枝的节点同时提供超时机制,当剪枝超时时重新开始“扩散——剪枝”过程。剪枝状态超时计时器的默认值为210秒。
PIM-DM的“扩散——剪枝”机制周期性进行,每3分钟重复一次。
四、状态刷新
周期性的刷新剪枝状态
五、Graft机制(嫁接)
新的组成员加入组播组后,快速得到组播报文。
六、Assert机制(断言)
避免重复的组播报文
为避免重复的组播报文浪费带宽资源,PIM路由器在接收到邻居路由器发送的相同组播报文后,会以组播的方式向本网段的所有PIM路由器发送Assert消息,其中目的地址为224.0.0.13,其他PIM路由器在接收到Assert消息后,将自身参数与对方报文中携带的参数对比,进行Assert竞选。
竞选规则:
(1)到组播源的单播路由协议优先级小者获胜
(2)如果优先级相同,则到组播源的路由协议开销小者获胜
(3)如果以上都相同,则连接到接收者MA网络接口IP地址最大者获胜
PIM 协议组播地址是224.0.0.13,所有运行PIM协议的路由器都侦听
示例拓扑
R1:
multicast routing-enable
int g0/0/1
pim dm
int g0/0/2
pim dm
int g0/0/0
pim dm
R3:
multicast routing-enable
int g0/0/0
pim dm
int g0/0/1
pim dm
int g0/0/2
pim dm
其他路由器配置类似,略
R5:
multicast routing-en
int g0/0/1
pim dm
int g0/0/2
pim dm
int g0/0/0
igmp enable # 接用户接口启用igmp协议
R6:
multicast routing-en
int g0/0/0
pim dm
int g0/0/1
igmp en # 接用户接口启用igmp协议
调试命令:
dis pim neighbor
dis pim routing-table