IP多点传送路由协议解析
固网产品技术支持部 辛庆祥
在互联网上 IP多点传送技术应用越来越广泛 与园区网内多点传送不同的是 在互联网
上 多播数据的发送端和接受端可能位于不同的网络上 这样 如何让这些多播终端系统正确
的跨网络收发数据而又不浪费带宽 便成了一个复杂的问题 IP多点传送路由协议便是为解决
这些问题而开发的 到目前为止 这些协议技术已经完全成熟 但推广却不十分广泛 下面我
们简单介绍一下IP多点传送路由协议的基本原理 在这基础上 我们对目前流行的两个IP多点
传送路由协议做出解析
一 IP多点传送路由协议基本原理
首先要声明的是 利用目前的单点传送技术完全可以解决多点传送问题 如下图所示
B
A
S
C
多点数据发送源S有数据要发送 而终端A B是多点数据接收端 中间的路由器不支持多
点传送路由协议 于是 我们可以采用这样的方法解决 当A B C终端系统上的接收进程启
动的时候 利用单点传送方式向源S登记 在源S中 保存一张接受端地址列
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
每当S有数据
要发送 它便可以向列表中的每个条目发送数据的一份拷贝 当然 这些拷贝数据是单点传送
的
这样解决多点传送问题有两个弊端
1 数据接收系统需要向数据源登记 这要求接受端有额外的软件模块
2 数据源每传送一个数据包 都要复制多份 然后给每个终端发过去 这样在网 络链路
上传送许多相同的数据 严重浪费了资源 在接受端很多 网络资源又缺乏的情况下 这是不
能忍受的
为了解决上面的问题 我们引入多播组的概念 所谓多播组 就是一些特定应用数据的发
送端和接受端的集合 在这个集合中 任何一个端系统都可以进行发送数据和接受数据 这个
多播组由一个组号G表示 在IP协议中 G便是一个D类IP地址 这里 每个组G是和特定应
IP多点传送路由协议解析
1
用相关的 与终端系统无关 一个终端系统要想发送或者接收数据 唯一的办法是加入多播
组
再介绍一下多播路由器的概念 所谓多播路由器 就是一个支持多播特性的路由器 它上
面运行两个进程 其中一个进程监视本地的终端系统 看是否有终端系统加入一个多播组 或
对一个已经加入多播组的终端系统做出响应 另外一个进程是多点广播路由协议进程 它与其
他多播路由器交换信息 确定每个路由器的本地终端系统是否需要多点数据
在这样两个概念的基础上 我们查看一种有效的处理多播数据传送的方法 首先 当接收
多播数据的进程在终端系统上启动的时候 它向跟本地网相连的多播路由器登记 表明自己想
接收组G的多播数据 比如 在下图中 终端系统B C向路由器RT2 RT3登记 说明自己想要
收到组G的多播数据
B
S RT2
RT1
RT3 C
于是 RT2和RT3就在自己的内部表格上登记B和C 并建立自己的多播路由表 这个任务
由监视进程完成 并触发路由器之间的信息交换进程 就是多播路由协议进程 在所有三
个路由器之间交换自己的多播路由表信息 这其实是一种距离向量算法 于是 RT1就知道
了在RT2和RT3的本地网中有组G的数据接受端 并建立相应的多播路由表 当数据源S发送多
播数据的时候 RT1通过查询自己的多播路由表 把数据复制成两份 通过两个接口发送到
RT2和RT3 于是 RT2和RT3再根据自己的多播路由表进行转发 需要注意的是 数据源S在
发送数据的时候 仅仅发送了一份 并且数据源根本不知道接受端的存在 在数据的具体传播
过程中 也没有多余的复制 仅在需要复制的地方才发生复制 所以 上面提到的两个问题都
已经解决
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
上面的多播数据传送路径 可以看出是一个树形结构 树的根是多播数据源所在的网
络 分枝点是多播路由器 我们把这棵树就叫做多播路径树 其实 多点传送路由协议的目的
就是生成和维护这样的一棵多播路径树 目前存在两种形式的多点广播树 源转发树和共享转
发树 上面我们看到的就是源转发树 它是以数据源所在网络为根 所有数据接收端为叶的一
个树 在一个多播组内 每个数据源都对应一棵源转发数 共享转发树是整个多播组内所有数
据源和接受端共享的一棵树 它以一个集合点RP 就是一个指定的路由器 为根 所有接受端
为叶 如下图所示
IP多点传送路由协议解析
2
S
A
B
RP
任何一个数据源 假设为S 在发送多点数据包的时候 先把数据包发到RP 然后RP再沿
各个接收终端所在路径进行下发 直到到达接收终端 这样容易形成两个问题
1 在RP处形成瓶径 造成网络拥塞
2 数据包转发经过的路径不一定是最优的 因为它需要先发送到RP 再由RP再进行转
发 但从数据源到RP和RP到任何一个接受端所走的路径都是最优的
为了避免上面的两个问题 我们把源转发树和共享转发树进行结合 产生一种折中的方
案 当数据量小的时候 使用共享转发树 但当数据量超过了一定的上限 则由路由器重新计
算一棵源转发树 使用源转发树来转发数据包 这就是PIM-SM的基本思想 在下面介绍
PIM-SM的时候要详细介绍
上面我们还提到多播路由表的概念 所谓多播路由表 跟传统的路由表含义类似 就是一
些路由项的集合 但在多播领域 多播路由表是由多播路由项构成的集合 多播路由项是这样
一种数据结构 S G IIF OIFLIST 其中S是数据源的网络地址 G就是组号 在IP协
议中 就是一个D类IP地址 IIF是针对S和G的多播数据包进入的接口 OIFLIST是输出接口
的集合 它表示针对源S和组G的数据 如果从IIF接口进来 那么向OIFLIST集合中的所有接口
转发 在实际中 我们用集合的列举方式表示OIFLIST 比如 有这样的路由项 S G IIF
{S0 S1 E0} 其中 {S0 S1 E0}就是OIFLIST 从全局的观点看 整个网络中的所有多
播路由器中的多播路由表项组合起来 刚好描述了多播路径树
还有一个问题就是多播路由表项中的 IIF和OIFLIST是怎样形成的 在这里 IIF是通过
RPF技术形成的 所谓RPF 反向路径转发 就是接受到的多播包必须从单播路由表中到数据
源的接口上收到 举一个例子 假设有多播路由表项 S G IIF OIFLIST 那么如果路由
器向源S S是数据源所在的网络的网络地址 发送单点数据 其发送接口必然是IIF 还有一个
概念是RPF检查 就是检查收到的多播包 看它的接收接口是不是RPF接口 如果是 则正常接
收 否则丢弃包 OIFLIST中接口的确定则因路由协议而定 但OIFLIST中的任何一个接口必
然满足下列条件之一
1 该接口连接另外一个多播路由器
2 该接口连接一些数据接受端
3 手工加入OIFLIST
IP多点传送路由协议解析
3
我们具体查看一下多点数据包是怎样根据多播路由表项转发的 假设多播路由器RT1的多
播路由表中有一个多播路由表项 S G IIF OIFLIST 并收到了一个多播数据包 RT1提
取数据包的数据源地址S1和多播地址G1 根据这两个数据来检索多播路由表 假设检索到的路
由表项是 S G IIF OIFLIST 检索不到的处理将在具体路由协议讨论的时候进行 然
后进行RPF检查 看接收接口是不是IIF 如果不是 则丢弃该包 如果RPF检查通过 则通过
OIFLIST中的接口发送出去
有一条特殊的多播路由表项值得说明 就是 * G NULL OIFLIST 这条路由表项
跟普通路由表中的默认路由有同样的动机 它对数据源不做具体要求 只对组地址作了限制
当进行路由表查找的时候 如果找不到匹配的项而且数据包的组地址为G时 则由这条路由项
来决定进一步的动作 具体的动作依赖于具体的路由协议 比如在PIM-DM中 当收到一个数
据包的时候 如果数据包的组地址为G且在路由表中没有查到具体的 S G 项 则拿 *
G NULL OIFLIST 匹配 如果没有本路由表项 则丢弃该包 成功后 创建 S G
IIF OIFLIST 项 然后以本项为依据进行转发 其中 IIF是单播路由表中到源S的接口
OIFLIST是输出接口列表 还有一条路由表项 * G RP OIFLIST 在PIM-SM路由协
议中起作用 在下面的介绍中要详细介绍
到目前为止 多点传送技术的基本概念已经介绍完毕 下面结合这些概念来具体分析两个
流行路由协议的运作过程 即PIM-DM和PIM-SM
二 IP多点传送路由协议PIM-DM
先分析一下协议的名字 PIM-DM 所谓PIM 是协议无关模式 PROTOCOL INDEPEND
MODE 的缩写 而DM 则是密集 DESEN MODE 的缩写 联合起来 就是密集方式的协
议无关模式多播路由协议
所谓协议无关模式 这个协议在形成多点传送路由表的时候 使用单点传送路由协议形成
的单播路由表 比如 假设有多点传送路由表项 S G IIF OIFLIST 我们知道 IIF是
根据RPF技术确定的 在运行RPF的时候 路由器直接查找由单点传送路由协议形成的路由表
找到到S的路由项 这个路由项对应的出接口便是IIF 有的多点传送路由协议不是这样 它运
行自己的单点传送路由协议 形成自己的单点传送路由表 在运行RPF的时候 使用自己生成
的单点路由表来计算IIF 这样的协议最典型的是DVMRP 在这种情况下 多点路由协议形成
的单点传送路由表跟路由器本身运行的单点路由协议形成的单点传送路由表可能不同 因而跟
源S对应的IIF可能不是在单点传送路由表中的出接口
为了更好的了解PIM-DM的工作原理 我们结合一个具体的案例来分析其运作过程 一些
重要概念在分析过程中详细解释 假设有如下的网络拓扑图形
IP多点传送路由协议解析
4
S R1
R2
RT1
RT2RT3
RT4
RT5
假设S是发送组播数据的数据源 它向组地址G发送组播数据 R1和R2是组播数据的接受
端 RT1 RT2 RT3 RT4是连接终端的路由器 图中路由器间的所有链路都是点到点的
PPP连接 在每一个路由器上我们都启动了PIM-DM进程 并在每个接口上都启动多点传送 这
样路由器就初始化了一个重要的数据结构--接口列表(IntList) 开始的时候该列表是空的
开始的时候 所有路由器都在自己的接口上发送HELLO探测消息 来探测本接口是否连
接一个运行PIM-DM的路由器 并在每个接口上侦听IGMP消息 如果满足下面的条件之一 它
就会把该接口加入接口列表(IntList)
一 通过侦听IGMP消息 检测到了这个接口上有多点广播数据接受端
二 接收到HELLO报文
三 手动把该接口加入
这样经过一段时间之后 路由器就形成了自己的接口列表(IntList) 以RT1为例 经过一段
时间之后 RT1形成了自己的接口列表{S0 S1} 因为在这两个接口上接收到了HELLO消息
因为E0接口连接的是数据发送端 而多点广播数据发送端是不发送IGMP加入消息的 所以
E0不在接口列表中 再比如RT3 形成的接口列表为{E0 S0 S1 S2} 因为RT3在S0 S1
S2上接收到了HELLO消息 在E0接口上接收到了IGMP加入消息 这个接口列表是动态变化
的 比如 当路由器很长一段时间没有在接口上收到HELLO消息或者接口上没有了多播数据接
受端 则就把本接口从IntList中删除
这时 假设源S发送了一个多点广播数据包P 便触发了一系列动作
首先 跟源S直接关联的路由器RT1收到多点广播数据包P后 创建多点传送路由表项
* G * OIFLIST1 和 S G IIF OIFLIST2 其中G就是组播地址 S就是数据包的
IP多点传送路由协议解析
5
源 是一个网络地址 IIF是根据RPF机制获得的接口 重要的是 IIF不一定就是收到组播数据
包P的接口 OIFLIST1是接口列表IntList的一个拷贝 而OIFLIST2则是在IntList中去除IIF后剩
余的接口集合
接着 因为这是RT1接收到的第一个数据包 它根据 * G * OIFLIST1 转发 这样
的目的是触发整个网络中的路由器生成关于 S G 的多点转发路由表项 从接收到第二个数
据包往后 RT1则根据 S G IIF OIFLIST2 进行转发 根据 * G * OIFLIST1 转
发的结果是 所有跟RT1直接联系的路由器和数据接收端都收到了数据包P
同样地 所有接收到这个数据包的路由器都进行跟RT1同样的动作 于是 这个数据包被
FLOODING到整个网络上 而网络上每个路由器都生成了路由表项 * G * OIFLIST1 和
S G IIF OIFLIST2 而网络上的每个接收端都接收到了这个数据包
可以这么说 第一个数据包起触发作用 它触发每个路由器建立转发针对该数据源S和组
播地址G的多点广播数据的多点广播路由表项 可以看出 这样每个接口都进行转发明显的浪
费了带宽 但这正是PIM-DM所假设的 在每个接口上都存在邻居或数据接收端
这时 数据源S又发送了一个多点广播数据包 RT1收到后 将按照 S G IIF
OIFLIST 进行转发 即进行RPF检查 判断收到的数据包是不是从单点传送路由表中到S的输
出接口 即IIF 上接收的数据包 如果不是 则丢弃该数据包 如果是 则把该数据包从
OIFLIST集合中的每个接口上发送出去 网络上每个路由器都进行同样的动作 最终在网络上
所有的数据接收端都收到了多点广播数据包
有这样一种情况 即针对 S G 的转发路由表项中OIFLIST是空集合 比如 图中
RT5 它只有一个接口连接RT4 在自己的下游没有数据包接收端 也没有邻居 所以 它建立
的路由表项 S G IIF OIFLIST 中OIFLIST就是一个空集合 这种情况下 如果RT4把数
据包再发给RT5 将是大大的浪费 因为RT5根本没有接收数据的必要 这时 RT5将给RT4发
送一个剪裁请求消息 请求RT4不要再给自己发送针对 S G 的数据包 RT4收到这个请求
之后 就把连接RT5的串行口从自己的OIFLIST中暂时删除掉了 再收到同样的数据包后 将
不向RT5转发 之所以用了暂时 是因为这个删除是有时间限制的 比如300S 过了这样一段
时间之后 RT4如果没有再次收到RT5的剪裁请求消息 它会把连接RT5的接口再加入
OIFLIST 所以 RT5要不想接收多点数据包 则必须周期性的发送剪裁请求
如果在RT5发出一个剪裁请求之后 忽然探测到自己有一个下游邻居或自己的本地网络上
有关于组G的接收端 那么它就必须从RT4接收多播数据 这时 RT5有两种可以选择的手段
1 停止向RT4发周期性的剪裁请求 等超时 比如300S以后 以后 RT4自动恢复对
RT5的数据包转发 这样做的弊端很明显 就是在等待超时的时间内 RT5不会收到多播包
2 RT5马上向RT4发送一个请求加入消息 告诉RT4自己想接收到组G的多播数据包
RT4接收到这个请求之后 马上把连接RT5的接口重新加入OIFLIST 这个请求有一个专门的说
法 叫嫁接 这样做 RT5马上就可以接收到来自RT4的多播数据包
到目前为止 PIM-DM的工作原理已经很明朗了 开始的时候 路由器把接收到的第一个
IP多点传送路由协议解析
6
数据包向所有下游接口 有邻居或者数据包接收端的接口 即IntList中的接口 发送 也叫做
FLOODING 这样第一个数据包会遍历整个网络 网络上的路由器会形成多点转发路由表
项 从第二个数据包往后 路由器都会根据建立的路由表项进行转发 即进行RPF检查 如果
路由器没有必要接收到数据包 没有下游的邻居或者接收端 则可以向上游路由器发送剪裁
消息来拒绝接收数据包 如果发送剪裁消息之后 又有了下游邻居或者接受端 则可以通过嫁
接消息来恢复对数据包的接收 分析整个过程 可以看出PIM-DM运行的结果就是生成了一棵
以S为根 以所有数据接收端为叶子节点的最小树 多点数据包就在这样一棵树上转发 这样的
转发方式总是最佳的
我们再分析一种特殊情况
S R1
R2
RT1
RT2RT3
RT4
RT5
S1
S 2S1
S2
S 1
S 2
在上面的图中 RT2和RT3经过串行口 S1 S1 连接 假设RT2和RT3都收到了同一个
多点广播数据包 于是 RT2在S1上发送出去 RT3也在自己的S1上发送出去 结果 RT2在
S1上接收到了一个发出去的数据包 根据RPF原则 RT2因为不是从IIF接口上接收到的 它会
丢弃该包 这样不会引起问题 但如果在RT2和RT3上来回发送这些不必要的数据包 必然浪费
带宽 于是 PIM-DM引入了一种叫做ASSERT的机制 描述如下
针对转发项 S G IIF OIFLIST 如果在OIFLIST集合中的接口上接收到了从该接
口发送出去的数据包 则向该接口所连接的路由器发送剪裁消息
引入这样的机制之后 RT2和RT3之间的链路上便不会有多余的数据包了 因为RT2接收
到自己刚刚发送出去的数据包后 马上启用ASSERT机制 向RT3发送剪裁消息 于是RT3便不
再向RT2发送数据 同样 RT3从S1上接收到自己发送出去的数据包后 也给RT2发送剪裁消
息
IP多点传送路由协议解析
7
三 PIM-SM多点广播路由协议
PIM在上面PIM-DM的描述过程中已经解释过了 是协议无关的意思 SM则是稀疏模式
之所以称为SM 是建立在下面的假设上的
网络上多播数据接收端和多点数据发送端分布稀疏 且网络带宽资源匮乏
在这样的假设下 再使用PIM-DM模式 必然严重浪费网络资源 因为DM模式会把自己
接收到的数据包向每个接口转发 在INTERNET上这样做是不提倡的 在SM模式下 每个数据
接收端如果想接收某广播源的数据 必须向一个中心路由器 这个中心路由器就叫做RP 注
册 声明自己的需求 当多点数据源发送数据的时候 它先把自己要发送的多播数据封装在一
个单点传送包里 以单点发送的方式发给中心路由器 然后中心路由器向每个已注册的数据接
收端转发 这种转发方式称为共享树转发 如果数据源发送的数据比较少 又有很大的间歇
性 则一直使用这种共享树转发的方式转发数据包 如果数据源发送的数据量很大 比如一套
会议电视系统 这时 运行PIM-SM的路由器会重新计算一棵源转发树 然后从共享树切换过
来 利用源转发树进行转发 这棵源转发树就是上面介绍的以数据源为根 数据接收端为叶子
节点的最小树 它的计算过程跟PIM-DM类似 不过没有PIM-DM的剪裁/嫁接机制 下面我们
看一下PIM-SM的运行过程 并结合一个例子 来说明其中的一些特殊情况
首先 当运行PIM-SM的路由器启动的时候 便在接口上发送HELLO报文 以多点广播地
址发送 以便发现邻居 每当发现一个邻居 便加入内部邻居列表 从此以后开始计时 如
果超过一定时间没有接收到邻居的HELLO包 则认为邻居已经DOWN掉 于是把这个邻居从列
表中删除 如果在等待时间里接收到邻居的HELLO包 则刷新计时器
在探测邻居的同时 路由器也在相应的接口上IGMP协议 侦听多点广播客户信息 如果
探测到在这个接口连接的网络上有一个多播数据接收端 假设属于组G 则查找RP-G对应关
系 这个关系可以由配置决定 它告诉路由器 如果要想接收组G的多点广播数据 向哪个路
由器注册 找到对应组G的中心路由器RP之后 便创建转发项 * G RPIF OIFLIST
其中 RPIF是根据单点发送路由表里查找到的到RP 中心路由器 的单点发送接口
OIFLIST则是有多点广播接收端的接口集合 然后便从接口RPIF上发送多点广播数据包 告诉
上游路由器 本路由器想向RP注册自己 以接收多点广播数据包
上游路由器有两种可能 一 尚没有创建 * G RPIF OIFLIST 转发项 这是因为该
路由器没有探测到相应组G的数据接收端 在这种情况下 该路由器创建转发项 * G
RPIF OIFLIST 其中RPIF跟上面获得的方法相同 OIFLIST则初始化为接收到注册信息的
接口 然后重复下游邻居的动作 向RPIF接口上发送注册信息 二 该路由器已经创建了
* G RPIF OIFLIST 转发项 这说明该路由器已经探测到自己连接有组播数据接收端
或者已经接收到了注册信息 于是 该路由器仅仅把接收到注册请求的接口加入OIFLIST
这个过程一直重复 最后到达RP路由器 RP路由器第一次接收到针对自己的注册信息
IP多点传送路由协议解析
8
后 创建转发项 * G * OIFLIST 因为数据源发送数据的时候 是把多点广播数据包封
装在单点传送包里发给RP的 所以 这个数据包可以从任何接口上接收到 所以把转发项中的
IIF设置成* 代表任何接口 OIFLIST初始化为接收到注册信息的接口 如果有后继的注册信
息从不同的接口接收到 则把收到注册信息的接口加入OIFLIST 到此为止 广播树的一个分
支建立起来
假设一个关于组G的多播数据源想发送数据 它仅仅以组播地址G把数据包发送到网络上
局域网上 跟组播源连接的路由器接收到数据包后 根据配置的G-RP对应关系 人工配
置 告诉路由器组G的组播数据包发往哪个RP 查找到RP后 便以单点发送的方式把广播数据
包封装在单点发送包里发给RP RP接收到数据包后 根据上面建立的转发项 * G *
OIFLIST 向OIFLIST集合内所有的接口转发 我们把这种封装多点发送数据包的单点发送
数据包称为Register包
接收到Register数据包的RP路由器在把多点广播数据包转发的同时 根据Registers数据包的
源地址得到多点数据发送源S 根据RPF法则 找出到达数据源S的接口IIF 创建转发项 S
G IIF OIFLIST 其中OIFLIST是 * G * OIFLIST 中OIFLIST的一个拷贝 然后
RP路由器向IIF接口发送加入消息 告诉IIF接口上的邻居 RP路由器想接收到数据源S的多点广
播数据包
跟RP邻接的路由器接收到注册包后 会有两种反映 如果已经建立了转发项 S G
IIF OIFLIST 则把接收到注册包的接口加入OIFLIST 如果没有建立 S G IIF
OIFLIST 转发项 则建立该转发项 把IIF根据RPF原则设定 设为到S的单点发送接口
OIFLIST初始化为接收到RP发来的注册包的接口 然后向IIF接口发送同样的注册信息 告诉
IIF接口上的邻居 自己想接收到源S的组播数据 这个过程一直重复 直到跟S连接的路由器
假设为SR 收到注册包 同样地 SR也有 两种选择 如果已经建立了转发项 S G IIF
OIFLIST 则简单的把接收到注册包的接口加入OIFLIST即可 倘若没有建立转发项 S
G IIF OIFLIST 则建立该转发项 以后转发数据源S的数据包的时候 从两个途径转发出
去
1 封装在Register包里 发送给RP
2 根据 S G IIF OIFLIST 转发项 发送给OIFLIST集合内的所有接口 这时 跟
OIFLIST集合内接口连接的路由器会根据 S G IIF OIFLIST 做同样的转发 最后到达
RP
这时 会发生这样的情况 即RP会接收到两个一样的多播数据包 一个通过Register获
得 另外一个通过上游路由器的 S G IIF OIFLIST 转发项获得 这时 RP会给SR路由
器发送一个RegisterStop数据包 来告诉SR路由器 停止通过Register转发数据包 当SR路由器
接收到该RegisterStop数据包后 便停止通过Register转发数据包 而只根据 S G IIF
OIFLIST 转发
这样 如果数据源S只有少量或间歇的数据要转发 使用上述步骤建立的共享树足够了
IP多点传送路由协议解析
9
但如果数据源有大量的数据转发 上面建立的共享树就不合适 因为会在RP处形成流量瓶径
要适应这种大数据流量的情况 使用以源数据树最为合适 这时 我们可以进行转发树的切
换 从以RP为根的共享树切换为以源为根的转发树 具体转发过程如下
需要声明的是 只有叶子路由器 跟数据接收端连接的路由器 才有权利进行树的切换
叶子路由器在接收到一定量的数据后 具体数据量由配置决定 便触发转发树的切换 首
先 叶子路由器建立转发项 S G IIF OIFLIST 其中 S是数据源地址 G是组播地
址 IIF是根据RPF原则查找单点广播路由表得到的指向S的接口 OIFLIST是转发项 * G
RPIF OIFLIST 中OIFLIST的一个副本 建立好之后 叶子路由器通过IIF接口向上游路由器
发送注册消息 告诉上游路由器 自己希望接收到来自组播源S的关于组G的组播数据 需要注
意的是 这时候叶子路由器中有 两个转发项 S G IIF OIFLIST 和 * G RPIF
OIFLIST 在没有从接口IIF接收到组播数据源S的数据以前 说明通过IIF接口发送的注册请
求信息还没有转发到数据源S 它仍旧以 * G RPIF OIFLIST 转发
跟叶子路由器通过IIF接口连接的上游路由器接收到注册信息以后 有两种可能的情况
如果该路由器没有转发项 S G IIF OIFLIST 则创建该转发项 其中IIF是根据RPF原则
查找单点发送路由表获得的指向S的接口 OIFLIST初始化为接收到请求信息的接口 然后通过
IIF接口 向自己的上游路由器发送注册请求信息 跟上面叶子路由器行为一样 如果该路由器
也有转发项 * G RPIF OIFLIST 则仍然使用该项转发 直到接收到跟转发项 S G
IIF OIFLIST 匹配的广播数据包
这个过程一直延续 直到该注册数据包传播到跟数据源连接的路由器 称为SR 这时
该路由器已经建立了转发项 S G IIF OIFLIST 具体原因参考上面的介绍 所以它只
把接收到注册请求的接口加入OIFLIST即可
上面曾经提到过 就是SR路由器在接收到本地多播数据源发来的数据之后 采取两种处理
方式 一 封装在Register数据包里 通过单点传送的方式发给RP 二 根据建立的转发项
S G IIF OIFLIST 转发 RP接收到Register包以后 根据转发项 S G IIF
OIFLIST 该转发项是RP路由器在接收到第一个数据源S发出的Register数据包后创建并向数
据源S注册的 详细请见转发 最后会传播到跟数据接收端连接的叶子路由器 在第二种转发方
式中 因为叶子路由器也向跟数据源连接的路由器SR进行了注册 所以该广播数据包也会传递
到叶子路由器 在这种情况下 叶子路由器接收到了一个多播数据包的两个拷贝 这标志着自
己向数据源S注册成功 到此为止 以数据源为根的转发树已经完全建立 如果叶子路由器就此
停止 不做更深入的处理 那么它必定会每次都接收到一个多播数据包的两个拷贝 这是因为
RP根据转发项 S G IIF OIFLIST 把多播数据包转发给该叶子节点 跟数据源连接的
SR路由器也根据转发项 S G IIF OIFLIST 把数据包转发给该叶子节点 这样必然严重
浪费资源 而且RP处的凭径问题也没有解决 因此 叶子路由器在确认自己已经成功向跟数据
源连接的路由器SR注册之后 会采取下列动作
首先 通过接口RPIF 根据RPF原则得到的指向RP的接口 向上游路由器发送剪裁请求
IP多点传送路由协议解析
10
包 告诉上游路由器 自己不想再接收到RP的匹配 S G 的多播数据包 注意的是 该叶子
路由器并不删除 * G RPIF OIFLIST 转发项 如果删除掉 则没法接收到来自其他数据
源的发送到组G的多点广播数据包
跟叶子路由器通过RPIF接口连接的路由器如果有转发项 S G RPIF OIFLIST 则
简单的把接收到剪裁信息的接口从OIFLIST中删除即可 倘若没有建立转发项 S G RPIF
OIFLIST 则创建该转发项 其中OIFLIST是转发项 * G RPIF OIFLIST 中
OIFLIST的一个副本 然后从OIFLIST中删除掉接收到剪裁请求信息的接口 如果现在
OIFLIST不为空 则到此为止 整个叶子路由器的剪裁过程结束 此后 发出请求的叶子路由
器不会从RP接收到匹配 S G 的多点广播数据包 如果OIFLIST为空 则该路由器继续向上
级路由器发送剪裁请求 上级路由器执行相同的操作 这个过程一直延续 直到请求到达RP
到此为止 PIM-SM的大致工作过程已经十分明朗 为了提高效率 PIM-SM在这些基础动
作的基础上 还添加了其他的处理过程 这些过程不是必须的 而且理解了上面基本的处理动
作 这些过程也很容易理解 在这里就不详细介绍了
四 多点广播路由协议总结
从上面的介绍可以看出 多点广播路由协议的主要目的就是建立一棵多点广播树 多点传
送数据沿这棵多点广播树来发送数据 这样既可以避免不必要的带宽浪费 又兼顾了所有的数
据接收端 因而是效率最高的处理多播的方式 在建立这样一棵树的过程中 大量使用了
RPF技术 而RPF技术正是建立在传统的单点传送路由表基础上的 所以 多点广播的基础还是
传统的选路技术
现在流行的多点广播路由协议是PIM-DM和PIM-SM 我们也对这两种协议做了大致的介
绍 结合多点广播路由协议的基础理论 可以更好的了解这两种路由协议
当然 多点广播是一个十分复杂的课题 我们介绍的仅仅是一些皮毛 还有一些很复杂的
原理和技术要我们在实际工作中不断学习 比如 怎样在两种不同的多点广播路由协议中相互
引入等等 这些技术和理论都是建立在这些多播基础概念之上的 因此 理解这些基本概念是
掌握复杂多播技术的基础
IP多点传送路由协议解析
11