2022-11-01 网工进阶(三十四) IP组播协议(PIM)-模式概述、组播分发树的分类、PIM路由表项、PIM-DM工作原理(组播分发树的形成、配置举例)

PIM协议介绍

PIM(Protocol Independent Multicast)协议无关组播。协议无关指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息。目前常用版本是PIMv2,PIM报文直接封装在IP报文中,协议号为103PIMv2组播地址为224.0.0.13。作为组播路由解决方案,它直接利用单播路由表的路由信息,对组播报文执行RPF检查,检查通过后创建组播路由表项,从而转发组播报文。

PIM模式

PIM-DM(PIM-Dense Mode,PIM密集模式)

主要用在组成员较少且相对密集的组播网络中,该模式建立组播分发树的基本思路是“扩散-剪枝”,即将组播流量全网扩散,然后剪枝没有组成员的路径,最终形成组播分发树

PIM-SM(PIM-Sparse Mode,PIM稀疏模式)

主要用在组成员较多且相对稀疏的组播网络中,该模式建立组播分发树的基本思路是先收集组成员信息,然后再形成组播分发树。使用PIM-SM模式不需要全网泛洪组播,对现网的影响较小,因此现网多使用PIM-SM模式。

PIM-SM模式根据组播服务模型又可以分为ASM与SSM

PIM-SM(ASM):为任意源组播建立组播分发树。

PIM-SM(SSM):为指定源组播建立组播分发树。

组播分发树的分类

通过PIM形成的组播分发树主要分为SPT与RPT两种

SPT

以组播源为根,组播组成员为叶子的组播分发树称为SPT(Shortest Path Tree),在PIM-DM与PIM-SM中均有使用。

SPT又被称为源树,SPT在PIM-DM模式与PIM-SM模式的组播网络中均有使用。

RPT

以RP(Rendezvous Point)为根,组播组成员为叶子的组播分发树称为RPT(RP Tree),在PIM-SM中使用。

RPT又被称为共享树,RPT主要在PIM-SM模式的组播网络中被使用。

PIM路由表项

PIM路由表项即通过PIM协议建立的组播协议路由表项。

路由表项种类

(S,G)路由表项

主要用于在PIM网络中建立SPT。对于PIM-DM网络和PIM-SM网络适用。S表示组播源,G表示组播组。

(*,G)路由表项

主要用于在PIM网络中建立RPT。对于PIM-SM网络适用。*表示任意

相关命令

查看pim路由表项

<R1>display pim routing-table

FLAG字段描述

项目

描述

2msdp

RP最近收到注册消息并学习到(S,G)信息,准备通知MSDP,在下一个SA消息中包含该(S,G)表项。

act

已经有实际数据到达的组播路由表项。

del

准备删除的组播路由表项。

exprune

RPT上的表项被剪枝且RPT上没有接收者对源感兴趣。

ext

包含了由其他组播路由协议提供的出接口的路由表项。

loc

在与组播源网段直连的设备上的组播路由表项。

msdp

RP最近从收到的MSDP SA消息中学习到的路由表项。

niif

未确定入接口的路由表项。

nonbr

找不到朝向RP或源的上游邻居地址(link-local地址)的路由表项。

none

无任何标志的路由表项。

rpt

处于共享树上但不使用共享树数据的路由表项。

sg_rcvr

表示路由器有源S的本地(S,G)接收者,且PIM是下游接口Owner。

sgjoin

表示路由器有源S的本地(S,G)接收者,但PIM不是下游接口Owner。

spt

最短路径树上的路由表项。

swt

处在向SPT切换过程中的路由表项。

upchg

路由变化的标志,表示当前的表项在使用原来的上游转发数据,正在等待数据从新的接口到来。

wc

表示(*,G)表项。

转发规则

如果存在(S,G)路由表项,则由(S,G)路由表项指导报文转发。如果不存在(S,G)路由表项,只存在(*,G)路由表项,则先依照(*,G)路由表项创建(S,G)路由表项,再由(S,G)路由表项指导报文转发

组播路由表项

最后一跳路由器的组播路由表项主要基于PIM(S,G)路由表项,IGMP组表项和IGMP路由表项汇总形成。

其余组播路由器的组播路由表项主要基于PIM(S,G)路由表项形成。

PIM-DM工作原理

基本概念

PIM-DM主要用在组成员较少且相对密集的网络中,通过“扩散-剪枝”的方式形成组播转发树(SPT)。

PIM-DM在形成SPT的过程中,除了扩散(Flooding)剪枝(Prune)机制外,还会涉及邻居发现(Neighbor Discovery)嫁接(Graft)断言(Assert)状态刷新(State Refresh)机制。
 

PIM-DM协议报文

PIM协议报文直接采用IP封装,目的地址224.0.0.13IP协议号103

PIM-DM与PIM-SM使用的协议报文类型有所不同。

PIM-DM使用报文

报文类型

报文功能

Hello

用于PIM邻居发现,协议参数协商,PIM邻居关系维护等

Join/Prune(加入/剪枝)

加入报文用于加入组播分发树,剪枝报文则用于修剪组播分发树。加入及剪枝报文在PIM中使用相同的报文格式,只不过报文载荷中的字段内容有所不同

Graft(嫁接)

用于将设备所在的分支嫁接到组播分发树

Graft-ACK(嫁接确认)

用于对邻居发送的Graft报文进行确认

Assert(断言)

用于断言机制

邻居发现

组播转发路径只能在PIM邻居之间建立,因此邻居发现是形成组播分发树的先决条件。邻居发现主要通过PIM Hello包完成。PIM Hello数据包的默认发送间隔为30秒。

邻居发现与维持

当路由器的接口激活PIM后,接口便周期性发送PIM Hello数据包,目的地址224.0.0.13。交互Hello报文后,组播路由器之间就能知道邻居信息,建立PIM邻居关系。

维持邻居关系

PIM邻居关系依靠Hello包维持,邻居超时时间默认105s,如果超时时间内收不到邻居发来的Hello包,则删除邻居关系。

Hello报文中携带多项PIM协议报文参数,主要用于PIM邻居之间PIM协议报文的控制。

DR_Priority:表示各路由器接口竞选DR的优先级,优先级越高越容易获胜。

Holdtime:表示保持邻居为可达状态的超时时间。如果在超时时间内没有收到PIM邻居发送的Hello报文,路由器则认为邻居不可达。

LAN_Delay:表示共享网段内传输Prune报文的延迟时间。

Neighbor-Tracking:表示邻居跟踪功能。

Override-Interval:表示Hello报文中携带的否决剪枝的时间间隔。

抓包观察---PIM-DM Hello报文

1 PIM版本,值为2。

2 消息类型,值为0。

3 保留字段,发送时设置为0,接收时忽略此值。

4 校验和。

5 PIM的选项,采用Type-Length-Value(TLV)格式。

6 表示保持邻居为可达状态的超时时间:105秒

7 竞选DR的优先级:1

8 Hello消息中携带的随机数,表示当前邻居状态。如果状态发生更新则随机数也会更新。当路由器发现接收到的来自上游的Hello消息中包含不同Generation ID值,则认为上游邻居已经丢失或上游邻居状态已经改变。

9 Join消息抑制能力位:0

传递Prune消息的延迟时间:500毫秒

执行剪枝前的否决时间:2500毫秒

10 邻居状态刷新时间间隔:60秒

组播分发树的形成

PIM-DM模式首次形成组播分发树主要依赖扩散机制剪枝机制断言机制DR选举机制

扩散机制:组播数据包向所有的PIM邻居泛洪,同时组播路由器产生组播路由表项。

断言机制:当组播转发过程中存在多路访问网络,则需要选举出一个组播转发路由器,避免重复组播报文。

剪枝机制:如果组播路由器下没有组成员,则将源到该组播路由器的组播转发路径剪枝

扩散机制

组播源发送的组播报文会在全网内扩散。当PIM路由器接收到组播报文,先进行RPF检查,通过后会在该路由器上创建(S,G)表项,之后会向所有PIM邻居发送。

PIM-DM形成的(S,G)表项有老化时间(默认210s),如果老化时间超时前没有收到新的组播报文,则删除(S,G)表项。

扩散机制会周期性(默认180s)全网扩散组播数据,周期性扩散的主要目的是探测是否有新成员加组,但是由于全网扩散组播数据会浪费大量带宽,所以现在的组播网络一般使用“状态刷新机制”加上“嫁接机制”来实现周期性全网扩散感知新成员加组的目的。

断言机制

当一个网段内有多个相连的PIM路由器向该网段转发组播报文时,需要通过断言机制(Assert)来保证只有一个PIM路由器向该网段转发组播报文。

断言机制选举规则

PIM路由器在接收到邻居路由器发送的相同组播报文后,会向该网段发送断言(Assert)报文,进行Assert选举。Assert报文内会携带到组播源的单播路由前缀路由优先级开销

选举规则

1 单播路由协议优先级较高者获胜。

2 如果优先级相同,则到组播源的开销较小者获胜。

3 如果以上都相同,则下游接口IP地址最大者获胜。

选举完成后的行为

获胜一方的下游接口称为Assert Winner,将负责后续对该网段组播报文的转发。

落败一方的下游接口称为Assert Loser,后续不会对该网段转发组播报文,PIM路由器也会将其从(S,G)表项下游接口列表中删除。这种抑制转发的状态保持一段时间,这段时间就被称为Assert保持时间,默认180s超时后,竞选失败的设备会恢复转发从而触发新一轮竞选

剪枝机制

对于没有组成员连接的组播路由器,组播网络无需再将组播流量继续发往该设备。通过剪枝机制,组播网络可以将此类路径剪枝。

 下游路由器收到组播数据,发现自身无组成员连接,触发剪枝机制,将自身的组播路由表出接口设置为null,发送Prune报文给上游设备,上游路由器将组播路由表出接口列表中的本接口移除。

维护组播分发树

组播分发树形成后不会一直存在,也不会一直不变。 在PIM邻居关系稳定,组成员没有变化的情况下,维护组播分发树一般有两种方式: 1 持续发送组播报文,保证组播路由表项能一直存在。 2 发送状态刷新报文,保证组播路由表项的下行接口状态不发生变化。

状态刷新机制

上游路由器为被裁剪的下游接口启动一个剪枝定时器(默认210s),定时器超时后接口恢复转发。组播报文重新在全网范围内扩散,新加入的组成员可以接收到组播报文。随后,下游不存在组成员的叶子路由器将向上发起剪枝操作。通过这种周期性的扩散-剪枝,PIM-DM周期性的刷新SPT。

在剪枝后,如果下游 路由器有组成员加入,并且希望在下次“扩散-剪枝”前就恢复组播报文转发,则执行嫁接动作;如果下游路由器一直没有组成员加入,希望该接口保持抑制转发状态,则执行状态刷新动作。

嫁接机制

PIM-DM通过嫁接机制,使有新组成员加入的网段快速得到组播报文。

叶子路由器通过IGMP了解到与其相连的用户网段上,组播组G有新的组成员加入。随后叶子路由器会基于本地的组播路由表向上游发送Graft报文,请求上游路由器恢复相应出接口转发,将其添加在(S,G)表项下游接口列表中。

相关命令

开启路由器的组播路由功能

[R1]multicast routing-enable 

在接口上开启PIM-DM

[R1-GigabitEthernet0/0/0]pim dm 

查看PIM邻居参数

<R1>display pim neighbor 

查看PIM路由表参数

<R1>display pim routing-table 

配置举例---PIM-DM模式

如图所示的组播网络采用了PIM-DM模式,组播源(MCS1)通过组播转发网络(R1、R2、R3、R4、将组播数据通过交换机SW1发往成员端(PC1、PC2)

组播源(MCS1)

 

组播转发网络

R1配置

#
 sysname R1
#
multicast routing-enable        //开启组播功能
#
interface GigabitEthernet0/0/0
 ip address 192.168.0.254 255.255.255.0 
 pim dm                        //接口下开启PIM-DM模式
 ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/1
 ip address 10.1.0.1 255.255.255.0 
 pim dm
 ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/2
 ip address 10.1.1.1 255.255.255.0 
 pim dm
 ospf enable 1 area 0.0.0.0
#
ospf 1 router-id 1.1.1.1 
 area 0.0.0.0 
#

R2配置(R3配置类似)

#
 sysname R2
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
 ip address 10.1.0.2 255.255.255.0 
 pim dm
 ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/1
 ip address 10.1.2.2 255.255.255.0 
 pim dm
 ospf enable 1 area 0.0.0.0
#
ospf 1 router-id 2.2.2.2 
 area 0.0.0.0 
#

R4配置

#
 sysname R4
#
multicast routing-enable
#
interface GigabitEthernet0/0/0
 ip address 10.1.2.4 255.255.255.0 
 pim dm
 ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/1
 ip address 10.1.3.4 255.255.255.0 
 pim dm
 ospf enable 1 area 0.0.0.0
#
interface GigabitEthernet0/0/2
 ip address 192.168.1.254 255.255.255.0 
 igmp enable                   //连接成员端的接口开启IGMP
 ospf enable 1 area 0.0.0.0
#
ospf 1 router-id 4.4.4.4 
 area 0.0.0.0 
#

成员端PC1配置(PC2配置类似)

 

 配置完后点击组播源的运行和成员端的启动VLC验证结果。

猜你喜欢

转载自blog.csdn.net/x629242/article/details/127641744