第4章 组播路由
本章主要讲述IP组播报文转发原理及相关协议。组播报文到达路由器后,查询路由器中的组播转发表,确定是否能够转发以及如何转发;IGMP协议主要用于主机与路由器之间成员关系的管理;动态组播路由协议用于维护全网一致的组播转发表。
本章主要内容: 组播介绍
IGMP协议相关术语解析 IGMP协议介绍
PIM-SM协议相关术语解析 PIM-SM协议介绍
PIM-SM调试命令及调试信息 PIM-DM协议介绍 DVMRP协议介绍
4.1 IP组播相关术语解释
ip multicasting――ip组播。在RFC 1112和RFC 2236中定义了I P组播概念,即如何向一个主机组发送报文。一个主机组是指共享单独一个IP地址的多个设备。I P组播传送与I P单播相同,都使用“尽力(best-effort)”传输机制发送报文。这意味着对于该组中的所有主机,都不能保证数据包能够正确无误地、按顺序地接收。
multicast address――组播地址。目前,保留给IP组播的地址空间是D类地址,范围从224.0.0.0到239.255.255.255。这些地址的高位比特都被定义为“1110”。
multicast distribution tree――组播分布树。在组播模型中,源主机可以向任一加入组播组的主机传送信息。IP组播业务报文在网络中经过的路径成为组播分布树。它可以分为有源树和共享树两种类型。
source tree――有源树。树的根是组播信息源,分支形成了通过网络到达接收站点的分布树。有源树以最短的路径贯穿网络,因此它也常被称为最短路径树(SPT)。
shared tree――共享树。不使用信息源作为树根,而是使用位于网络中的某些可选择点作为公用根。此根称为汇聚点(RP)。
reverse path forwarding――逆向路径转发。组播业务包到达路由器时,路由器对报文执行RPF(检
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
查组播包是否在可返回源站点接口上到达)检查。检查成功时转发该包,否则丢弃该包。
multicast cache――组播转发缓存。又称为组播路由表项。它包含了组播业务报文的合法输入、输出接口信息,是RPF检查的依据。组播转发缓存由组播路由协议生成并更新。
4.2 组播介绍
当信息(包括数据、语音和视频)传送的目的地址是网络中的一组用户时,可以采用多种传送方式。例如可以采用单播(Unicast)方式,为每个用户单独建立一条数据传送通路;又如采用广播(Broadcast)方式,把信息传送给网络中的所有用户,不管他们是否需要,都会接收到广播来的信息。以上两种方式都浪费了大量宝贵的带宽资源,而且广播方式也不利于信息的安全和保密。IP组播技术有效地解决了这个问题。组播源仅发送一次信息,信息在网络关键节点处被复制和分发,因此信息能被准确高效地传送到每个需要它的用户。简单地说,IP组播是一种保存带宽的技术,它把一个单独的信息流同时传送到多个接收者那里,减少了网络流量。
若网络中有不支持组播的路由器,组播路由器可以采用隧道方式将组播包封装在单播IP包中发送给相邻路由器,相邻的组播路由器再将单播IP头剥掉,然后继续进行组播传输,直至到达目的地。
4.2.1 IP组播地址
IP组播地址用于标识一个IP组播组。IANA把D类地址空间分配给组播使用,范围从224.0.0.0 到239.255.255.255。组播地址前四位均为“1110”。 4.2.1.1 IP组播地址的空间划分
整个IP组播地址的空间是这样划分的:224.0.0.0 到224.0.0.255 地址范围被IANA 预留,地址224.0.0.0 保留不做分配。其他地址供路由协议及拓扑查找和维护协议使用。该范围内的地址属于局部范畴,不论生存时间字段TTL值是多少,都不会被路由器转发也即只能在局域网里传送。224.0.1.0 到238.255.255.255 地址范围作为用户组播地址,在全网范围内有效。组播地址239.0.0.0 到239.255.255.255 地址范围为本地管理组播地址administratively scoped addresses,仅在特定的本地范围内有效。 4.2.1.2 IP 组播地址到MAC 地址的映射
IANA 将MAC 地址范围01:00:5E:00:00:00 ~ 01:00:5E:7F:FF:FF 分配给组播使用,这就要求将28位的IP 组播地址空间映射到23 位的MAC 地址空间中。具体的映射方法是将组播地址中的低23 位放入MAC 地址的低23 位如图4-1所示:
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
图4-1 组播地址到MAC地址的映射
由于IP 组播地址的后28 位中只有23 位被映射到MAC 地址,这样会有32个IP 组播地址映射到同一MAC 地址上。
4.2.2 IP组播特性
在一般的TCP/IP路由中,一个数据包传输的路径是从源地址路由到目的地址,利用Hop-by-Hop的原理在IP网络中传输。然而在IP组播环境中,数据包的目的地址不是一个而是一组,形成组地址.。所有的信息接收者都加入到一个组内,并且一旦加入之后,流向该组地址的数据立即开始向接收者传输。组中的所有成员都能接收到该数据包,因此为了接收数据包,必须首先成为组的成员,而数据包的发送者并不需要是组中的成员。组播环境中,数据传向组中的所有成员,不是组中成员的用户不会收到这些数据。
总的来说:IP组播具有如下特性:
对组成员所处的位置和成员的数量没有。也就是说:的主机可以在任意时间自由地加入
或离开组播组;这些成员可以处在Internet的任何地方;一台主机在同一时刻也可以是一个以上组播组的成员。
一台主机可发送数据包到一个组播组,即使该主机不是这个组中的成员。向一个组播组内的所有
IP主机传送报文如同单播一样,只向组地址发送一份报文即可。
路由器不需要保存所有主机的成员关系,它只需知道物理接口所在的网段上是否已经有主机属于
某个组播组;主机只需保存自己加入了哪些组播组。
4.2.3 IP组播路由协议
组播协议包括两个部分:一部分作为IP组播基本信令协议的因特网组播管理协议(IGMP);另一部分是实现IP组播流寻径的组播路由协议(例如:DVMRP、PIM-SM、PIM-DM)。 4.2.3.1 因特网组播管理协议
IGMP定义了主机与路由器(也适用于路由器与路由器之间)之间组播成员关系的建立和维护机制,是整个IP组播的基础。IGMP通知路由器有关组成员的信息,路由器使用IGMP来获知与路由器相连的子网上是否存在组播组的成员。特定的应用程序能知道是来自哪个数据源的信息发送到了哪个组中:如果一
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
个局域网中有一个用户通过IGMP宣布加入某组播组,则局域网中的组播路由器就将该信息通过组播路由协议进行传播,最终将该局域网作为一个分枝加入组播树。当主机作为某个组的成员开始收到信息后,路由器就会周期性地对该组进行查询,检查组内的成员是否还参与其中,只要还有一个主机仍在参与,路由器就继续转发数据。当局域网中的所有用户退出该组播组后,相关的分枝就从组播树中删掉。 4.2.3.2 组播路由协议
因为组播中的组地址是虚拟的,所以不可能如同单播那样,直接从数据源一端路由到特定的目的地址。组播应用程序将数据包发送给一组希望接收数据的接收者(组播地址),而不是仅仅传送给一个接收者(单播地址)。
组播路由建立了一个从数据源端到多个接收端的无环数据传输路径。组播路由协议的任务就是构建分发树结构。组播路由器能采用多种方法来建立数据传输的路径,即分发树。根据网络的实际情况,组播路由协议可以分成两大类:密集模式和稀疏模式。
(1) 密集模式组播
密集模式组播路由协议适用于小型网络。它假设网络中的每个子网都存在至少一个对组播组感兴趣的接收站点。因此,组播数据包被扩散(“推”)到网络中的所有点。与此伴随着相关资源(带宽和路由器的CPU等)的消耗。为了减少这种宝贵网络资源的消耗,密集模式组播路由协议对没有组播数据转发的分枝进行剪枝操作,只保留包含接收站点的分支。为了使剪掉的分支中有组播数据转发需求的接收站点可以接收组播数据流,剪掉的分支可以周期性地恢复成转发状态。为了减少等待剪枝分支恢复转发状态的延时时间,密集模式组播路由协议使用嫁接机制主动加入组播分布树。这种周期性的扩散和剪枝现象是密集模式协议的特征。一般说来,密集模式下数据包的转发路径是“有源树”――以“源”为根、组员为枝叶的一棵树。典型的密集模式组播路由协议有:PIM-DM(协议无关组播的密集模式)、 DVMRP(距离向量组播路由协议)。
(2) 稀疏模式组播
稀疏模式默认所有机器都不需要接收组播包,只有明确指定需要的才转发。接收站点为接收到特定组的数据流,必须向该组对应的“汇聚点”发送加入消息(“拉”),加入消息所经过的路径就变成了共享树的分枝。发送组播时,组播报文发送到汇聚点,再沿以汇聚点为根、组员为枝叶的“共享树”转发。为避免共享树的分支由于不被更新而被删除,稀疏模式组播路由协议通过向分支周期性地发送加入消息来维护组播分布树。
发送端如果想要给特定的地址发送数据,首先要在汇聚点进行注册,之后把数据发向汇聚点。当数据到达了汇聚点后,组播数据包被复制并沿着分发树路径把数据传给对其感兴趣的接收者。复制仅仅发生在分发树的分支处,这个过程能自动重复直到数据包最终到达目的地。
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
稀疏模式下的典型组播路由协议是稀疏模式下的协议无关组播(PIM-SM)。 4.2.3.3 IP组播报文转发
单播报文的转发过程中,路由器并不关心单播源地址,只关心报文中的目的地址,通过目的地址决定向哪个接口转发。在组播中,报文是发送给一组接收者的。这些接收者用一个逻辑地址标识。路由器在接收到报文后必须根据源和目的地址确定出上游(指向组播源)和下游方向(把报文沿着远离组播源的方向进行转发),这个过程称作RPF(Reverse Path Forwarding)逆向路径转发。RPF 执行过程中会用到原有的单播路由表以确定上游和下游的邻接结点。只有当报文是从上游邻接结点对应的接口(称作RPF 接口)到达时才向下游转发。RPF 的作用除了可以正确地按照组播路由的配置转发报文外,还能避免由于各种原因造成的环路。环路避免在组播路由中是一个非常重要的问题。RPF 的主体是RPF 检查。路由器收到组播报文后先对报文进行RPF 检查,只有检查通过才转发,否则丢弃。RPF 检查过程如下:
(1) 路由器在单播路由表中查找组播源或RP 对应的RPF 接口。当使用有源树时查找组播源对应的RPF 接口,使用共享树时查找RP 对应的RPF 接口。某个地址对应的RPF 接口是指从路由器向该地址发送报文时的出接口。
(2) 如果组播报文是从RPF 接口接收下来的,则RPF 检查通过。报文向下游接口转发,否则丢弃该报文。
图4-2所示是在使用有源树的情况下的RPF 检查过程。
BA组成成员1C路由表网络出接口NOS1S0EE0S1FDN0组播源组成成员2图4-2 RPF检查过程
路由器E 从S0 接口接收到一个组播报文,其中的源地址属于N0 网段。路由器E 检查单播路由表,发现到N0 的输出接口是S1, 因此将此报文丢弃;如果组播报文是从S1 接口到达,则与查表的结果一致,对该报文进行转发。
从RPF 检查过程可以看出,RPF 检查中使用的是从路由器到组播源或RP 的最短路径所对应的接口,因此称作逆向路径转发。
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
4.2.4 IP组播应用
4.2.4.1 信息分配
IP组播使得公司内部的数据可以分配给大量用户,如一个有若干连锁店的公司可以使用组播将其定价信息传递给各连锁店的收银机,或者由媒体通过Internet提供现场实时信息给支持组播的用户,如目前十分流行的远程雇员的管理与远程教育。 4.2.4.2 数据广播
传统的数据广播基于广播形式发送,需要占用大量的Internet带宽。使用组播技术,电视和无线电站不仅可多点广播节目给Internet上真正需要这些数据的用户,还能大大减少网络的维护费用。
4.3 IGMP协议相关术语解析
Internet Group Management Protocol――Internet组管理协议IGMP。IGMP使IP主机能够向邻接的组播路由器报告它们属于哪个主机组。IGMP是Internet协议栈的一部分,所以IGMP消息也是封装在IP数据包中的。
IGMP querier――IGMP查询者。 IGMP查询者能够定时发出IGMP查询报文,查询当前该路由器所在的局域网中是否存在申请加入组播组的主机成员,在版本2中还会针对某个组成员的IGMP离开消息发出特定组查询。在版本3中,还可以针对具体的组播源,发送指定源的查询报文。通常主机不生成查询报文,它只是在接收到查询报文时根据需要响应一个组成员资格报告报文。
4.4 IGMP协议介绍
IGMP协议的目的是实现主机和路由器之间组成员关系的建立与维护。IGMP协议运行于主机和与主机直接相连的组播路由器之间。IGMP实现的功能是双向的:一方面,通过IGMP协议,主机通知本地路由器希望加入并接收某个特定组播组的信息;另一方面,路由器通过IGMP协议周期性地查询局域网内某个已知组的成员是否处于活动状态,即该网段是否仍有属于某个组播组的成员,实现所连网络组成员关系的收集与维护。通过IGMP在路由器中记录的信息可以知道某个组播组是否在本地有组成员,而不是组播组与主机之间的对应关系。到目前为止IGMP 有三个版本:IGMPv1(RFC1112)中定义了基本的组成员查询和报告过程;目前通用的是IGMPv2,由RFC2236定义,在IGMPv1的基础上添加了组成员快速离开的机制。IGMPv3 ,由RFC3376定义,增加的主要功能是,成员可以指定接收或指定不接收某些组播源的报文。
4.4.1 IGMP协议原理
以下以IGMPv2为例来说明,如图4-3所示:
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
组成员定时查询特定查询组播组成员加入和离开主动报告组成员
图4-3 IGMPv2的工作原理
当同一个网段内有多个组播路由器时,IGMPv2 通过查询者选举机制从中选举出唯一的查询者。查询者周期性地发送通用组查询消息进行成员关系查询;主机发送报告消息来响应查询。主机发送报告消息的时间有随机性,当检测到同一网段内有其他成员发送同样的消息时,则抑制自己的响应报文。如果有新的主机要加入组播组,不必等待查询器的查询消息,而是主动发送报告消息。当要离开组播组时,主机发送离开组消息;收到离开组消息后,查询者发送特定组查询消息来确定是否所有组成员都已离开。对于作为组成员的路由器而言,其行为和普通的主机一样,响应其他路由器的查询。
通过上述机制,在组播路由器里建立起一张表,其中记录了路由器的各个接口所对应的子网上都有哪些存在活动成员的组播组,和一个针对每个组播组的定时器。同时记录该组播组的一个成员(最后作出成员关系报告的),而不需要记录所有成员。当路由器接收到某个组G 的数据报文后,只向那些有G 的成员的接口上转发数据报文。至于数据报文在路由器之间如何转发则由组播路由协议决定,不是IGMP 协议的功能。
4.4.2 IGMP版本1
4.4.2.1 报文格式
IGMP 是IP的一个组成部分。IGMP报文封装在IP报文中,其IP的协议号为2。 IGMP 报文均使用TTL为1进行传递 ,并在IP头中包括了IP 路由检测选项。
version type unused group address 版本号version: 1
类型type:为1时是成员关系查询报文,为2时是成员关系报告报文 未用unused:发送时设为0,接收时忽略
校验和checksum:对8字节的IGMP消息补码之和进行求16位补码运算
组地址group address:对成员关系查询报文为0;对成员关系报告报文等于所报告的组的IP组播地址。
checksum 版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
4.4.2.2 查询-响应过程
(1) 路由器向224.0.0.1(网内所有主机)发查询报文;
(2) 接收到该报文的主机将自己加入的组播地址填入报告报文,向该组播地址多播; (3) 其他加入该组播组的主机收到该组播报文后,抑制自己报告报文的发送;
由此,IGMP查询者路由器只记录本机某接口加入了哪些组播组,它无须记录具体哪些主机加入了组播组。
4.4.2.3 响应报文抑制
主机收到查询报文后,并不立刻响应,而是延迟0到10秒的一个随机时间后才响应。这样,一方面可以避免响应风暴,另一方面又可以有机会收到别的主机通告的响应报文从而抑制本报文的发送。 4.4.2.4 主动加入过程
主机第一次加入某组播组时,可以在未被查询的情况下,主动通告一个IGMP成员关系报告报文,以及时加入组播组。 4.4.2.5 离开组播组过程
IGMP版本1没有专门的离开组播组报文。路由器在查询间隔的3倍时间内仍未收到响应报文时,才将该组播组删除。针对这一问题的改进是IGMP版本2的一个重要内容。
4.4.3 IGMP版本2
4.4.3.1 与版本1相比的改进
查询选择过程 最大响应时间字段 指定组查询消息 离开组消息 4.4.3.2 报文格式
如图: type Max Resp Time group address type:类型
有3种 IGMP 消息和主机与路由器的交互有关: (1)0x11 = 成员关系查询(Membership Query) 有两个成员关系查询的子类型:
checksum 版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
- 常规查询,用于了解一个组中是否有成员在相邻的网络中。 - 特定组查询,用于了解在相邻的网络中特定的组是否有成员。
这两个消息由组地址进行区分,对常规查询,组地址为0;而对于特定组查询 来说,组地址中包含了欲查询的组播组地址。
(2)0x16 = 版本 2 成员关系报告(Version 2 Membership Report) (3)0x17 = 离开组(Leave Group)
为了和IGMP v1兼容,还有另外的一个附加的消息类别:
0x12 = 版本 1 成员报告。
Max Resp Time:最大响应时间
最大的响应时间域仅在成员关系查询中有效。规定了在响应成员关系查询之前,最多能够等待的时间,(其单位为1/10秒)。在所有其他的消息中,会由发送者置为0,而接收者则忽略该域。 4.4.3.3 查询-响应过程
当主机接收到查询报文后,它会给每个组设一个延时定时器,定时器值从0到查询报文中所定义的最大响应时间内随机选取。当组的定时器到时后,主机组播一个版本2的成员报告到该组中,TTL值为1。如果主机收到了另一个主机的报告(版本为1或2),而其本身的定时器还没有到时,则它会停止该定时器,且不发送报告,这样就减少了重复的报告。
当路由器接收到成员关系报告,它就会把该组加入到组播组成员列表中,并且为其设一个值为组成员生存周期(Group Membership Interval, GMI)的定时器 。收到该组的报告会导致对应定时器的刷新。如果定时器超时,路由器则认为没有本地组成员,它也不再需要在邻接的网络上为该组转发组播报文了。
当主机加入组播组,应该立即发送一个版本2的成员关系报告,以防它是网络上该组的第一个成员。因为报告可能丢失,主机在主动报告间隔(Unsolicited Report Interval, URI)后,至少还要重发一次成员关系报告。
4.4.3.4 IGMPv2离开组信息
IGMP版本2新增一个特性是离开组信息。在IGMP版本1中,主机是悄悄的离开,没有发出任何消息。在版本2中,当主机离开一个组播组,向所有路由器组播组地址(224.0.0.2)发送一条离开组消息。
当查询者接收到组成员离开组消息之后,向正要离开的组发送指定组查询,以确认子网中是否有其他活动的组成员。其他活动的组成员将响应成员关系报告。如果在最后的成员查询期间,都没有任何报告消息,路由器就会认为该组没有本地成员。
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
4.4.4 版本1和版本2的互操作
4.4.4.1 路由器充当组播主机
如果支持版本2的路由器收到一条版本1的IGMP成员关系查询,则路由器转入到当前查询路由器为版本1的状态,并设定一个定时器,该定时器只要收到版本1的成员关系查询就复位。如果该定时器超时,则路由器回到版本2的状态。 4.4.4.2 路由器是组播路由器
如果子网中存在版本1的组成员,因为版本1的主机无法识别指定组查询,所以必须忽略版本2主机的离开消息,不进行离开过程的处理。如果子网中存在版本1的路由器,那么必须把子网中所有路由器配置为版本1以便正常使用。
4.4.5 IGMP版本3
4.4.5.1 与版本1和2相比的改进
增加了版本3专用的成员报告报文。一个报文可以报告多个组记录,每条组记录可以指明是要接收或者要拒绝哪些源
成员报告发送到所有IGMP版本3路由器组(224.0.0.22) 增加了指定源查询
查询报文中源数目为0时,查询报文长度比版本2的报文多了4个字节 Max Resp Code字段,当数字大于128时可以进行浮点换算得出Max Resp Time 通过INCLUDE和EXCLUDE的过滤模式,统一了成员报告报文和离开报文的格式 4.4.5.2 报文格式
IGMPv3协议相关的报文类型有两种: 0x11 成员查询报文 0x22 版本3成员报告报文 格式如图:
(1)IGMP版本3查询报文: Type = 0x11 Max Resp Code Group Address Resv S QRV QQIC Source Address [1] Source Address [2] Number of Sources (N) Checksum 版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
… … Source Address [N] 其中: Type:类型
Max Resp Code:最大响应时间。
实际使用的是Max Resp Time(单位1/10秒)。Max Resp Time和Max Resp Code的关系为: 如果Max Resp Code < 128,那么Max Resp Time = Max Resp Code
如果Max Resp Code >= 128,那么Max Resp Code代表如下格式的一个浮点值: 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |1| exp | mant | +-+-+-+-+-+-+-+-+
所以:Max Resp Time = (mant | 0x10) << (exp + 3)
Checksum:IGMP报文部分的奇偶校验和 Group Address:组地址。
发送一般查询时,组地址为0;发送指定组和指定源查询的时候为组地址。 Resv:保留域。发送时填入0,接收时忽略。 S:标志S。
设置为1时,暗示接收到的多播路由器抑制它们通常在收到查询时进行的定时器刷新。但它并不抑制查询者的选举和主机一方(路由器也可能自己作为组成员)对收到的查询进行的处理。
QRV:查询者的健壮性参数。
当QRV非0,表示发送查询的路由器使用的健壮性参数。当QRV超过最大值7,则处理成0。路由器使用最近一次收到的查询中的QRV为自己的健壮性参数;如果收到查询的QRV为0,那么就使用本地的默认健壮性参数。
QQIC:查询者发送查询的间隔。
实际使用的是QQI,它同QQIC的关系和Max Resp Code类似。小于128时,QQI = QQIC;大于128时处理成浮点值。
Number of Sources (N):本次查询中所查询的源的数目。
对于一般查询和指定组查询,N为0;对于指定源查询,N为非0。这个N值受到网络的MTU的。 Source Address [N]:源地址。 (2)IGMP版本3成员报告报文:
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
Type = 0x22 Reserved Group Record [1] Group Record [2] … … Group Record [M] Type:类型。
Reserved:保留值。发送时为0,接收时忽略。 Checksum:IGMP报文部分的奇偶校验和。 Number of Group Records (M):组记录数目。 Group Record:组记录条目。
其中的组记录项(Group Record)的格式如下:
Record Type Aux Data Len Multicast Address Source Address [1] Source Address [2] … … Source Address [N] Record Type:组记录类型。其值范围为1~6,具体含义如下:
1:MODE_IS_INCLUDE,表示主机上接口的过滤模式为INCLUDE模式,记录中的源列表即是主机上维护的源列表。主机对源列表中的源感兴趣。
2:MODE_IS_EXCLUDE,表示主机上接口的过滤模式EXCLUDE模式,记录中的源列表即是主机上维护的源列表。主机对源列表中的源不感兴趣。
3:CHANGE_TO_INCLUDE_MODE,表示主机的接口变成了INCLUDE模式,源列表包含了当前接口上维护的新的感兴趣的源列表。
4:CHANGE_TO_EXCLUDE_MODE:表示主机的接口变成了EXCLUDE模式,源列表包含了当前接口上维护的新的不感兴趣的源列表。
5:ALLOW_NEW_SOURCES:源列表中的源为当前主机上新增的感兴趣的源。
6:BLOCK_OLD_SOURCES:源列表中的源为主机上原来感兴趣而现在不再感兴趣的源。 其中类型为1和2的组记录为当前状态组记录。3~4的为状态改变组记录。
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
Reserved Checksum Number of Group Records (M) Number of Sources (N)
另外IGMPv3还支持版本1和版本2的报文类型: 0x12 版本1成员报告 0x16 版本2成员报告 0x17 版本2离开报文 4.4.5.3 查询-响应过程
多播路由器周期性的发送一般查询来获取本地网络的IGMP成员信息。主机收到一般查询之后,收集自己的组信息,包括感兴趣或不感兴趣的源列表,填入当前状态组记录中,向路由器回复IGMP版本3成员报告(发向所有IGMPv3路由器组224.0.0.22)。
当主机一方的组信息或者源信息发生改变的时候(可能是过滤模式改变,或者是源列表改变),主机会把这些改变信息填入到状态改变组记录中,然后主动向路由器发送IGMP版本3的成员报告。当路由器收到了成员报告后,会刷新本地的组和源的状态;当路由器一方维护的组的过滤模式要从EXCLUDE变成INCLUDE前,会发送指定组查询,反映在IGMPv2上就是对于本地不再感兴趣的组被删除之前,会发送指定组查询;对于本地不再感兴趣的源,则在删除源之前要发送指定源查询。一般,只在收到了状态改变的组记录后才会发送指定组或者指定源查询。对于当前状态记录,不会发送指定组或者指定源查询。 4.4.5.4 路由器上的IGMP状态信息
路由器上的每个接口每个组都有一个组状态,组状态由组地址、过滤模式(INCLUDE / EXCLUDE)、源列表、组定时器组成。
每个组的源列表中的每个源都有一个源状态:由源地址和源定时器组成。 当某个组的所有源都被感兴趣时,组状态为EXCLUDE,源列表为空。
当网络中没有IS_EX或者TO_EX的报告时,组状态的过滤模式为INCLUDE;当收到IS_EX或TO_EX报告时,组状态的过滤模式变为EXCLUDE。
当组为EXCLUDE时,有两个源列表:一个是网络中明确表明不感兴趣的,且也肯定了不再转发的源的列表;一个是网络中有不感兴趣的但不能肯定是否还有感兴趣的,或者是网络中明确表明了感兴趣的源的列表(当转变回INCLUDE时需要这些源),来自这个列表中的源的报文是要转发的。
当组为INCLUDE是,只有一个列表,也就是那些需要转发的源所组成成的列表。当列表中的源的定时器都超时时,列表为空,此时组也就会被删除了。
组定时器只有在EXCLUDE的过滤模式下才会运行。INCLUDE模式下则只有源定时器在运行,源定时器都超时时,组就会被删除了。当组定时器超时时,组的过滤模式从EXCLUDE切换成INCLUDE。
源定时器也只有那些报文能够被转发的源才会有,对于EXCLUDE模式下的已经不再转发的源列表中的那些源,没有源定时器。源定时器超时,如果组为INCLUDE模式,那么就删除源;如果组为EXCLUDE
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
模式,那么就把源从转发的源列表中移至不转发的源列表中。 4.4.5.5 IGMP版本3与版本1和2的兼容性
查询报文的版本区分:
IGMPv1查询:查询报文的长度为8字节,并且Max Resp Code为0; IGMPv2查询:查询报文的长度为8字节,并且Max Resp Code不为0; IGMPv3查询:查询报文的长度大于等于12字节。
成员报告报文的区分:
IGMPv1和v2的成员报告报文发送到加入的组,v2的离开报文发向所有路由器组(224.0.0.2); IGMPv3的成员报告发送到所有IGMPv3路由器组(224.0.0.22)。
当IGMP版本3的路由器收到了低版本的路由器发送的查询报文,路由器可以人为配置为IGMP版本1或版本2。如果没有配置成低版本,要给出告警信息。
IGMP版本3对版本1和2的成员报告,处理为收到了IS_EX{}的报文,对于版本2的离开报文,处理为TO_IN{}的报文。并且,还会为每个组设置一个老版本主机出现的定时器(v1和v2各一个定时器)。当v2主机出现定时器运行时,对该组的BLOCK记录不处理,并且所有的TO_EX都处理为TO_EX{};当v1主机出现定时器运行时,同样也不处理BLOCK记录并且所有的TO_EX都处理为TO_EX{},而且,对应于v2离开报文的TO_IN{}记录也不处理。
当组的v1主机出现定时器超时,如果v2主机出现定时器没有运行,那么组的处理就回到v3的处理方式,否则就用v2的处理方式;v2主机出现定时器超时,就会回到v3的处理方式。
4.5 PIM-SM协议相关术语解释
BSR――自举路由器(BootStrap Router), 用来在PIM-SM版本2中发送RP信息。
DR――指定路由器(Designated Router), 用来在多路访问网络中(如以太网)负责转发组播报文,发送加入/剪枝和注册消息。
IGMP――Internet 组管理协议(Internet Group Management Protocol)。 PIM――协议无关组播(Protocol Independent Multicast)。
PIM-DM――密集模式协议无关组播(Protocol Independent Multicast-Dense Mode)。 PIM-SM――稀疏模式协议无关组播(Protocol Independent Multicast-Sparse Mode)。 RP――汇聚点(Rendezvous Point),共享树的树根。 RPF――逆向路径转发(Reverse Path Forwarding)。
SPT――最短路径树(Shortest Path Tree),到源的最短路径。
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
4.6 PIM-SM协议介绍
PIM-SM(稀疏模式协议无关组播)与PIM-DM相似,都可以采用任何一种IP路由协议(RIP、IRMP、STATIC和OSPF)来决定RPF接口。PIM-SM和PIM-DM最大不同点是PIM-SM利用拉的方式,而不是PIM-DM使用的推的方式。拉的方式假定组播不被需要,除非显式地加入,否则组播信息不会被传送到接收站点。
4.6.1 PIM-SM在TCP/IP协议栈中的基本层次结构
RIPTCPUDPOSPFIP链路层协议
图4-4 PIM-SM在TCP/IP协议栈中的基本层次结构
PIM-SMPIM-SM协议处于IP协议的上层,通过原始socket和IP通信。PIM-SM在IP报文中的协议号为103。
4.6.2 PIM-SM协议
在PIM-SM域中运行PIM-SM协议的路由器周期性地发送Hello消息,用以发现邻接的PIM 路由器,并且负责在多路访问网络中进行DR的选举。这里,DR负责发送加入/剪枝消息和注册消息。
PIM-SM通过建立组播分发树来进行组播数据包的转发。组播分发树分为两种:以组G的RP为根的共享树和以组播源为根的有源树。PIM-SM通过显式的加入/剪枝机制来完成组播分发树的建立与维护。
当DR直连的网络中具有组G的活动成员时,则向着组G的RP方向逐跳发送组播加入消息加入共享树(图4-5中标号1 )。当本次加入沿着共享树上行时,沿途的路由器建立组播转发状态(图4-5中标号2), 即路由项。路由项中包括以下字段:源地址、组地址、组播数据包的输入接口、组播数据包的输出接口列表、定时器和标志位等,以使路由器在收到组播数据后可以沿着树向下转发。当不再希望接收组播数据时,DR向着组G的RP逐跳发送组播剪枝消息用以剪枝共享树。剪枝消息沿着共享树上行时,沿途的路由器更新它的路由项,例如删除输出接口等。如果转发树的分支不被更新,则它们将在超时后暂停并被删除,为了避免这样的问题,转发树上的路由器要向着这个组的RP周期性地发送加入/剪枝消息用以维护组播分发树状态。
源主机向组发送组播数据时,源的数据被封装在注册消息内(register message),并由DR单播至RP(图4-5中标号5)。 RP再将注册消息解封装成数据包沿着共享树转发到各个组成员。之后,RP可以朝
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
着源方向发送对特定源的加入/剪枝消息(图4-5中标号3)加入这个源的最短路径树,这样源的数据包将沿着最短路径树不加封装地发送到RP。 当组播数据包沿最短路径到达时,RP向源的DR发送注册-停止消息, 使DR 停止注册封装过程。此后这个源的组播数据不再注册封装,而是先沿着源的最短路径树发送到RP( A-B-RP ),再由RP 将数据包转发到共享树上,沿着共享树(RP-C-E)发送到各个组成员。
若达到一定的数据传送速率,DR也可以发送显式的加入消息加入到源的最短路径树上(图4-6中标号9 ),组播报文就经由最短路径树转发下来。之后DR对共享树进行更新,删除相应的共享转发路由(图4-6中标号8)。
Source4A5B23RPDFEC1Receive图4-5 PIM-SM 协议的工作过程a
SourceRPA9C7B8EDFReceive图4-6 PIM-SM 协议的工作过程b
PIM-SM中还涉及到BSR和RP的选举机制。在PIM-SM域内配置了一个或多个候选自举路由器(Candidate-BSR),使用一定的规则从中选出该域当前公共的唯一的自举路由器(BSR)。PIM-SM域中还配置
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
有候选RP路由器(Candidate-RP),这些候选RP将包含了它们地址及可以服务的组播组等信息的报文单播发送给自举路由器,再由BSR定期生成包括一系列候选RP以及相应的组地址的“自举”消息,“自举”消息在整个域中逐跳发送。路由器接收并保存这些“自举”消息。若DR从直连主机收到了IGMP加入报文,如果它没有这个组的路由项,将使用hash算法将组地址映射到一个候选RP,然后朝RP方向逐跳组播“加入/剪枝”消息。若DR从直连主机收到组播数据包,如果它没有这个组的路由项,也将使用hash 算法将组地址映射到一个候选RP,然后将组播数据封装在注册消息中单播发送到RP。
在多路访问网络中PIM-SM 还引入了以下机制:使用断言机制选举唯一的转发者,以防向同一网段重复转发组播数据包;使用加入/剪枝抑制机制减少冗余的加入/剪枝消息;使用剪枝否决机制否决不应有的剪枝行为。 4.6.2.1 DR的选举
DR选举的规则如下:
(1)如果某个接口上所有邻居路由器的PIM Hello报文中都携带了priority字段,则首先比较priority的值,数值大的优先级高,如果有多个priority相同的路由器,则选择IP地址大为DR;
(2)如果该接口有某一个邻居路由器的PIM Hello报文中没有携带priority字段,则只根据IP选择,选择IP地址大的为DR。 4.6.2.2 BSR(自举路由器)的选择
刚开始的时候,配置为BSR候选者的路由器进入未决BSR(Pending-BSR)状态,设定自举定时器为随机否决值(5s-23s),并开始监听Bootstrap消息。
Bootstrap消息包含了消息发起者的优先级和IP地址。当处于未决BSR状态的路由器收到一个Bootstrap消息,它把其中的优先级和IP地址与自己的进行比较。如果消息发起者更优,它进入候选BSR(Candidate-BSR)状态,设定自举定时器为自举超时值(130s)。如果自己更优,它不做进一步的处理。当处于未决BSR状态的路由器的自举定时器超时,它进入当选BSR(Selected-BSR)状态,发送Bootstrap消息,设定自举定时器为Bootstrap周期值(60s)。如果优先级一样,则IP地址大的更优。
当处于候选BSR状态的路由器的自举定时器超时,它进入未决BSR状态,设定自举定时器为随机否决值,进行新一轮的BSR选举过程。当处于候选BSR状态的路由器收到来自当选BSR的比自己更差的Bootstrap消息,它也进入未决BSR状态,设定自举定时器为随机否决值,进行新一轮的BSR选举过程。当处于候选BSR状态的路由器收到一个更优的Bootstrap消息,它设定自举定时器为Bootstrap超时值,仍然保持候选BSR状态。
当处于当选BSR状态的路由器的自举定时器超时,它发送Bootstrap消息,设定自举定时器为Bootstrap周期值,仍然保持当选BSR状态。当处于当选BSR状态的路由器收到一个更差的Bootstrap消息,它发送
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
Bootstrap消息,设定自举定时器为Bootstrap周期值,仍然保持当选BSR状态。当处于当选BSR状态的路由器收到一个更优的Bootstrap消息,它进入候选BSR状态,设定自举定时器为Bootstrap超时值。
Bootstrap消息采用了“所有PIM路由器”这个多播组地址224.0.0.13,TTL设为1。当一台PIM路由器收到Bootstrap消息,它在所有接口上(除接收接口)把这个消息发出。这一过程不仅可以保证Bootstrap消息扩散到多播域中,也能保证每一个PIM路由器都收到这个包,从而知道BSR是哪个路由器。 4.6.2.3 RP(汇聚点)的选择
一台路由器可以配置成某些特定组播组的候选RP(C-RP),也可以配置成所有组播组的C-RP。当收到Bootstrap消息,知道BSR的位置后,C-RP通过单播向BSR传送Candidate-RP-Advertisement消息。这些消息中有消息发起者的RP地址,它的优先级以及C-RP所对应的组播组的地址。
BSR对所有C-RP加以整理,列出它们的优先级和它们对应的组,编成“RP集”。它通过Bootstrap消息向整个多播域宣告RP集,Bootstrap消息中包括一个8位的hash掩码。
当一台路由器收到IGMP消息或PIM join消息,需要加入一个共享树时,它检查从BSR获取的RP集。通过特定的hash算法,为组播组选择对应的RP。 4.6.2.4 PIM SSM简介
PIM SSM (Protocol Independent Multicast ----Source Specific Multicast)是协议无关组播(指定源组播)的英文缩写。PIM SSM是PIM的指定源组播,也就是对IPv4中的232.0.0.0/8地址范围内的组播业务进行特殊处理。进行组地址属于SSM范围内的组播业务只需要完成与SPT树有关的操作。而源S的发现是通过带外实现的,也就是没有使用PIM消息(例如注册消息)。SSM需要IGMPv3的支持,因为IGMPv3才能发送同时指定源和组的IGMP成员报告。PIM SSM模式可以和PIM SM模式在一台设备上同时运行,也可以在一台设备上单独运行,这由具体的协议实现来决定。
4.7 PIM-SM调试命令及调试信息
配置PIM-SM协议后,如果需要查看PIM-SM的运行信息,可以打开PIM协议的调试命令。具体调试命令如下:
debug ip pim packet bootstrap观察PIM-SM Bootstrap报文的收发和处理情况。 debug ip pim packet cand-rp观察PIM-SM Candidate-rp报文的收发和处理情况。 debug ip pim packet hello观察PIM-SM hello报文的收发和处理情况。
debug ip pim packet join-prune观察PIM-SM join-prune报文的收发和处理情况。 debug ip pim packet register观察PIM-SM register报文的收发和处理情况。 debug ip pim packet assert观察PIM-SM assert报文的收发和处理情况。
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
debug ip pim packet all 观察PIM-SM 所有报文收发和处理情况。 debug ip pim events 观察PIM-SM协议模块发生的事件DEBUG信息。 debug ip pim mfc 观察PIM-SM组播路由的MFC DEBUG信息。
debug ip pim nexthop 观察PIM-SM维护的单播路由下一跳缓存DEBUG信息。 debug ip pim state 观察PIM-SM维护的组播路由状态的DEBUG信息。 debug ip pim timer all 观察PIM-SM维护的所有定时器的DEBUG信息。 debug ip pim timer assert 观察PIM-SM维护的assert定时器的DEBUG信息。
debug ip pim timer bsr all 观察PIM-SM维护的与BSR机制有关的所有定时器的DEBUG信息。 debug ip pim timer hello all 观察PIM-SM维护的与发送Hello消息有关的所有定时器的DEBUG信息。 debug ip pim timer join-prune all 观察PIM-SM维护的与发送加入剪枝消息有关的所有定时器的DEBUG信息。
debug ip pim timer register 观察PIM-SM维护的与发送注册消息和注册停止消息有关的定时器的DEBUG信息。
debug ip pim all 观察PIM-SM 所有的调试信息。
使用debug ip pim packet all命令后,可能看到以下几种报文收发信息。
调试信息
解释
1: 1: 08:36:20: %PIM-SM-6-Hello send to fastethernet0 向接口fastethernet0发送了一个Hello消息。08:36:20: %PIM-SM-6-Send Hello message 保持时间为105s,DR优先级为1,Generation 08:36:20: %PIM-SM-6- Holdtime: 105 ID为9926。 08:36:20: %PIM-SM-6- T-bit: off 08:36:20: %PIM-SM-6- Lan delay: 1
08:36:20: %PIM-SM-6- Override interval: 3 08:36:20: %PIM-SM-6- DR priority: 1 08:36:20: %PIM-SM-6- Gen ID: 9926 2: 2: 08:42:29: %PIM-SM-6-Bootstrap message send 表示路由器构造并且向接口fastethernet0发08:42:29: %PIM-SM-6- Fragment Tag: 4353 送了一个Bootstrap消息。通过Bootstrap消08:42:29: %PIM-SM-6- Hash masklen: 10 息,可以知道BSR的地址为192.168.40.58,08:42:29: %PIM-SM-6- BSR priority: 0
BSR优先级为0,Hash掩码长度为10,包含
08:42:29: %PIM-SM-6- BSR Address:192.168.40.58
一个IP地址为192.168.40.58的RP。RP的优(Family 1, Type 0)
08:42:29: %PIM-SM-6- Group: 224.0.0.0/4 (Family 先级为192,组范围是224.0.0.0/4,保持时间
为150s。 1, Type 0)
08:42:29: %PIM-SM-6- RP count: 1
08:42:29: %PIM-SM-6- Frag RP count: 1
08:42:29: %PIM-SM-6- RP Address: 192.168.40.58 (Family 1, Type 0)
08:42:29: %PIM-SM-6- RP priority: 192 08:42:29: %PIM-SM-6- RP holdtime: 150 08:42:29: %PIM-SM-6-BSM Message send to fastethernet0 3: 3: 09:20:17: %PIM-SM-6-PIM Candidate RP from 表示收到一个Candidate-RP-Advertisement11.0.0.1 消息,其C-RP地址为11.0.0.1,组为
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
09:20:17: %PIM-SM-6-Recv Candidate RP message 224.0.0.0/4,priority为0,holdtime为150s。 09:20:17: %PIM-SM-6- RP Address: 11.0.0.1 (Family 1, Type 0)
09:20:17: %PIM-SM-6- RP priority: 0 09:20:17: %PIM-SM-6- RP holdtime: 150
09:20:17: %PIM-SM-6- Group Prefix Number: 1 09:20:17: %PIM-SM-6- Group: 224.0.0.0/4 (Family 1, Type 0) 4: 4: 10:28:38: %PIM-SM-6-Send Join/Prune message 表示向上游邻居11.0.0.1发送加入剪枝消10:28:38: %PIM-SM-6- Upstream: 11.0.0.1 (Family 息。组地址为224.0.1.12,是一条(*,G)加入消1, Type 0) 息。 10:28:38: %PIM-SM-6- Rserved: 0 10:28:38: %PIM-SM-6- Num groups: 1 10:28:38: %PIM-SM-6- Holdtime: 210 10:28:38: %PIM-SM-6- Multicast group: 224.0.1.12/32 (Family 1, Type 0)
10:28:38: %PIM-SM-6- Number of Join: 1 10:28:38: %PIM-SM-6- Number of Prune: 0 10:28:38: %PIM-SM-6-Join: (*,G) 11.0.0.1/32 (Family 1, Type 0) 5: 5: 10:36:10: %PIM-SM-6-PIM Register Send to 表示路由器向224.0.1.12对应的RP 11.0.0.111.0.0.1 发送register消息,并收到11.0.0.1发回来的10:36:10: %PIM-SM-6-Send Register message register stop消息。 10:36:10: %PIM-SM-6- B bit: off 10:36:10: %PIM-SM-6- N bit: on
10:36:10: %PIM-SM-6- IPv4 packet: src 192.168.40.50
10:36:10: %PIM-SM-6- IPv4 packet: dst 224.0.1.12 10:36:10: %PIM-SM-6-PIM Register Stop from 11.0.0.1
10:36:10: %PIM-SM-6-Recv Register Stop message 10:36:10: %PIM-SM-6- Group: 224.0.1.12/32 (Family 1, Type 0)
10:36:10: %PIM-SM-6- Source: 192.168.40.50 (Family 1, Type 0) 6: 6: 11:26:03: %PIM-SM-6-Send Assert message 表示路由器由于在出接口上收到了组播业11:26:03: %PIM-SM-6- Group: 224.0.1.12/32 务报文,从而引发Assert过程。这里发送的是(Family 1, Type 0) (*,G)Assert报文。 11:26:03: %PIM-SM-6- Source: 0.0.0.0 (Family 1, Type 0)
11:26:03: %PIM-SM-6- R-Bit: 1
11:26:03: %PIM-SM-6- Preference: 0 11:26:03: %PIM-SM-6- Metric: 78125
4.8 PIM-DM协议介绍
PIM-DM(Protocol Independent Multicast-Dense Mode,协议无关组播密集模式)。同PIM-SM一样,PIM-DM处于IP协议的上层,通过原始socket和IP通信。PIM-DM在IP报文中的协议号为103。发送的PIM-DM协议报文的TTL值总是1,即其传播距离只有一跳。
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
RIPTCPUDPOSPFIP链路层协议
PIM-DM4.8.1 PIM-DM协议
表示扩散过程源BA表示剪枝过程X◎表示加入或嫁接过程表示最终被剪枝掉的线路最终处于剪枝状态的接口X◎◎◎C◎◎◎X◎DIEF
4.8.1.1 4.8.1.1 邻居建立过程
当PIM路由器启动后,会周期性的(默认30s)向路由器发送hello报文(发向所有PIM路由器组,224.0.0.13),以建立邻居关系。收到hello报文的路由器,会把发送hello报文的路由器加入邻居列表中,并为之启动一个定时器,这个定时器的值为hello报文中holdtime域中的数值。 4.8.1.2 业务报文扩散和剪枝过程
当源出现,向网络中发送某个(S, G)的业务报文。初始时,报文会扩散到网络中的各个角落(如图所示)。当路由器收到业务报文,就会为之建立起相应的(S,G)表项并记录输入接口,而其他的会被认为是下游接口。如图所示,C会收到A和B的业务报文,但是只能有一个输入接口,于是会根据单播到源的路由耗费选择耗费值小的作为输入接口,而另一个,就会发送剪枝信息,把它剪枝掉。
当业务报文从E传到I,I发现自己没有下游邻居,也没有本地组成员,出口为空。于是,I向上游E
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
发送剪枝消息(注:剪枝从输入接口发出,目的地址是需要剪枝的组的地址),请求剪枝,此时E发现它只有一个邻居(比如E和I之间为点到点的连接),那么,E收到I的剪枝后就会立即把I剪枝掉。剪枝过后,E发现自己的出口也为空了,于是再继续向上发送剪枝。但是当C收到E的剪枝后,发现网络中有本地组成员(见IGMP),于是忽略掉E的剪枝。
当业务报文从F传向网络中,G收到后,发现自己没有出口,于是向上发剪枝,此时,由于网络中还有其他的路由器,于是,F启动剪枝延迟定时器;H有本地组成员,有出口,它需要接收业务报文,当它旁听到G的剪枝信息后(因为G发送的剪枝是发向需要剪枝掉的组的),它就启动一个否决定时器,等定时器超时后就向上(发向想要加入的组)发送加入报文,告诉F,网络中还需要接收业务报文,不可以剪枝掉出口。于是,当F收到加入之后,就会继续保持转发业务报文的状态了。 4.8.1.3 嫁接过程
如果I突然有本地组成员加入,有了出口,那么它就会向E发出单播嫁接报文,E收到后,回复I一个嫁接应答(Graft ACK)把下游接口状态变为转发态,I收到嫁接应答后,就会把自己的上游接口变为转发态,有报文来就可以转发;此时E发现自己也有了出口,于是向上游的RPF邻居(比如C,假设C为声明胜利者,见4.10.1.3)单播发出嫁接,C也回应给E一个嫁接应答,然后E的上游变为转发态;由于C本身就在转发业务报文,此时上游接口为转发态的E就会接收业务报文,并转发之,这样业务报文就传送给了新加入的本地组。 4.8.1.4 声明过程
如图所示,业务报文的扩散导致E路由器可能收到来自C和D转发的业务报文,导致信息冗余。于是C和D之间就需要进行一场声明过程,以选出一个作为转发者的路由器。具体过程描述如下:由于扩散时,C和D都会记录输入接口,然后D会在它的出口收到C转发的业务报文,这种在出口收到业务报文,就会引发声明过程,于是D发出声明报文,同理,C也会发出声明报文,然后二者通过比较,选出一个胜利者来转发业务报文。 4.8.1.5 状态刷新过程
PIM-DM协议是一个典型的扩散和剪枝的协议,剪枝定时器超时后,报文会再次扩散到网络中。为了减少这种频繁的扩散-剪枝过程的耗费,PIM-DM使用状态刷新机制来维持网络中的剪枝状态。状态刷新报文(SRM)由和源直连的路由器产生,然后发向网络中的所有下游邻居。下游邻居收到状态刷新报文后,根据报文中的内容作出相应的反应(例如:如果状态刷新报文显示A发出的为剪枝,而C却需要转发报文,那么,C就会向A发出加入消息;如果A为转发态,而C却无出口了,那么C就会向A发送剪枝信息),然后刷新自己各个有下游邻居的出口的剪枝定时器,并根据自己信息修改状态刷新报文,并转发修改后的状态刷新报文(例如图中的E,出口本身处于剪枝状态,收到状态刷新报文后,它会把出口的剪枝定时器
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
刷新,然后填入自己的信息,发送状态刷新报文给I,然后I收到,检查到E为剪枝态,且自己的输入接口也为剪枝态,并且I也没有其他下游邻居了,于是什么都不做了)。
4.9 DVMRP协议介绍
4.9.1 1 DVMRP协议简述
距离向量多播路由选择协议DVMRP(Distance Vector Multicast Routing Protocol) 是第一个得到普遍使用的组播路由协议,它在RIP 协议的基础上扩充了支持组播的功能。DVMRP 协议首先通过发送探测消息来进行邻居发现,之后通过路由交换来进行单播寻径和确定上下游依赖关系。
DVMRP 采用逆向路径组播RPM 算法进行组播转发。当组播源第一次发送组播报文时,使用截断逆向路径组播(truncated RPM) 算法沿着源的组播分发树向下转发组播报文。当叶子路由器不再需要组播数据包时,它朝着组播源发送剪枝消息,对组播分发树进行剪枝,借此除去不必要的通信量。上游路由器收到剪枝消息后,将收到此消息的接口置为剪枝状态,停止转发数据。剪枝状态关联着超时定时器,当定时器超时时,剪枝状态又重新变为转发状态,组播数据再次沿着这些分支流下。另外当剪枝区域内出现了组播组成员时,为了减少反应时间,下游不必等待上游剪枝状态超时,而是主动向上游发送嫁接报文,以使剪枝状态变为转发状态。可见DVMRP 是由数据触发驱动建立组播路由表,而路由树的建立过程可以概括为“扩散与剪枝”。转发特点可以概括为“被动接受主动退出”。
另外在多路访问网络中当有两个或多个的组播路由器时,网络上可能会重复转发包,为了防止这种情况出现,在多路访问网络上DVMRP 为每个源选择了一个唯一的转发路由器。
DVMRP有如下特性:
以距离矢量为基础(与RIP相似) 周期的路由更新(每60秒) 上限=32跳(RIP是16) 逆向抑制有特定含义
无类型性,路由更新包括掩码信息
4.9.2 DVMRP邻居发现
DVMRP路由器之间通过周期性向所有DVMRP路由器组(224.0.0.4)发送探针消息(每10秒)建立双向邻居,这是DVMRP路由交互的基础。具体过程解释如下:
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
1.1.1.11.1.1.2ROUTER 1ROUTER 2
如图所示,当ROUTER1启动时,会从DVMRP接口发送探针消息,此时由于还未知网络中有哪些邻居,于是发送的探针消息中不含有邻居列表;当ROUTER2收到ROUTER1的探针消息后,本地把ROUTER1作为一个单向邻居;然后,当ROUTER2发送探针消息时,它会把邻居ROUTER1的地址1.1.1.1填入到探针消息的邻居列表中;当ROUTER1收到ROUTER2的探针消息,发现自己的地址在列表中,于是它知道ROUTER2已经收到过自己发送出去的探针消息了,于是,ROUTER1把ROUTER2作为一个双向邻居;之后,ROUTER1发送探针消息时,就会把邻居ROUTER2的地址1.1.1.2也填入探针消息中;ROUTER2在收到ROUTER1发送的含有自己地址的探针消息后,就会把邻居ROUTER1作为一个双向邻居了。
4.9.3 DVMRP路由建立
DVMRP协议利用自己维护的路由表来建立源分布树。于是路由信息交互成了DVMRP协议比较重要的一部分。DVMRP协议的路由交互方式同RIP比较相似。当路由器启动时,它会根据自己邻接的DVMRP网络建立路由信息,然后把这个路由信息通过路由报告消息向DVMRP邻居发送。路由报告消息中包含了源网络号、掩码、经该发送报告的路由器到达源网络的跳数信息。当邻居收到路由报告后,会根据报告中的内容做相应的调整(比如:对跳数进行适当的修改)并更新自己本地维护的路由表项,然后把更新后的路由表项通过路由报告发送出去(如果确定自己处于下游,那么将会在发送路由报告时把该条路由的跳数加上32,以通知上游路由器把发送路由器当成下游依赖)。这样,就形成了网络中到达源网络的截断广播树。之后路由器会周期性(每60秒)向所有DVMRP路由器组(224.0.0.4)通过路由报告发送自己的路由信息,以维持这个截断广播树的状态。
和PIM-DM的广播树不同的是,DVMRP用自己维护的路由信息建立的截断广播树已经去掉了网络中的冗余路径,不必等到业务报文扩散时再来去掉冗余。DVMRP的报文扩散时,只需要剪枝掉不需要接收业务报文的路径。
4.9.4 DVMRP扩散剪枝
当源开始发送组播业务报文时,DVMRP路由器收到业务报文后,用自己维护的路由信息进行RPF检查,确定业务报文从正确的上游接口到达。然后,对于非叶子节点,会把业务报文转发到所有的下游依赖邻居;对于叶子节点(无下游依赖邻居),如果本地没有IGMP成员或者不是指定转发者,即本地不需要业务报文,于是叶子节点会向上游发出剪枝,以删去截断广播树上这条无业务需求的枝节。当然,如果收到剪枝消息的路由器发现这个出口被剪枝后自己的出口也为空了,那么将继续向上发送剪枝。
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
4.9.5 DVMRP嫁接
如果此时突然有个节点上有了出口,那么这个路由器会马上向到源网络的上游邻居单播发送嫁接消息。当上游邻居收到此嫁接消息后,会回复一个嫁接应答消息,以保证嫁接的可靠性。如果这个处于上游的邻居先前也因为没有出口而被剪枝掉了,那么此时它会继续向它的上游发送嫁接消息,最终使这个被剪枝掉的分支被嫁接回截断广播树上。
版权所有 翻印必究 Copyright © 2011 Maipu Communication. All Rights Reserved.
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务