IGMP工作在二层组播网络中,三层的组播源和路由器的流量推送使用PIM协议。 组播路由器的主要作用是将数据从组播源发送到组播组成员,组播数据转发依赖组播分发树,组播路由器通过PIM协议构建组播分发树。 组播网络中PIM和IGMP工作区域: ::: tip PIM协议是与协议无关的组播路由协议,运行在组播路由器之间,用来创建、维护组播转发表项。
PIM协议无关指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息。作为组播路由解决方案,PIM直接利用单播路由表的路由信息,对组播报文执行RPF(逆向路径转发)检查,检查通过后创建组播路由表项,从而转发组播报文。 :::
PIM基本概念
- 分类:
- PIM-DM(密集模式),主要用在组成员较少且相对密集的组播网络中。 密集模式认为网络中任何节点都存在需要接收组播流量的用户,使用“推”的方式将流量转发下去。
- PIM-SM(稀疏模式),主要用在组成员较多且相对稀疏的组播网络中。 稀疏模式认为网络中少数节点存在需要接收组播流量的用户。
- 路由器角色:
- PIM路由器:接口上使能PIM协议的路由器。
- 第一跳路由器:组播转发路径上,与组播源相连且负责转发该组播源发出的组播数据的PIM路由器。
- 中间路由器:组播转发路径上,第一跳路由器与最后一跳路由器之间的PIM路由器。
- 最后一跳路由器:组播转发路径上,与组播组成员相连且负责向该组成员转发组播数据的PIM路由器。
- 叶子路由器:连接终端,但终端不一定是组成员。
- 路由器接口:
- 上游接口(RPF接口):负责接收组播流量的接口(有且只有一个)。
**RPF:反向路径检测,收到组播流量后,根据源地址信息,检测去往源的最短路径,检测的接口就是RPF接口。**
- 下游接口:负责转发组播流量的接口(可能会存在多个)。
- 上游接口(RPF接口):负责接收组播流量的接口(有且只有一个)。
::: tip 流量从组播源(上游)到组播用户(下游),即组播源是上游,组播用户是下游。
组播表项的本质:通过PIM协议不断创建、维护上游接口和下游接口。 :::
组播转发路径(转发树)
SPT(最短路径树、也称为源树)
1.以组播源为根,组播成员为叶子 2.用(S,G)表项来描述组播信息 S:组播源地址 G:组播组地址 特点:从源到每一个成员都是最短路径,但需要路由器来维护大量的(S,G)表项(需要维护源和组)
RPT(共享路径树)
1.以RP(汇聚点)为根,组播成员为叶子 2.用(※,G)表项来描述组播信息 ※:任意组播源地址 G:组播组地址 特点: 路由器只需要维护(※,G)表项,节省了设备性能(源任意,只需要维护组)
::: tip PIM协议报文直接采用IP封装,目的地址224.0.0.13,IP协议号103。 :::
::: warning PIM-DM模式用于SSM,源必须是固定的。 PIM-SM模式用于ASM和SSM融合。 (PIM-DM模式创建出来的一定是指定源模型的分发树(SSM))。 :::
PIM-DM(密集模式)
PIM-DM主要用在组成员较少且相对密集的组播网络中,认为网络中任何节点都存在需要接收组播流量的用户,使用“推”的方式来实现组播流量的扩散。 ::: warning PIM-DM模式使用SPT构建最短路径树,但最后一跳路由器需要维护组成员的关系,所以会存在(※,G)表项。 :::
PIM-DM工作机制
邻居发现机制
- 在PIM路由器上每一个使能PIM的接口都会发送PIM hello报文。
- hello报文周期时间30s,105s超时。
- hello报文内容:
- 根据hello报文内容进行参数协商,建立PIM邻居。 邻居建立完成后,再接收PIM协议的相关报文来创建组播路由表项。
- PIM根据IGP进行收敛。 如果上游(接口)邻居或者下游(接口)邻居失效,IGP会重新收敛,PIM也会随着IGP进行收敛。 ::: tip PIM没有能力计算最优路径,虽然协议无关,但最优路径需要依赖IGP计算。 :::
扩散机制
将组播源发送的组播数据,转发至全网。
沿途收到组播流量的设备会创建(S,G)表项。(为实现最短路径转发),如实验中配置组播源后产生的PIM表项。
PIM-DM的(S,G)上游接口(RPF)和下游接口的对比规则: ::: tip RPF接口:去往组播源地址的单播路由表的出接口(dis ip routing-table查询)。该接口上的邻居称为RPF邻居。 下游接口:除了RPF接口外,连接PIM邻居或者连接组成员的接口。 :::
如何判断RPF接口? 如何判断RPF邻居? 1.如果去往组播源存在多个出接口,且IGP开销都等价(负载分担)如实验拓扑中的AR6 则下一跳IP地址大的接口作为RPF接口 2.如果去往组播源只有一个出接口,但是有多个下一跳邻居,如实验拓扑中的AR4、AR5 则下一跳IP地址大的作为RPF邻居
RPF接口也可以用于BSR(PIM-SM中使用) 如上,AR6有多个去往组播源的接口,连接下一跳接口地址更大的AR5 GE0/0/1的AR6 GE0/0/0接口为AR6的RPF接口。 如上,AR4的一个RPF接口有多个邻居,下一跳接口地址更大的AR3为AR4的RPF邻居。
::: warning RPF检测机制: 收到组播流量后,根据组播源地址信息判断接收接口是否为RPF接口。 如果是,则接收组播流量,正常向下游接口转发。如果不是,则丢弃该接口发来的组播流量。 :::
剪枝/加入机制
- 当路由器不存在下游接口时,向去往源的RPF接口上发送Prune报文(剪枝报文)。
- 剪枝报文:
- RPF接口上的RPF邻居收到剪枝报文后:
- 如果收到剪枝报文的接口的IP地址和报文内携带的上游RPF邻居地址一致,则将该接口从自身的(S,G)表项中进行删除(报文发送正确),后续流量不再向该接口转发:
- 如果(S,G)表项还有其他的下游接口,则剪枝结束(假设AR5还有其他下游接口连接,AR5 GE0/0/1关闭,剪枝结束,AR5的其他下游接口继续转发流量)。
- 如果(S,G)表项不存在其他的下游接口,则继续向上游的RPF邻居发送剪枝报文(AR5没有下游接口需要转发组播流量,即AR5不再需要接收组播流量)。
- 如果不需要接收组播流量,则需要向上游发送剪枝报文。 在广播型网络中,如果需要接收组播流量的设备收到对应组播组的剪枝报文,会立即向上游发送一个加入报文,即剪枝否决机制。 ::: tip
剪枝否决机制:需要接收组播流量的设备收到剪枝报文后会向上游发送join报文。 上游设备收到剪枝报文后,不会立即删除下游接口,等待3s的剪枝否决时间(0.5s剪枝延迟,2.5s剪枝否决),如果在3s内收到下游的join报文,则不将该接口剪枝,没有收到则正常进行剪枝。
剪枝复活机制:剪枝后不会立刻将表项删除,以防表项删除后又需要切换回来。 路由器被剪枝的下游接口会启动剪枝定时器(默认210s)。 :::
状态刷新机制
组播表项存在上游接口和下游接口,上游接口根据组播源地址进行RPF检测得到。 组播源地址需要接收组播流量后才能判断组播源地址信息。
维护(S,G)表项需要不断的接收组播流量
如果推送组播流量来维护(S,G)表项,存在如下问题:
1.组播流量浪费带宽,占用设备资源
2.如果设备被剪枝,不存在下游接口,组播流量不会向下转发
维护(S,G)表项的作用是为了后续终端用户更方便加组接收组播流量,如果不存在表项,终端用户无法接收流量。
- 状态刷新报文 组播源活跃时,第一跳路由器会以60s为间隔周期发送状态刷新报文向全网扩散。 状态刷新报文携带组播源地址和组地址,路由器收到状态刷新报文表示组播源活跃,路由器重置接口剪枝定时器,重置(S,G)表项的老化定时器,以此来维护(S,G)表项,无需通过周期性的扩散和剪枝维护(S,G)表项,节省设备资源和链路带宽。
- 在组播源活跃期间 1.第一跳路由器发送状态刷新报文至全网,保证接口的剪枝状态和(S,G)表项。 2.状态刷新报文包含的(S,G)代表此组播源是活跃的,为嫁接机制提供便利。 3.设备单纯收到状态刷新报文,也可以创建(S,G)表项。(状态刷新报文包含源组信息)
::: warning 即使下游设备剪枝(没有组播流量),设备仍会周期性收到状态刷新报文(60s),收到状态刷新报文后,设备会重置(S,G)表项。(只要有PIM邻居就会发送,抑制接口也会发送) (S,G)和(*,G)表项的老化时间默认是210秒,在表项老化前就可以被状态刷新报文重置刷新。 :::
嫁接机制
如上图,嫁接机制是当PC1发送join报文给AR6后,AR6向RPF邻居AR5发送嫁接报文,如果AR5是剪枝后的设备,再向上发送嫁接报文,直到发送给推送流量的设备AR1,然后再将流量推送下来。
- 设备一定要存在(S,G)表项,才能进行嫁接。
- 嫁接报文是join报文修改的:
- 嫁接报文是单播报文,如上图。原因是RPF邻居只有一个。 嫁接报文可以在广播型网络中为其他设备减少不必要的报文处理。 ::: tip
嫁接报文存在和剪枝报文类似的RPF检测机制,判断收到嫁接报文的接口IP地址和报文内携带的RPF邻居地址是否一致:
- 如果一致,则进行嫁接,向对端回复嫁接确认报文Graft-Ack。
- 如果不一致,则丢弃。
单播报文和确定的单播地址唯一确定了要嫁接的下一跳,所以一般嫁接报文的RPF检测都一致。如果不一致,可以考虑是否受到攻击。 :::
断言机制:
如上图,组播流量通过AR2和AR3向下发送,下游设备可能收到重复的两组相同流量,断言机制可以防止共享网络内接收重复的组播流量。 设备的接口发送组播流量,又接收到了其他设备发来的组播流量,意味着冲突。
断言报文:
断言比较: 1.比较路由协议优先级值,优选优先级值小的。 2.优先级值相等,则比较cost值,优选cost值小的。 3.如果cost也相等,则比较IP地址,优选IP地址大的。(为和RPF邻居保持一致) ::: tip RPF接口是设备自身的,AR6把下一跳地址大的接口GE0/0/0作为RPF接口,将下一跳地址大的设备作为RPF邻居,即从AR5接收流量。 而AR5会接收来自AR2和AR3的组播流量,原因是组播流量经过交换机都从AR5的RPF接口GE0/0/0接收进来。然后AR5进行断言机制比较。 :::
断言比较后,最优的设备AR3称为winner,失败的设备AR2称为loser,只有winner会发送组播流量。*
loser设备AR2会将断言失败的接口(GE0/0/1)进行剪枝,即向winner发送剪枝报文。*
如果有下游设备(AR5)需要接收组播流量,则下游设备(AR5)会向winner发送join报文进行剪枝否决。* ::: warning 一般来说,剪枝消息都是向上游发送。在某些特殊场景下也会向下游发送,如ASSERT断言机制。 :::
只有winner会发送状态刷新报文。*
配置静态组播路由,设置RPF的邻居: [AR5]ip rpf-route-static 100.1.1.1 32 10.1.100.2
PIM-DM实验:
[AR1]multicast routing-enable 开启PIM之前需要全局开启组播路由功能
[AR1-GigabitEthernet0/0/0]pim dm 所有邻居互联接口开启pim-dm
设置组播源后,所有路由器都会产生一个PIM表项: AR6连接PC1设置IGMP,PC1加入组播组后,AR6上出现IGMP表项: 组播源下发流量: 组播源下发的视频和终端接收的视频完全同步。 ::: tip PIM表项的(,G)来自于IGMP Snooping: *PIM表项中虽然没有下游接口信息,但是可以迭代到IGMP接口上使用。** 也可以在G0/0/2接口上使用PIM接管IGMP表项:
[AR6-GigabitEthernet0/0/2]undo igmp enable
[AR6-GigabitEthernet0/0/2]pim dm
[AR6-GigabitEthernet0/0/2]igmp enable
如上,IGMP表项消失,G0/0/2接口就可以直接添加在(S,G)表项中。
组播流量下发,AR6通过PIM表项的上游接口收到,在IGMP表项下游接口转发给终端设备。 ::: ::: warning (S,G)表项是因为收到了组播源发来的组播流量才会产生,而downstream interface是因为下游有该组播组成员才会产生(依据IGMP表知道下游有该组播组成员)。
(S,G)(※,G)表项中上游接口和组播组G对应,从上游接口的RPF邻居发来流量。 :::
AR4和AR6的G0/0/2接口做相同网络配置,配置pim dm和igmp enable,不在OSPF区域内宣告。(实验用,现网严禁做相同配置) ::: danger pim-dm中的join报文作用是用于剪枝否决,成员加组时不会产生。 :::
SW1的GE0/0/2接口抓包状态刷新报文: 如上,状态刷新报文中会携带通告报文的源地址为AR3的GE0/0/1,IP:10.1.100.3,组播源的地址为100.1.1.1,起源第一跳路由器发送报文接口地址为10.1.13.1。
PIM-SM(稀疏模式)
PIM-DM的缺陷是组播源刚上线时会向网络上所有节点转发组播流量,建立(S,G)表项,再由节点判断是否需要剪枝。 PIM-SM不会推送组播流量,组播路由器不会建立(S,G)表项,最后一跳路由器收到成员报告报文后,会根据成员报告报文建立(※,G)表项。
::: tip PIM-SM流量转发思路: 当节点下存在组成员时,节点上会存在(※,G)表项,会有一台设备收集节点(最后一跳路由器)上的(※,G)表项,该设备称为RP(汇聚点设备)。 RP接收源的信息,和节点发来的组成员的信息进行对应。如果某个成员需要加入的组是该组播源的组,RP会同该节点构建组播流量转发路径,单独向该成员下发组播流量。 :::
PIM-SM使用“拉”模式来转发组播流量。PIM-SM假设网络中所有主机均不需要接收组播数据,只有在主机明确提出需要接收组播数据时,才会构建组播分发树,向提出需求的主机转发组播数据。
RP设备即汇聚点设备,作用是收集组播用户的信息和组播源的信息,RP需要被全网所知,即RP发现。(网络中其他设备向RP发送信息,不是RP通告自身索取信息) ::: tip 一个组播组同一个时刻内只能存在一个RP。 一个RP可以同时服务多个组播组。 ::: PIM-SM中RP设备以(※,G)表项构建共享路径树(RPT)。RPT可能不是最优的,但一定可以到达RP。组播源发送组播数据时,先将数据发送至RP,然后由RP将组播数据转发给组成员。
RP发现
1. 静态RP:在全网组播路由器上手工配置RP信息。(手工指定RP) 前提是全网互通。
[AR5-pim]static-rp x.x.x.x 默认情况下服务所有的组播组
[AR5-pim]static-rp x.x.x.x ACL RP服务ACL匹配的组播组
::: warning 服务所有组播组的static-rp只能指定一个,同时指定多个只有最后指定的RP生效。 可以使用ACL匹配组播组,静态手工指定该组播组的RP。 (一台设备上可以设置多个RP,但是不同的RP需要区分服务范围,同一个组播组只能有一个RP) 静态RP最多可以配置50个。 ::: ::: tip 如果配置的静态RP地址是本机某个状态为UP的接口地址,本机就作为静态RP。作为静态RP的接口不需要使能PIM协议。
没有指定ACL或指定了ACL但没有配置规则的,配置的静态RP为所有组播组服务(224.0.0.0/4)。 指定ACL并且配置规则后,静态RP只为通过该ACL过滤的组播组服务。 ::: 2. 动态RP:在PIM网络中运行BSR协议,实现RP的自动发现。
BSR:动态选举协议 BSR:自举设备。C-BSR:备份自举设备。
1.在PIM网络中管理员手工指定一个或多个C-BSR,C-BSR之间选举BSR 2.C-BSR起初认为自己就是BSR,在PIM邻居的接口上发送bootstrap(自举)报文 自举报文源地址是接口IP,目标地址是224.0.0.13,逐跳进行泛洪(收到自举报文的设备会将报文的源地址改变为自身发送该报文接口的IP地址,报文内容不变) 3.泛洪机制(自举报文泛洪防环) 1.自举报文的RPF检测机制(需要满足2个条件才能向邻居泛洪自举报文) 1.接收到自举报文的接口是自身去往BSR地址的RPF接口(去往BSR地址最优路径的接口) 2.接收到自举报文的SIP是路由器去往BSR地址的RPF邻居地址 4.BSR选举:(多个管理员手工配置的C-BSR中选举唯一的BSR设备) 1.当C-BSR接收到其他C-BSR的自举报文后,会进行BSR的选举: BSR优先级值越大越优先(默认值为0) 优先级值相等,则比较BSR的地址,地址大的优先 2.BSR可以抢占。当BSR失效后,C-BSR会重新选举BSR 3.BSR每隔60s发送自举报文
bootstrap(自举)报文:
RP(汇聚点设备)选举
1.在PIM网络中管理员手工指定一个或多个C-RP,C-RP之间选举RP汇聚点设备 2.C-RP设备在得知网络中BSR自举设备的地址后,会单播发送advertisement(通告)报文 3.BSR自举设备作为信息收集者,收集所有C-RP的信息(优先级、地址等) 4.BSR自举设备将C-RP信息整合为一个RP-Set集,添加到自举报文中泛洪至全网,
advertisement(通告)报文:
AR3指定为C-RP设备并单播通告后,将RP设备的信息放入自举报文:
::: tip BSR和RP报文分开的作用是提供备份机制(使用C-BSR和C-RP做备份)和节省RP设备资源(BSR帮助RP通告全网,可以节省RP设备的资源用于RP设备建立终端RPT树和源端SPT树。)
BSR失效RP还可以正常工作,C-BSR可以选出新的BSR。RP失效BSR携带的是RP-Set集,可以根据C-RP重新选出新的RP。 ::: ::: warning 自举报文中携带的RP-Set集内全部是C-RP信息,RP是由接收到自举报文的设备自行选举出的。 :::
3. PIM-SM实现的前提:
- 全网PIM路由器都知晓BSR和RP。
- 确保BSR地址和C-RP的地址是单播可达。
- 组播源地址和RP的地址是单播可达的。
PIM-SM实现组播流量发放
PIM-SM的共享路径树
- RPT树(共享树)是以RP为根,组成员为叶子节点的一棵路径树。 RPT树以(※,G)表项进行描述。
- (※,G)表项获取 最后一跳路由器收到组成员的成员报告报文,创建(※,G)表项。 最后一跳路由器向RP发送join报文,将(※,G)信息发送至上游设备。 上游设备收到(※,G)join报文会创建(※,G)表项,同时再向上游发送(※,G)join报文。 ::: tip “拉”的方式获取流量需要下游告知上游需要流量。 假设AR6下设备需要239.1.1.1组播流量,向AR6发送成员报告报文,AR6需要获得该组播组流量,会向上逐跳发送join报文直到RP,途中经过的设备都会创建(※,G)表项。 :::
- (※,G)表项的内容 上游接口(RPF接口)根据去往组播组G的RP地址判断。 下游接口是收到成员报告报文(最后一跳路由器)或者join报文(沿途路由器)的接口。
- join报文 ::: tip
join报文在PIM-DM中只作为剪枝否决,在PIM-SM中单独使用。 ::: ::: warning 上图中RP地址后的SWR三个bit含义: 1. S置0表示密集模式,置1表示稀疏模式(S bit显示即为置1)。 2. W置0表示该地址为组播源地址(S,G)表项,置1表示该地址为RP地址(※,G)表项。 3. R置0表示沿着SPT树发送给组播源,置1表示沿着RPT树发送给RP。 :::
PIM-SM的最短路径树
- SPT树(最短路径树) 以组播源为根,组成员为叶子节点的一棵路径树,以(S,G)表项进行描述。
- (S,G)表项获取 第一跳(连接组播源的)路由器收到组播流量会创建(S,G)表项。(组播源注册机制) 当RP设备(中间路由器)创建的(S,G)表项和(※,G)表项中组信息G相同,则需要向组播源发送(S,G)join报文进行加组,收到(S,G)join报文的设备(中间路由器)会创建(S,G)表项。
- (S,G)表项内容 上游接口(RPF接口)根据去往组G的源地址判断。(RPF检测,AR3去往源的接口为GE0/0/0) 下游接口是收到join报文的接口。
如上图,通过SPT树发送给源的join报文中组播源地址后没有W bit和R bit(即都置0)。
::: tip 组播源注册机制: 第一跳路由器收到组播流量后,会将第一个组播流量报文进行新的封装(注册报文)发给RP: (外层封装的源IP是第一跳路由器去往组播源的接口IP,目的IP是RP的地址) 注册报文以RP的地址作为DIP,以连接组播源的接口地址作为SIP。 RP收到注册报文并解封装后得到组播流量,(收到组播流量就会)创建(S,G)表项,RP回复注册停止报文: 正常情况只会发一个注册报文和注册停止报文。如果需要维护表项,注册报文间隔60s发送一个。 :::
::: tip PIM-SM将拓扑以RP为分界线分为两部分,组播源到RP使用SPT,RP到终端使用RPT。 组播流量发放过程是AR1将注册报文发送给AR3,在AR3上形成(S,G)表项。AR6将join报文逐条发送给AR3,在AR3上形成(※,G)表项,如果两个表项中的组信息对应,说明下发的组播流量是终端所需要的。 如果流量向下转发,沿途经过的所有设备也会建立SPT树,最终构建的SPT树以组播源为根,终端为叶子节点。 :::
PIM-SM实验
拓扑中每台路由器都在OSPF中宣告了环回口,在交换机使能multicast routing-enable,交换机互联接口使能pim-sm。 静态RP:
[AR5-pim]static-rp 3.3.3.3
[AR5-pim]static-rp 2.2.2.2 2000
查看RP的相关信息: 如上AR5的RP配置信息,只有配置了RP才会有相应的配置信息。
配置BSR、C-BSR:
[AR4-LoopBack0]pim sm 接口(或vlan等上)配置c-bsr前需要先在其上使能pim-sm
[AR4-pim]c-bsr LoopBack 0 环回口上配置c-bsr
泛洪机制: AR4的环回口配置了BSR,AR4的GE0/0/0接口抓包自举报文: 1. AR3接收到AR4发来的自举报文的接口是GE0/0/1,该接口是AR3自身去往BSR地址(AR4)的最优路径的RPF接口。 2. 上图中AR3收到的自举报文的SIP是10.1.34.4,该地址是AR3去往BSR地址(AR4)的RPF邻居(AR4 GE0/0/0)的地址。 上述两个条件必须同时满足。 ::: tip 假设AR2和AR4有直接相连的路径,AR2将从AR3收到的自举报文发给AR4,AR4到自身环回口的BSR是直连路由,不是收到AR2发来自举报文的接口,不满足条件1。 某台设备只有一个接口(即RPF接口)连接广播型网络(一个接口通过交换机连接多个邻居的场景),如果该接口收到的是其他设备转发来的自举报文,报文的SIP是其他设备的接口地址,不是RPF邻居的接口地址,不满足条件2。 ::: BSR抢占:
AR2设置BSR并将优先级改为1:
[AR2-LoopBack0]pim sm
[AR2-pim]c-bsr LoopBack 0
[AR2-pim]c-bsr priority 1
AR2被认为是此时的BSR:
AR3手工指定为C-RP:
[AR3-LoopBack0]pim sm
[AR3-pim]c-rp LoopBack 0
自举报文是BSR设备发出并泛洪全网的报文,携带了RP-Set集后,全网设备均可以了解RP设备信息:
AR5上配置过静态RP的信息,会同时显示静态和动态的RP信息: ::: tip 动态获取的RP信息优于静态配置的RP。 :::
多台C-RP时RP的选举:
[AR4-pim]c-rp LoopBack 0 在AR3指定为RP后,将AR4也指定为RP
AR3和AR4都是RP,自举报文会携带两台设备的信息:
RP设备具体选举过程: 全网组播设备收到自举报文后,每台设备都会根据报文中的RP-Set进行计算。由于每台设备的选举机制都相同,所以参数相同情况下,选择出的RP设备也相同。
先比较(服务的组的地址的)掩码,选最长的:
[AR3-pim]c-rp LoopBack 0 group-policy ACL (ACL通过通配符定义组播地址的掩码)
掩码相等,比较优先级值,值越小越优先:
[AR3-pim]c-rp priority (0-255)
优先级值相等,进行hash计算,得到的函数值越大越优先:
[AR2-pim]c-bsr hash-length (0-32)
hash函数值相等,则比较C-RP,地址大的优先(hash计算值几乎不可能相同)
自举报文中的Hash mask len即为哈希掩码长度:(C-BSR全局性哈希掩码长度为30) 修改AR2的hash长度为32使得优选AR2:
[AR2-pim]c-bsr hash-length 32
::: warning hash计算是循环计算的: hash掩码长度为0-32。 假设hash掩码长度为32,有2个RP,10个组播地址,则每1个地址为一组计算到一个RP上,分配方式是随机的, 如RP1得到1,RP2得到2,RP1得到3...以此类推,也可能是RP1得到1、2、3等。 假设hash掩码长度为30,有2个RP,10个组播地址,(32-30)²=4,即每4个地址为一组计算到一个RP上,RP1得到1、2、3、4,RP2得到5、6、7、8,RP1得到9、10。 :::
PIM-SM流量下发(RPT): 将AR2、AR4、AR5的PIM配置清空,将AR3作为BSR和RP设备。 在AR6上配置接口GE0/0/1,使用pim-sm接管IGMP表项:
[AR6-GigabitEthernet0/0/1]ip ad 192.168.1.254 24
[AR6-GigabitEthernet0/0/1]pim sm
[AR6-GigabitEthernet0/0/1]igmp enable
PC加入组播组后,上图中红框内的设备全部都会产生(※,G)表项(除RP外都会有上下游接口):
PIM-SM流量下发(SPT):
[AR1-GigabitEthernet0/0/0]ip ad 100.1.1.254 24
[AR1-GigabitEthernet0/0/0]pim sm
[AR1-GigabitEthernet0/0/0]ospf enable area 0
组播源下发流量后,AR3会创建(S,G)表项:
STP和RPT的关联:
当终端离组后,AR3到AR6的沿途设备都被剪枝,不存在pim路由表项,组播源下发流量后,AR1和AR3(单播发给RP)出现(S,G)表项,此时AR3的pim路由表如下: 将终端加组后,AR3、AR4、AR5、AR6都出现(※,G)表项,其中AR3作为RP,会有(S,G)和(※,G)两张表: 如上,(S,G)和(※,G)的下游接口都是GE0/0/1,AR3的流量是从AR1发来的,即(S,G)表项原本没有下游接口,存在下游接口是由AR3上的(※,G)表项下游接口映射而来。 (避免有多个出接口发送错误) RP到终端的路由器由于收到组播流量构建(S,G)表项,收到流量的接口RPF检测称为上游接口,从PIM邻居的接口进行下发,该接口也是来源于(※,G)表项的映射。
SPT切换机制
组播源到组成员存在另一条最优的路径,不经过原来SPT和RPT的路径。 最后一跳路由器(AR6)收到组播流量后(知道了组播源的地址),触发SPT切换: 根据组播源的地址进行RPF检测,检测去往组播源最近的接口GE0/0/0,在该接口发送(S,G)join报文,且该接口作为(S,G)表项的上游接口,(S,G)join报文逐跳向上发,上游设备AR5收到(S,G)join报文后,将收到报文的接口作为(S,G)表项的下游接口,AR5再根据源地址进行RPF检测,从 GE0/0/0接口发送(S,G)join报文给AR4,AR4收到后,RPF检测选出去往组播源最近的接口G0/0/2,不断进行join报文的加组。每次加组都构建一条组成员到组播源的最短路径。 ::: tip AR2、AR3、AR4三台设备RPF检测是IGP的路径优选(开销)。 :::
[AR2-GigabitEthernet0/0/2]ip ad 10.1.24.2 24
[AR2-GigabitEthernet0/0/2]ospf enable area 0
[AR2-GigabitEthernet0/0/2]pim sm
[AR2-GigabitEthernet0/0/2]ospf network-type p2p
[AR4-GigabitEthernet0/0/2]ip ad 10.1.24.4 24
[AR4-GigabitEthernet0/0/2]ospf enable area 0
[AR4-GigabitEthernet0/0/2]pim sm
[AR4-GigabitEthernet0/0/2]ospf network-type p2p
如上,组播源下发流量后,AR4的上游接口切换为GE0/0/2。SPT切换不影响AR3继续做BSR和RP设备。
构建新的路径后,最后一跳路由器会剪枝掉原RP发送的组播流量: AR3剪枝后不存在下游接口: AR3继续向上发送剪枝报文,AR2收到后将GE0/0/1接口剪枝,不再发送流量给RP:
[AR6-pim]spt-switch-threshold infinity 可以关闭最后一跳路由器发起的SPT切换
如上场景: 成员端DR:负责向RP发送(*,G)join和接收组播流量。 源端DR:负责向RP发送注册报文的。(比较PIM-Hello报文的PIM优先级,优先级越大越优先,优先级相等比较接口IP地址,越大越优先。) ::: warning DR只负责发送注册消息,如果DR去往RP的链路开销较大,RP会选择最优的路径和源构建SPT发送流量。 :::
PIM-SM断言机制: PIM-SM使用拉取方式获得组播流量,需要提前判断RPF接口和RPF邻居。 非RPF邻居不会下发流量,即PIM-SM模式下,广播网络中不会出现重复的组播流量,不需要断言机制。
如果想要出现断言机制处理,需要手工设置设备的RPF邻居(静态配置):
手工指定路由器A的RPF邻居为AR1,路由器B的RPF邻居为AR2:
[AR-A-pim]static-rp 1.1.1.1 1000
[AR-B-pim]static-rp 2.2.2.2 2000
::: tip 总结: PIM-DM使用“推”的方式把组播流量发送到每一个节点,如果有节点下没有组成员需要接收组播流量,就向上发送剪枝报文关闭接口,如果再需要接收流量,需要发送嫁接报文获取流量。发送嫁接报文的前提是存在(S,G)表项,没有(S,G)表项的话嫁接找不到源信息,嫁接失败。(S,G)表项原本是由组播流量进行维护,为了减轻设备压力,使用状态刷新报文维护(S,G)表项。在共享式广播网络中,流量扩散时可能收到重复组播流量,使用断言机制解决重复流量问题。
PIM-DM建立的组播分发树称为SPT(最短路径树),其特点是所有成员都在同一层次上。 ::: ::: warning (S,G)路由表项主要用于在PIM网络中建立SPT。对于PIM-DM网络和PIM-SM网络适用。 (*,G)路由表项主要用于在PIM网络中建立RPT。对于PIM-SM网络适用。 :::