在组播报文传输中,设备需要运行组播路由协议用于控制组播报文的转发。组播网络可以分为多个域,而域内最典型的组播路由协议是PIM(Protocol Independent Multicast,协议无关组播)协议,其根据实现机制不同主要可以分为PIM-DM和PIM-SM两种。
PIM-DM(Protocol Independent Multicast-Dense Mode,协议无关组播—密集模式)是密集模式的PIM协议,运行在组播设备上,用于发现和维护组播路由信息并确定组播报文转发路由的一种协议。
相比PIM-SM协议,PIM-DM适用于组播组成员分布相对密集的小型网络,理想的场景是PIM网络中每个路径下都有组播组成员需要接收报文,每个转发节点通过推送的方式将组播报文扩散至整个网络。
图1-1 PIM-DM协议部署示意图
如 REF _Ref63610028 \r \h \* MERGEFORMAT 图1-1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F00520065006600360033003600310030003000320038000000 ,当组播设备与其他组播设备相连接时,则需要在设备上部署PIM协议,此处部署为PIM-DM协议。
PIM-DM协议的基本工作原理为:
(1) 事先假设网络中的所有路径终端都存在组播组成员,将组播源发出的组播报文往四周推送,使其扩散至整个网络。
(2) 整个传播路径可以视为一棵由组播源为树根节点,各个组播组成员为叶子节点的树结构,该树称为SPT(Shortest Path Tree,最短路径树)。由于在最初形成的树结构上,存在部分叶子节点并非组播组成员,因此需要将该传播路径裁剪掉,以形成正确的树结构。
(3) 若后续某个路径上有组播组成员加入或者退出,则需要重新调整树的结构。组播报文沿着该树上的路径进行报文转发,传播路径是组播源到组播组成员的最短路径。
实现PIM-DM的工作机制主要包括建立邻居、扩散、剪枝、状态更新、嫁接和断言等内容。
建立邻居是PIM-DM协议的基础,PIM路由器与PIM路由器之间需要先建立邻居关系,才能继续交互其他PIM控制消息或转发组播报文,形成PIM网络。
建立邻居基于在PIM接口发送Hello报文来实现,主要内容可分为:邻居发现、协商协议参数、维持邻居关系。
l 邻居发现
PIM接口定期对外发送Hello报文,目的地址为224.0.0.13(IPv6则为ff02::d),报文源地址为接口IP地址,TTL值为1。同一网段中的PIM路由器接收目的地址为224.0.0.13(IPv6则为ff02::d)的报文,获取邻居信息,建立邻居关系。
当接口刚启动或是接口检测到新邻居时,会使用Triggered-Hello-Delay来产生一个随机时间,在该随机时间内,接口会往外发送hello报文。
l 协调协议参数
通过Hello报文协调协议参数,关键参数如下:
○ DR优先级(DR_Priority):路由器接口竞选DR的优先级,优先级比较高者获胜。
○ 邻居保持时间(Holdtime):保持时间,超时前认为邻居为可达状态。
○ 剪枝报文传播延迟(LAN_Delay):PIM设备收到剪枝报文后向上游发送剪枝报文的延迟时间。
○ 剪枝否决时间(Override-Interval):剪枝否决时间的时间间隔。
l 维持邻居关系
PIM路由器之间周期性地发送Hello消息。如果Holdtime超时还没有收到该PIM邻居发出的新的Hello报文,则认为该邻居不可达,将其从邻居列表中清除。PIM邻居的变化将导致网络中组播拓扑的变化。如果组播分发树上的某上游邻居或下游邻居不可达,将导致组播路由重新收敛,组播分发树迁移。
扩散是指将组播源发送的组播报文泛洪传播到全网,使网络中所有的节点成员都收到该报文。
组播设备对设备进行RPF检查,若检测失败,则报文被丢弃;若检查通过且存在出口,则往出口转发组播报文,最终使整个网络的所有节点成员都收到该组播报文。
对于不存在组播组成员的路径分支进行裁剪,使报文只往有组播组成员的路径上传输,即为剪枝。
(1) 组播设备转发报文时,对报文进行RPF检查,若通过检查后但不存在出口,则说明该路径上不存在组播组成员,即向上游发送设备发送剪枝(Prune)报文。
(2) 上游设备收到剪枝报文后,将发送该报文的接口标记为剪枝状态(Pruned),并设置一个剪枝状态计时器。
(3) 所有不必要的路径经过剪枝后,报文路径中只存在必要的转发分支,这些分支共同构成了SPT。
l 剪枝否决
下游PIM路由器在向上游发完剪枝信息后,不会立即对下游进行剪枝。若下游设备又有组播需求,可以重新向上游发送剪枝否决消息来取消剪枝。
如果上游PIM路由器在PPT(Prune-Pending Timer)时间内收到下游发来的剪枝否决消息,则取消剪枝。其中PPT=剪枝报文传播延迟+剪枝否决时间。
剪枝过程中,设备上维护着一个剪枝状态计时器,当计时器超时后,设备将恢复对该报文的转发。PIM-DM使用状态更新消息(State Refresh Message)来对计时器状态进行更新,避免不必要的剪枝状态变化。
离组播源最近的组播设备定期向下游设备发送状态更新消息,收到消息的下游设备也通过修改消息中的某些字段把本机的拓扑状态信息也加入到消息中,继续通告给下游设备,最终到达叶子设备,使得全网设备的状态信息都得到更新。
当被剪枝的路径上出现了组播组成员后,需要重新恢复组播报文在该路径上的转发,即为嫁接。
(1) 若剪枝路径上出现组播组成员,处于剪枝路径的设备收到成员加入消息,并向上游设备发送嫁接(Graft)报文,申请重新加入SPT。
(2) 上游设备收到下游设备的嫁接报文,并回复嫁接确认(Graft-Ack)报文,开始重新向该下游设备转发组播报文。
(3) 下游设备接收到上游设备发送的嫁接确认报文。若未收到嫁接确认报文,下游设备将重新发送嫁接报文,直到收到答复为止。
若同一网段中存在多台PIM路由器,则同一份组播报文有可能被重复发到该网段,此时需要为该网段指定专门一台PIM路由器来进行转发,避免冗余转发,即为断言。
SNMP管理器在与其他代理连接时,使用MIB中的信息,直接管理PIM-DM功能。
管理信息库MIB指明了网络元素所维持的变量(即能够被管理进程查询和设置的信息),直接管理PIM-DM功能。
l RFC 3973:Protocol Independent Multicast - Dense Mode (PIM-DM)
l RFC 2715:Interoperability Rules for Multicast Routing Protocols
l 实际环境部署中,若设备间通过多条链路建立多个PIM-DM邻居,且下游设备无接收需求或者只有少量接收需求时,可能会导致系统性能消耗偏高,建议使用PIM-SM模式来进行环境部署。
l 需要先确保网络中单播可通。
(1) REF _Ref49462878 \h \* MERGEFORMAT 配置PIM-DM基本功能 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F00520065006600340039003400360032003800370038000000
(2) (可选) REF _Ref62412492 \h \* MERGEFORMAT 配置PIM-DM Passive功能 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F00520065006600360032003400310032003400390032000000
(3) (可选) REF _Ref67929844 \h \* MERGEFORMAT 配置PIM邻居 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F00520065006600360037003900320039003800340034000000
(4) (可选) REF _Ref63584960 \h \* MERGEFORMAT 配置PIM状态更新功能 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F00520065006600360033003500380034003900360030000000
(5) (可选) REF _Ref62412579 \h \* MERGEFORMAT 配置PIM-BFD功能 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F00520065006600360032003400310032003500370039000000
(6) (可选) REF _Ref62412501 \h \* MERGEFORMAT 配置MIB功能 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000D0000005F00520065006600360032003400310032003500300031000000
建立PIM网络,向网络内的数据源和用户终端提供IPv4组播服务。PIM路由器之间必须首先建立邻居关系,才能交互其他PIM控制消息或转发组播报文。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
(3) 开启IPv4组播路由功能。
ip multicast-routing
缺省情况下,组播路由功能处于关闭状态。
(4) 进入接口配置模式。
○ 进入三层以太网接口配置模式。
interface ethernet-type interface-number
○ 进入三层聚合接口配置模式。
interface aggregateport interface-number
○ 进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
○ 进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
○ 进入SVI接口配置模式。
interface vlan interface-number
○ 进入环回口配置模式。
interface loopback interface-number
(5) 开启PIM-DM功能。
ip pim dense-mode
缺省情况下,接口上的PIM-DM功能处于关闭状态。
路由器互联接口,连接组播源、用户主机的接口。
在一个PIM网络中,如果接口只需接收组播数据报文,不需要参与PIM网络的拓扑构建(例如组播网络中的末梢网络设备连接用户主机的接口),则可以通过配置PIM-DM Passive功能,使接口不处理PIM-DM协议报文。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 进入接口配置模式。
○ 进入三层以太网接口配置模式。
interface ethernet-type interface-number
○ 进入三层聚合接口配置模式。
interface aggregateport interface-number
○ 进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
○ 进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
○ 进入SVI接口配置模式。
interface vlan interface-number
○ 进入环回口配置模式。
interface loopback interface-number
(4) 在接口上开启PIM-DM被动模式。
ip pim dense-mode passive
缺省情况下,接口上的PIM-DM被动模式处于关闭状态。
设备支持对Hello报文的协议参数进行调整,同时支持对邻居进行过滤,提高网络的安全性。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 进入接口配置模式。
○ 进入三层以太网接口配置模式。
interface ethernet-type interface-number
○ 进入三层聚合接口配置模式。
interface aggregateport interface-number
○ 进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
○ 进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
○ 进入SVI接口配置模式。
interface vlan interface-number
○ 进入环回口配置模式。
interface loopback interface-number
(4) 配置PIM邻居。以下配置皆为可选,请根据实际情况选择配置。
○ 配置Hello报文的发送间隔。
ip pim query-interval query-interval
缺省情况下,Hello报文的发送间隔为30秒。
每当Hello报文发送间隔被更新时,Hello报文保持时间(Hello hold time)会自动更新为Hello报文发送间隔的3.5倍。如果3.5倍的Hello报文发送间隔大于65535,则更新Hello报文保持时间为65535。
○ 在接口上配置Hello报文的传播延迟时间。
ip pim propagation-delay propagation-delay-time
缺省情况下,接口上Hello报文的传播延迟时间为500毫秒。
○ 配置Hello报文的剪枝否决时间。
ip pim override-interval override-interval
缺省情况下,Hello报文的剪枝否决时间为2500毫秒。
○ 配置PIM邻居过滤。
ip pim neighbor-filter { acl-name | acl-number }
缺省情况下,接口上的邻居过滤功能处于关闭状态。
只有符合ACL过滤条件的邻居地址才能够作为当前接口的PIM邻居,被ACL过滤的邻居地址将无法作为当前接口的PIM邻居。
设备支持开启与关闭PIM状态状态更新功能,同时支持调整PIM状态更新消息的发送间隔。
l 关闭状态刷新功能后,将不会处理和转发状态刷新报文。
l 关闭状态刷新功能可能会导致已经收敛的PIM-DM组播转发树重新收敛,造成不必要的带宽浪费和组播路由表振荡。通常情况下不需要关闭状态刷新功能。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 配置PIM-DM状态更新。以下配置皆为可选,请根据实际情况选择配置。
○ 在接口上关闭处理和转发PIM-DM状态刷新消息功能。
ip pim state-refresh disable
缺省情况下,处理和转发PIM-DM状态刷新消息。
○ 在接口上配置PIM-DM的状态刷新消息的发起时间间隔。
ip pim state-refresh origination-interval origination-interval
缺省情况下,PIM-DM的状态刷新消息的发起时间间隔为60秒。
PIM-DM支持与BFD功能联动,在接口上配置PIM-BFD功能后,路由器互联接口作为双向转发检测接口,能够快速检测出邻居变化,并通过断言规则为特定网段指定用于转发组播报文的路由器。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 进入接口配置模式。
○ 进入三层以太网接口配置模式。
interface ethernet-type interface-number
○ 进入三层聚合接口配置模式。
interface aggregateport interface-number
○ 进入三层以太网子接口配置模式。
interface ethernet-type interface-number.subnumber
○ 进入三层聚合子接口配置模式。
interface aggregateport interface-number.subnumber
○ 进入SVI接口配置模式。
interface vlan interface-number
○ 进入环回口配置模式。
interface loopback interface-number
(4) 在接口上开启PIM-BFD功能。
ip pim bfd
缺省情况下,接口上PIM-BFD功能处于关闭状态。
MIB功能允许设备使用MIB信息的元素来对PIM-DM协议进行管理。
(1) 进入特权模式。
enable
(2) 进入全局配置模式。
configure terminal
(3) 配置支持通过MIB管理PIM-DM协议。
ip pim mib dense-mode
缺省情况下,不支持通过MIB管理PIM-DM协议。
可以通过show命令行查看功能配置后的运行情况以验证配置效果。
同时还可以通过执行clear命令来清除各类信息。
注意
在设备运行过程中执行clear命令,可能因为重要信息丢失而导致业务中断。
表1-1 PIM-DM监视与维护
作用 |
命令 |
清除PIM-DM协议报文统计信息 |
clear ip pim dense-mode track |
查看PIM-DM接口的信息 |
show ip pim dense-mode interface [ interface-type interface-number ] [ detail ] |
查看PIM-DM邻居信息 |
show ip pim dense-mode neighbor [ interface-type interface-number ] |
查看PIM-DM的下一跳信息 |
show ip pim dense-mode nexthop |
查看PIM-DM的路由表信息 |
show ip pim dense-mode mroute [ ipv4-group-or-source-address-1 [ ipv4-group-or-source-address-2 ] ] [ summary ] |
查看PIM-DM协议报文统计信息 |
show ip pim dense-mode track |
在多台设备上配置PIM-DM基本功能,使其组成一个PIM-DM网络,从而用户主机能够接收到由组播源发出来的组播报文。
图1-2 PIM-DM基本功能配置组网图
l 在路由器上配置IPv4单播路由协议(如OSPF)。
l 在所有路由器上开启IPv4组播路由功能。
l 在设备互联接口和连接用户主机和组播源的接口上配置PIM-DM基本功能。
(1) 配置各接口IP地址,并开启单播路由协议(略)。
(2) 配置IPv4组播路由功能。
# 在设备A上配置。
Device A> enable
Device A# config terminal
Device A(config)# ip multicast-routing
# 在设备B上配置。
Device B> enable
Device B# config terminal
Device B(config)# ip multicast-routing
(3) 配置PIM-DM基本功能。
# 在设备A上配置。
Device A(config)# interface GigabitEthernet 0/1
Device A((config-if-GigabitEthernet 0/1))# ip pim dense-mode
Device A((config-if-GigabitEthernet 0/1))# exit
Device A(config)# interface GigabitEthernet 0/2
Device A((config-if-GigabitEthernet 0/2)# ip pim dense-mode
# 在设备B上配置。
Device B(config)# interface GigabitEthernet 0/1
Device B((config-if-GigabitEthernet 0/1))# ip pim dense-mode
Device B((config-if-GigabitEthernet 0/1))# exit
Device B(config)# interface GigabitEthernet 0/2
Device B((config-if-GigabitEthernet 0/2)# ip pim dense-mode
(1) 使组播源(192.168.1.10)向G(229.1.1.1)发送报文。使接收者A加入G,用户主机能够接收到G的报文。
(2) 查看设备A、B上的PIM-DM路由表。
DeviceA# show ip pim dense-mode mroute
PIM-DM Multicast Routing Table
(192.168.1.10, 229.1.1.1)
MRT lifetime expires in 182 seconds
Source directly connected on GigabitEthernet 0/1
State-Refresh Originator State: Originator
SRT:57, SAT:147
Upstream IF: GigabitEthernet 0/1
Upstream State: Forwarding
Assert State: NoInfo
Downstream IF List:
GigabitEthernet 0/2, in 'olist':
Downstream State: NoInfo
Assert State: NoInfo
l DeviceA的配置文件
!
ip multicast-routing
!
interface GigabitEthernet 0/1
no switchport
ip pim dense-mode
!
interface GigabitEthernet 0/2
no switchport
ip pim dense-mode
!
l DeviceB的配置文件
!
ip multicast-routing
!
interface GigabitEthernet 0/1
no switchport
ip pim dense-mode
!
interface GigabitEthernet 0/2
no switchport
ip pim dense-mode
!
l IPv4单播路由配置错误。
l 某台路由器未开启IPv4组播路由功能。
l 某个接口未开启PIM-DM功能。