PIM-DM
产生原因
为了构建组播网络,实现组播数据的转发,需要在网络中配置组播协议。PIM(Protocol Independent Multicast)是目前应用最为广泛的域内组播协议。其中PIM-DM(Protocol Independent Multicast-Dense Mode,协议无关组播-密集模式)是PIM协议的实现方式之一。
PIM-DM主要采用扩散-剪枝的方式转发组播数据,即PIM-DM首先将组播数据扩散到各个网段,然后再裁剪掉不存在组成员的网段。通过周期性的“扩散—剪枝”,构建并维护一棵连接组播源和组成员的单向无环SPT(Shortest Path Tree)树,最终实现组播数据的转发。由于对组播组成员稀疏的网络会产生大量Prune消息,而对规模较大的网络扩散-剪枝周期会很长,所以PIM-DM适合规模较小、组播组成员相对比较密集的网络。
相关概念
结合图4-1介绍PIM-DM协议的基本概念:
PIM设备
支持PIM协议的组播设备称为PIM设备。PIM设备上使能了PIM协议的接口称为PIM接口。
SPT
SPT称为最短路径树。以组播源为根,组播组成员为叶子的组播分发树称为SPT。SPT适用于PIM-DM、PIM-SM(Protocol Independent Multicast-Sparse Mode)和PIM-SSM(Protocol Independent Multicast-Source-Specific Multicast)。
实现过程
-
在PIM-DM域中,PIM设备通过周期性的向所有其它PIM设备发送Hello消息,来发现PIM邻居,维护PIM设备之间的PIM邻居关系。
说明:
缺省情况下,无论PIM设备是否收到来自邻居的Hello消息,都会接收其他的PIM控制消息或组播报文。但是如果PIM设备配置了邻居检查功能,则只有在PIM设备接收到来自邻居的Hello消息后,才会接收其他的PIM控制消息或组播报文。
-
PIM-DM假设网络中的每个子网都存在至少一个组播组成员,因此组播数据将被扩散到网络中的所有节点,网络中所有的PIM设备都能接收到组播数据。
-
组播数据扩散到网络中后,PIM-DM对没有组播数据接收者的分支进行剪枝,只保留包含接收者的分支,即确保网络中只有需要组播数据的PIM设备能够接收到组播数据,不需要组播数据的PIM设备接收不到组播数据。
-
如果设备处于剪枝状态,其上游PIM设备会维护一个“剪枝定时器”。当剪枝定时器超时,上游PIM设备恢复对不需要数据的下游PIM设备的数据转发,这样会导致不必要的网络资源浪费。采用状态刷新可使上游PIM设备周期性发送State-Refresh消息,刷新所有设备的剪枝定时器状态,对不需要数据的下游设备始终保持剪枝状态。
-
当被剪枝分支的节点上出现了组播组成员时,为了减少该节点恢复成转发状态所需的时间,PIM-DM使用嫁接机制主动恢复其对组播数据的转发。
-
如果在一个网段内出现多台PIM设备,则相同的组播报文可能会被重复发送到该网段。通过断言(Assert)可以为网段选定唯一的组播数据转发者,避免冗余的组播数据转发。
以下详细介绍具体的实现过程。
扩散(Flooding)
如图4-2所示,组播数据源(Source)把数据发送到Device A,Device A把数据报文发送给所有的邻居。这时Device B与Device C也会相互转发数据报文,但PIM-DM协议采用RPF(Reverse Path Forwarding)检查机制可以保证数据只从一个方向接收。(关于RPF检查请参见RPF单播逆向路由检查。)最后数据被扩散到连接接收者的Device B和没有连接接收者的Device C。以上的过程称之为扩散。
剪枝(Prune)
如图4-3所示,由于Device C没有接收者,不需要数据,则向上游Device A发送Prune消息,通知Device A不必再向该下游网段转发数据。Device A收到Prune消息后,停止向该下游接口转发,以上的过程称之为剪枝。
由于Device A上还存在其他处于转发状态的下游接口,因此Device A向Device B转发组播数据。后续到达的组播数据只向Device B转发,从而实现了一棵连接组播源和组成员Receiver的单向无环最短路径树。
状态刷新(State-Refresh)
如图4-3所示,若Device A对Device C所在网段处于剪枝状态,那么Device A对Device C的接口会维护一个“剪枝定时器”,当剪枝定时器超时,Device A就会恢复对不需要数据的Device C的数据转发,这样会导致不必要的网络资源浪费。
PIM-DM协议采用状态刷新特性解决此问题:离组播源最近的第一跳Device A周期性触发State-Refresh消息。State-Refresh消息在全网扩散,刷新所有设备上的剪枝定时器状态,对不需要数据的下游设备始终保持剪枝状态。
嫁接(Graft)
如图4-4所示,如果之前处于剪枝状态的Device C收到接收者User B的IGMP Report报文,请求转发组播源数据。为了避免扩散-剪枝的周期长,导致新出现的组成员不能快速得到组播数据,PIM-DM用嫁接方式实现数据的快速转发。
Device C发送Graft消息,请求上游Device A恢复对应出接口的转发。Device A收到Graft消息后,将连接Device C的出接口恢复转发,组播数据报文由该下游接口到达Device C。
断言(Assert)
如图4-5所示,如果Device B和Device C都能够接收到组播源Source发出的组播报文,并且均能通过RPF检查,创建(S,G)表项。Device B、Device C的下游接口连接在同一网段,那么Device B和Device C就会同时向该网段发送组播数据。Assert机制可以保证一个网段只能存在一个组播数据转发者。Assert过程如下:
Device B从下游接口接收到Device C发来的组播报文,RPF检查失败,报文被丢弃。同时,Device B向该网段发送Assert消息。
Device C将自身的路由信息与对方的Assert消息中携带的路由信息进行比较,由于自身到组播源的开销较大而落败。于是禁止该下游接口转发组播报文,将其从Device C的(S,G)表项的下游接口列表中删除。
Device C从该网段接收到Device B发来的组播报文,RPF检查失败,报文被丢弃。Assert过程结束。