IP组播 -
.多播源分发树和共享分发树
源分发树,保证目的到达源的路径最短,但要为每一个多播源保持一棵树,CPU使用率高。
共享分发树,要选RP,能保证目的到RP最近,不用为每一个源保持一棵树,而共同保持一棵以RP为根的树即可,这样节约了设备资源,但是不能再保证到源的路径最近了。(源发向rp的多播以单播ip in ip的形式)
PIM(IPv4)简介
PIM(Protocol Independent Multicast)称为协议无关组播,主要用于将网络中的组播数据流发送到有组播数据请求的组成员所连接的组播设备上,从而实现组播数据的路由查找与转发。
这里的协议无关指的是与单播路由协议无关,即PIM不需要维护专门的单播路由信息。
作为组播路由解决方案,它直接利用单播路由表的路由信息,对组播报文执行RPF(Reverse Path Forwarding,逆向路径转发)检查,检查通过后创建组播路由表项,从而转发组播报文。
目前设备实际支持的PIM协议包括:PIM-DM(PIM-DenseMode,密集模式)、PIM-SM(PIM-Sparse Mode,稀疏模式)。
1992年,为了承载网络视频会议、音频会议,以MOSPF和DVMRP为组播路由协议的虚拟IP组播骨干网——Mbone建立成功。这为组播技术应用和推广起到了积极作用,在随后的十几年,组播路由协议得到了很大发展。
但是随着多个组播路由协议的开发与应用,人们渐渐感觉到,如果像单播路由一样通过多种路由协议算法来动态生成组播路由,会带来不同路由协议间在互相引入路由时操作繁琐的问题。而且网络设备对于单播和组播路由信息都需要维护。这也就催生了一种与单播路由协议无关的组播路由协议——PIM。
PIM协议只专注于组成员和组播源状态相关的信息,而选取路径的信息直接从单播路由表获取。因此它不需要维护庞大的路由信息,从而降低了PIM协议的复杂性。这使得PIM协议成为应用最广泛的域内组播协议。
由PIM路由器所组成的网络称为PIM网络。通常一个大的PIM网络可以划分为多个PIM域来管理和控制组播报文的转发,这里的域内组播协议即是指PIM域内组播协议。
一、PIM基本概念
图1 PIM网络示意图
通过上图1来介绍PIM的一些基本概念。
1、PIM组播分发树
PIM网络以组播组为单位在路由器上建立一点到多点的组播转发路径。由于组播转发路径呈现树型结构,也称为PIM组播分发树MDT(Multicast Distribution Tree)。
组播分发树主要包括以下两种:
以组播源为根,组播组成员为叶子的组播分发树称为SPT(Shortest Path Tree,最短路径树)。SPT同时适用于PIM-DM网络和PIM-SM网络。
如上图1中的RouterE→RouterD→RouterA(RouterB),就是一棵以Source为根,以HostA、HostB为叶子的SPT。
以RP(Rendezvous Point,汇集点)为根,组播组成员为叶子的组播分发树称为RPT(RP Tree,汇集点树)。RPT适用于PIM-SM网络。
2、PIM路由器
在接口上使能了PIM协议的路由器即为PIM路由器。在建立组播分发树的过程中,PIM路由器又分为以下几种:
叶子路由器:
与用户主机相连的PIM路由器,但连接的用户主机不一定为组成员,如上图1中的RouterA、RouterB、RouterC。
第一跳路由器:
组播转发路径上,与组播源相连且负责转发该组播源发出的组播数据的PIM路由器。如上图1中的RouterE。
最后一跳路由器:
组播转发路径上,与组播组成员相连且负责向该组成员转发组播数据的PIM路由器。如上图1中的RouterA、RouterB。
中间路由器:
组播转发路径上,第一跳路由器与最后一跳路由器之间的PIM路由器。如上图1中的RouterD。
3、PIM路由表项
PIM路由表项即通过PIM协议建立的组播路由表项。PIM网络中存在两种路由表项:(S,G)路由表项或(*,G)路由表项。S表示组播源,G表示组播组,*表示任意。
(S,G)路由表项主要用于在PIM网络中建立SPT。对于PIM-DM网络和PIM-SM网络适用。
(*,G)路由表项主要用于在PIM网络中建立RPT。对于PIM-SM网络适用。
PIM路由器上可能同时存在两种路由表项。当收到源地址为S,组地址为G的组播报文,且RPF检查通过的情况下,按照如下的规则转发:
如果存在(S,G)路由表项,则由(S,G)路由表项指导报文转发。
如果不存在(S,G)路由表项,只存在(*,G)路由表项,则先依照(*,G)路由表项创建(S,G)路由表项,再由(S,G)路由表项指导报文转发。
PIM路由表项中主要用于指导转发的信息如下:
组播源地址。
组播组地址。
上游接口:本地路由器上接收到组播数据的接口,如上图1中的Int3。
下游接口:将组播数据转发出去的接口,如上图1中的Int1、Int2。