PIM原理与配置
概述
- PIM:协议无关组播
- PIM协议封装在IP之上,协议号103,协议报文组播地址224.0.0.13
PIM的工作模式
PIM DM(pim dense mode):密集模式
- 适用场景:组成员分布密集的组播网络
- 关键任务:
- 建立SPT(源树):以组播源为根节点到组成员的单向最短路径树,采用“push(推)”的模式,就是“扩散+剪枝”的方式
关键的工作机制
邻居发现机制:建立PIM邻居关系
- 运行了PIM的设备,交互Hello报文,通过hello报文来选举DR
- DR的选举
- 先比较优先级,值越大越优
- 优先级一样则比较接口IP地址,越大越优
- PIM DM的DR作为IGMPv1的查询器
- 互相交互完hello报文后,pim邻居关系建立完成
- 后期周期性发送hello报文维护pim邻居关系,hello间隔30s,邻居关系老化时间105s,105s计时器超时后仍没有接收到邻居的hello报文,则认为邻居down
- DR的选举
扩散机制
- 当pim路由器接收到组播流量的时候,进行RPF检查,如果检查通过,则建立(S,G)表项,接收到组播流量的接口成为RPF接口,作为表项的上游接口,其他接口成为下游接口并加入(S,G)表项种,复制组播流量到下游接口并转发出去,重复以上动作,直到组播流量转发到网络的每一个网段,该过程称为扩散
- RPF检查
- 作用
- 防止重复的组播流量
- 避免环路产生
- 避免次优路径
- 原理
- 当接收到组播报文时,根据单播路由表,查看去往组播源所在网段的出接口是否和接收到组播流量的入接口一致,一致则通过RPF检查,该接口称为RPF接口,作为(S,G)表项的上游接口,用于接收组播流量;如果不一致则检查不通过,从该接口接收到的组播流量直接丢弃
- 作用
剪枝机制:prune报文
- 当pim路由器下游没有组成员时,会向上游设备发送prune报文,告知上游设备我不需要接收组播流量
- 当上游设备接收到prune报文后,将接收该报文的接口从(S,G)表项的下游接口列表种移除,后续在接收到组播流量便不会再从该接口转发出去
- 早期维护SPT的方式:周期性扩散——剪枝(默认180s,华为设备改为210s)
- SPT的老化时间210s
- 被剪枝的接口210s超时后,重新添加到(S,G)表象的下游接口列表中,回复组播流量的转发
状态刷新机制:state refresh报文
- 作用:周期性刷新剪枝计时器(210s),断言计时器(180s)间隔时间60s,由第一跳组播路由器泛洪状态刷新报文,用于刷新“扩散+剪枝”计时器,从而避免资源浪费
- 只有从RPF接口接收到的状态刷新报文才会处理,其他接口接收到的直接丢弃
- 状态刷新报文中:
- 剪枝标志位:
- p indicator=1:出接口为剪枝状态
- p indicator=0:出接口为非剪枝状态
- 剪枝刷新:
- p now=1:刷新剪枝计时器,(要求下游设备进行剪枝)
- p now=0:不刷新剪枝计时器,(不要求下游设备开始进行剪枝)
- 断言刷新:
- A=1:刷新断言计时器
- A=0:表示不刷新断言计时器
- 剪枝标志位:
- 当RPF接口为剪枝状态时
- 当状态刷新报文携带的p置位(p now),则回复剪枝报文
- 当 状态刷新报文携带的P未置位,等待剪枝计时器超时后进入转发状态
- 当RPF接口未转发状态时:
- 当状态刷新报文携带的p置位,则启动剪枝否决机制,等待2.5s后发送join报文(剪枝否决报文)
- 当状态刷新报文携带的p未置位,则状态不改变,回复join报文(剪枝否决报文)
- 状态刷新报文只能由第一跳路由器产生,从上往下逐跳转发,每经过一台组播路由器TTL值减1,下游设备只有winner接口转发状态刷新报文
- winner转发前会对状态刷新报文修改的参数内容:报文的源IP地址,路由管理距离(协议优先级),开销,TTL
- 导致的问题
- 被剪枝的接口一直处于抑制状态,当有新成员加入时,接收不到组播流量
嫁接机制:graft报文和graft ack报文
- 由于状态刷新机制会导致接口长期处于抑制状态,所连接的接收者无法接收组播流量,域时通过嫁接机制来实现
- 当由主机响应加入某个组播组时,发送report报文给查询器
- 当查询器接收到report报文时,向上游设备(RPF邻居)发送graft,表明自己想要接收组播流量
- 当上游设备接收到graft报文后,回复graft ack报文,同时将接收到该报文的接口添加到(S,G)表项的下游接口列表中,后续向该接口转发组播流量
- 目前网络中一般采用状态刷新机制和嫁接机制维护SPT
断言机制:assert
-
SPT的特点
- 单向的:组播源为根,上游接口唯一
- 确保无环:RPF检查
- 最优路径:RPF检查
- 无重复报文:断言机制
- RPF检查(确保上行接口无重复)
- 断言机制(确保下行接口无重复)
-
断言机制的过程
- 当pim路由器从邻居处接收到与自己相同的组播流量时,会触发断言机制,往该MA网络中发送一个assert报文
- 邻居收到后,进行assert竞选,竞选规则如下
- 先比较去往组播源的路由协议优先级,高的获胜
- 如果优先级一样,则比较去往组播源的路由开销,小的获胜
- 如果开销一样,则比较下游接口IP地址,大的获胜
- 获胜的一方称为winner,负责该网段的组播流量的转发;失败的一方称为loser,停止向该网段发送组播流量,并将该接口从(S,G)表项的下游接口列表中移除,同时开启计时器(180s),计时器超时后,重新发送组播流量
PIM SM(pim sparse mode):稀疏模式
- 适用场景:适用于组播成员分布稀疏的组播网络环境
- 特点
- 使用”pull“拉的方式建立组播分发树,转发组播流量
- 存在”RP“(汇聚点);
- 当组播源发送组播流量需要先向RP发送注册报文,建立SPT
- 当接收者需要接收组播流量,向查询器发送report报文,需要查询器向RP发送join消息,建立RPT
- 适用于大型组播网络
- 需要建立两棵树:
- SPT:源树,源端DR与RP之间建立的最短路径树,形成(S,G)表项
- RPT:共享树,接收者端DR与RP之间建立的最短路径树,形成(*,G)表项
工作机制
邻居发现机制:hello报文
-
邻居建立过程与PIM DM一致,报文协商参数与格式一致
-
DR选举规则一致(优先级和IP地址,都是以大为优)
-
DR的作用
- 每个网段都会选举DR,中间节点的DR没有作用
- 源端DR:负责向RP发送注册报文
- 接收者端DR;
- 在IGMPv1中作为查询器
- 负责向RP发送join消息
- 负责完成RPT到SPT的切换
-
RP的发现机制:bootstrap报文和C-RP-advertisement报文
-
成为RP的方式
-
手工静态指定:
- 通常指定loopback口地址为RP地址(需要全网可达且使能PIM)
- 没有备份,一个组播组只能配置一个RP,一个RP可以服务多个组播组地址
- 缺点:每台路由器上都需要配置,配置工作量大,后期维护难,易出现RP的单点故障
- 优点:开销小,实现简单
-
动态发现
-
特点
- 不需要每台组播路由器上配置RP,可以自动学习
- 有备份,一个组播组地址可以配置多个C-RP(候选RP)
- 缺点:开销大,实现复杂
- 注意:
- 每个组播组只能存在一个RP,一个RP可以服务多个组播组;
- RP地址必须全网可达
- RP地址所在接口必须使能PIM
-
工作原理
-
由C-BSR(候选BSR)向全域通告bootstrap消息,选举BSR
- 选举规则
- 比较BSR的优先级,以大为优,默认为0
- 优先级一样,比较BSR的IP地址,越大越优
- 选举规则
-
网络中的C-RP(候选RP)得知BSR是谁后,朝BSR发送C-RP-advertisement报文
-
BSR收集的组播网络中所有C-RP的消息后,汇总成RP-set消息,向全域通告C-RP-set消息
-
组播网络中所有PIM路由器接收到BSR发送的C-RP-set消息后,根据统一的RP选举规则,选举处RP
-
RP选举规则
-
选择RP服务组播范围掩码长度最长的(精确度越高越优)
-
选择RP优先级值小的,越小越优,默认为0
-
选择hash计算结果最大的,越大越优
-
参与hash计算的参数
- 组播组地址
- 掩码长度
- RP地址
将组地址被掩码掩盖的部分和RP地址进行hash计算
- 当掩码长度为0时,等于整个组地址都不参与hash计算,此时hash计算出的结果取决RP地址,因此每个组地址选择的RP都是同一个
- 当掩码长度不为0时,将组地址被掩码掩盖的bit与RP地址进行hash计算,此时hash计算结果受RP地址和组地址的影响,因此导致不同组地址可能自动选择不同的C-RP成为自己的RP,使C-RP之间既能备份又能分摊组播流量
-
-
选择C-RP的IP地址最大的,越大越优
-
-
-
-
-
RPT的构建:join消息
-
由接收者端DR发起,当收到igmp的report报文时,创建对应的(*,g) 表项,然后朝RP发送(x,G)表项的join消息
-
上游设备接收到join消息后创建(*,G)表项,并将接收到该消息的接口添加到下游接口列表中,同时朝RP转发join消息
-
上有设备逐跳朝RP转发join消息,沿途所有设备都生成(*,G)表项,指定RP建立(x,G)表项为止
此时RP的(*,G)表项的上游接口为null,下游接口到join消息的接口
- 上游设备:通过RPF检查确定上游设备,朝上游设备组播发送
- 此时RPF检查以RP地址为目的查单播路由表
- 上游设备:通过RPF检查确定上游设备,朝上游设备组播发送
-
-
SPT的构建:组播源注册机制
- 使用注册报文,注册停止报文,join消息
- 当源端DR接收到组播源的组播流量时,查找对应的(S,G)表项,入果,没有对应的表项,则将组播流量上送至CPU处理,封装成注册报文,单播发送给RP(组播报文以载荷的方式被携带在注册报文中)
- 当RP接收到注册报文,进行解封装,得到组播流在,再根据组播目的IP地址朝朝对应的(*,G)表项
- 如果没有找到对应的表项,则直接丢弃,并找组播源端DR发送组测停止报文
- 如果有对应表项则按(*,G)表项,也就是RPT转发至组成员
- 同时朝RP组播发送(S,G)的join消息,沿途设备收到后生成(S,G)表项
- RP从SPT接收到组播流量后,朝源端DR单播发送注册停止报文
- 使用注册报文,注册停止报文,join消息
-
RPT切换至SPT:switchover机制
-
用于解决次优路径及RP负担过重的问题
-
当设备发现接收组播流量的流速超过了阀值(默认为0),则会引起switchover机制,接收者端DR朝组播源发送join消息
-
沿途的设备都会建立(S,G)白哦想,SPT建立完成,后续组播流量都会根据SPT转发。如果RP没有在SPT路径上,则RP不再参与组播流量的转发,从而减轻了RP的负担以及解决由RP转发导致的次优路径问题
-
同时接收者端DR会朝源端DR发送剪枝报文,将自己从RPT和SPT中剪掉
华为设备中,默认当接收者端DR接收到组播流量后,会自动朝组播源发送join消息,完成RPT向SPT的切换
-
-
-
剪枝机制、嫁接机制都有join/prune消息完成,与PIM DM基本类似
-
断言机制与PIM DM基本类似
- 在PIM DM中,断言计时器180s由状态刷新报文60s刷新一次
- 在PIM SM中一般情况下不会出现断言;断言计时器180s,由winner间隔180s周期断言报文刷新
-
组播分发树的维护
- 当SPT或者RPT稳定时,接收端DR周期发送join消息维护接口转发状态
- 当计时器超时(210s)还没有接收到组播流量,SPT老化,接收者端DR朝RP发送join消息
-
PIM SM的两种工作模式
PIM SM (ASM):服务于ASM(任意源组播服务模型)
-
关键任务
-
邻居发现机制
- 建立PIM SM邻居关系,选举DR(优先级和I怕地址,以大为优)
-
RP发现机制
- 静态指定
- 动态发现
-
构建RPT(共享树):IGMP report报文触发建立
- 由接收者端DR发起
-
构建SPT(源树):组播源注册机制
- 由RP发起(华为由接收者端DR发起)
- 组播流量触发建立
-
RPT切换至SPT:switchover机制
-
好处:
-
减轻RP的负担
-
避免次优路径
华为默认直接切换,一旦接收者端DR接收到组播流量直接朝组播源发起SPT的建立
-
-
-
PIM SM(SSM):服务于SSM(特定组播服务模型)
- 接收者已知晓组播源的位置,指明需要接收某个组播源发送的组播流量
- 关键任务
- 邻居发现:选举DR
- 构建SPT:
- 接收者加入,运行IGMPv3的最后一跳路由器会产生(S,G)表项,由接收者端DR根据组播源的IP地址朝组播源发送join消息
- 沿途的上游设备接收到join消息后,生成相应的(S,G)表项,并且继续朝组播源方向发生join消息,反向建立SPT
- 总结:
- PIM-SSM无需维护RP,无需构建RPT,无需组播源注册机制
- 对于接收者不支持IGMPv3的需要配置SSM-mapping
- PIM-SSM组播分发树的维护
- PIM-SSM的SPT不会因为组播流量的消失而老化,通过周期性发送join消息(60s)维护SPT,所以会一值存在(除非没有组成员才会老化)