组播路由
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章组播路由
本章主要讲述IP组播报文转发原理及相关协议。
组播报文到达路由器后,查询路由器中的组播转发表,确定是否能够转发以及如何转发;IGMP协议主要用于主机与路由器之间成员关系的管理;动态组播路由协议用于维护全网一致的组播转发表。
本章主要内容:
组播介绍
IGMP协议相关术语解析
IGMP协议介绍
PIM-SM协议相关术语解析
PIM-SM协议介绍
PIM-SM调试命令及调试信息
PIM-DM协议介绍
DVMRP协议介绍
4.1IP组播相关术语解释
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(检
查组播包是否在可返回源站点接口上到达)检查。
检查成功时转发该包,否则丢弃该包。
multicast cache――组播转发缓存。
又称为组播路由表项。
它包含了组播业务报文的合法输入、输出接口信息,是RPF检查的依据。
组播转发缓存由组播路由协议生成并更新。
4.2组播介绍
当信息(包括数据、语音和视频)传送的目的地址是网络中的一组用户时,可以采用多种传送方式。
例如可以采用单播(Unicast)方式,为每个用户单独建立一条数据传送通路;又如采用广播(Broadcast)方式,把信息传送给网络中的所有用户,不管他们是否需要,都会接收到广播来的信息。
以上两种方式都浪费了大量宝贵的带宽资源,而且广播方式也不利于信息的安全和保密。
IP组播技术有效地解决了这个问题。
组播源仅发送一次信息,信息在网络关键节点处被复制和分发,因此信息能被准确高效地传送到每个需要它的用户。
简单地说,IP组播是一种保存带宽的技术,它把一个单独的信息流同时传送到多个接收者那里,减少了网络流量。
若网络中有不支持组播的路由器,组播路由器可以采用隧道方式将组播包封装在单播IP包中发送给相邻路由器,相邻的组播路由器再将单播IP头剥掉,然后继续进行组播传输,直至到达目的地。
4.2.1IP组播地址
IP组播地址用于标识一个IP组播组。
IANA把D类地址空间分配给组播使用,范围从224.0.0.0 到239.255.255.255。
组播地址前四位均为“1110”。
4.2.1.1IP组播地址的空间划分
整个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.2IP 组播地址到MAC 地址的映射
IANA 将MAC 地址范围01:00:5E:00:00:00 ~ 01:00:5E:7F:FF:FF 分配给组播使用,这就要求将28位的IP 组播地址空间映射到23 位的MAC 地址空间中。
具体的映射方法是将组播地址中的低23 位放入MAC 地址的低23 位如图4-1所示:
图4-1 组播地址到MAC地址的映射
由于IP 组播地址的后28 位中只有23 位被映射到MAC 地址,这样会有32个IP 组播地址映射到同一MAC 地址上。
4.2.2IP组播特性
在一般的TCP/IP路由中,一个数据包传输的路径是从源地址路由到目的地址,利用Hop-by-Hop的原理在IP网络中传输。
然而在IP组播环境中,数据包的目的地址不是一个而是一组,形成组地址.。
所有的信息接收者都加入到一个组内,并且一旦加入之后,流向该组地址的数据立即开始向接收者传输。
组中的所有成员都能接收到该数据包,因此为了接收数据包,必须首先成为组的成员,而数据包的发送者并不需要是组中的成员。
组播环境中,数据传向组中的所有成员,不是组中成员的用户不会收到这些数据。
总的来说:IP组播具有如下特性:
对组成员所处的位置和成员的数量没有限制。
也就是说:独立的主机可以在任意时间自由地加入或离开组播组;这些成员可以处在Internet的任何地方;一台主机在同一时刻也可以是一个以上组播组的成员。
一台主机可发送数据包到一个组播组,即使该主机不是这个组中的成员。
向一个组播组内的所有IP主机传送报文如同单播一样,只向组地址发送一份报文即可。
路由器不需要保存所有主机的成员关系,它只需知道物理接口所在的网段上是否已经有主机属于某个组播组;主机只需保存自己加入了哪些组播组。
4.2.3IP组播路由协议
组播协议包括两个部分:一部分作为IP组播基本信令协议的因特网组播管理协议(IGMP);另一部分是实现IP组播流寻径的组播路由协议(例如:DVMRP、PIM-SM、PIM-DM)。
4.2.3.1因特网组播管理协议
IGMP定义了主机与路由器(也适用于路由器与路由器之间)之间组播成员关系的建立和维护机制,是整个IP组播的基础。
IGMP通知路由器有关组成员的信息,路由器使用IGMP来获知与路由器相连的子网上是否存在组播组的成员。
特定的应用程序能知道是来自哪个数据源的信息发送到了哪个组中:如果一
个局域网中有一个用户通过IGMP宣布加入某组播组,则局域网中的组播路由器就将该信息通过组播路由协议进行传播,最终将该局域网作为一个分枝加入组播树。
当主机作为某个组的成员开始收到信息后,路由器就会周期性地对该组进行查询,检查组内的成员是否还参与其中,只要还有一个主机仍在参与,路由器就继续转发数据。
当局域网中的所有用户退出该组播组后,相关的分枝就从组播树中删掉。
4.2.3.2组播路由协议
因为组播中的组地址是虚拟的,所以不可能如同单播那样,直接从数据源一端路由到特定的目的地址。
组播应用程序将数据包发送给一组希望接收数据的接收者(组播地址),而不是仅仅传送给一个接收者(单播地址)。
组播路由建立了一个从数据源端到多个接收端的无环数据传输路径。
组播路由协议的任务就是构建分发树结构。
组播路由器能采用多种方法来建立数据传输的路径,即分发树。
根据网络的实际情况,组播路由协议可以分成两大类:密集模式和稀疏模式。
(1)密集模式组播
密集模式组播路由协议适用于小型网络。
它假设网络中的每个子网都存在至少一个对组播组感兴趣的接收站点。
因此,组播数据包被扩散(“推”)到网络中的所有点。
与此伴随着相关资源(带宽和路由器的CPU等)的消耗。
为了减少这种宝贵网络资源的消耗,密集模式组播路由协议对没有组播数据转发的分枝进行剪枝操作,只保留包含接收站点的分支。
为了使剪掉的分支中有组播数据转发需求的接收站点可以接收组播数据流,剪掉的分支可以周期性地恢复成转发状态。
为了减少等待剪枝分支恢复转发状态的延时时间,密集模式组播路由协议使用嫁接机制主动加入组播分布树。
这种周期性的扩散和剪枝现象是密集模式协议的特征。
一般说来,密集模式下数据包的转发路径是“有源树”――以“源”为根、组员为枝叶的一棵树。
典型的密集模式组播路由协议有:PIM-DM(协议无关组播的密集模式)、DVMRP(距离向量组播路由协议)。
(2)稀疏模式组播
稀疏模式默认所有机器都不需要接收组播包,只有明确指定需要的才转发。
接收站点为接收到特定组的数据流,必须向该组对应的“汇聚点”发送加入消息(“拉”),加入消息所经过的路径就变成了共享树的分枝。
发送组播时,组播报文发送到汇聚点,再沿以汇聚点为根、组员为枝叶的“共享树”转发。
为避免共享树的分支由于不被更新而被删除,稀疏模式组播路由协议通过向分支周期性地发送加入消息来维护组播分布树。
发送端如果想要给特定的地址发送数据,首先要在汇聚点进行注册,之后把数据发向汇聚点。
当数据到达了汇聚点后,组播数据包被复制并沿着分发树路径把数据传给对其感兴趣的接收者。
复制仅仅发生在分发树的分支处,这个过程能自动重复直到数据包最终到达目的地。
稀疏模式下的典型组播路由协议是稀疏模式下的协议无关组播(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 检查过程。
组播源
组成成员1组成成员2
A
B
C
D E F S0S1E0N0路由表
网络出接口
NO S1
图4-2 RPF 检查过程 路由器E 从S0 接口接收到一个组播报文,其中的源地址属于N0 网段。
路由器E 检查单播路由表,发现到N0 的输出接口是S1, 因此将此报文丢弃;如果组播报文是从S1 接口到达,则与查表的结果一致,对该报文进行转发。
从RPF 检查过程可以看出,RPF 检查中使用的是从路由器到组播源或RP 的最短路径所对应的接口,因此称作逆向路径转发。
4.2.4IP组播应用
4.2.4.1信息分配
IP组播使得公司内部的数据可以分配给大量用户,如一个有若干连锁店的公司可以使用组播将其定价信息传递给各连锁店的收银机,或者由媒体通过Internet提供现场实时信息给支持组播的用户,如目前十分流行的远程雇员的管理与远程教育。
4.2.4.2数据广播
传统的数据广播基于广播形式发送,需要占用大量的Internet带宽。
使用组播技术,电视和无线电站不仅可多点广播节目给Internet上真正需要这些数据的用户,还能大大减少网络的维护费用。
4.3IGMP协议相关术语解析
Internet Group Management Protocol――Internet组管理协议IGMP。
IGMP使IP主机能够向邻接的组播路由器报告它们属于哪个主机组。
IGMP是Internet协议栈的一部分,所以IGMP消息也是封装在IP 数据包中的。
IGMP querier――IGMP查询者。
IGMP查询者能够定时发出IGMP查询报文,查询当前该路由器所在的局域网中是否存在申请加入组播组的主机成员,在版本2中还会针对某个组成员的IGMP离开消息发出特定组查询。
在版本3中,还可以针对具体的组播源,发送指定源的查询报文。
通常主机不生成查询报文,它只是在接收到查询报文时根据需要响应一个组成员资格报告报文。
4.4IGMP协议介绍
IGMP协议的目的是实现主机和路由器之间组成员关系的建立与维护。
IGMP协议运行于主机和与主机直接相连的组播路由器之间。
IGMP实现的功能是双向的:一方面,通过IGMP协议,主机通知本地路由器希望加入并接收某个特定组播组的信息;另一方面,路由器通过IGMP协议周期性地查询局域网内某个已知组的成员是否处于活动状态,即该网段是否仍有属于某个组播组的成员,实现所连网络组成员关系的收集与维护。
通过IGMP在路由器中记录的信息可以知道某个组播组是否在本地有组成员,而不是组播组与主机之间的对应关系。
到目前为止IGMP 有三个版本:IGMPv1(RFC1112)中定义了基本的组成员查询和报告过程;目前通用的是IGMPv2,由RFC2236定义,在IGMPv1的基础上添加了组成员快速离开的机制。
IGMPv3 ,由RFC3376定义,增加的主要功能是,成员可以指定接收或指定不接收某些组播源的报文。
4.4.1IGMP协议原理
以下以IGMPv2为例来说明,如图4-3所示:
组成员组成员组成员
组播定时查询
特定查询
加入和离开
主动报告
图4-3 IGMPv2的工作原理
当同一个网段内有多个组播路由器时,IGMPv2 通过查询者选举机制从中选举出唯一的查询者。
查询者周期性地发送通用组查询消息进行成员关系查询;主机发送报告消息来响应查询。
主机发送报告消息的时间有随机性,当检测到同一网段内有其他成员发送同样的消息时,则抑制自己的响应报文。
如果有新的主机要加入组播组,不必等待查询器的查询消息,而是主动发送报告消息。
当要离开组播组时,主机发送离开组消息;收到离开组消息后,查询者发送特定组查询消息来确定是否所有组成员都已离开。
对于作为组成员的路由器而言,其行为和普通的主机一样,响应其他路由器的查询。
通过上述机制,在组播路由器里建立起一张表,其中记录了路由器的各个接口所对应的子网上都有哪些存在活动成员的组播组,和一个针对每个组播组的定时器。
同时记录该组播组的一个成员(最后作出成员关系报告的),而不需要记录所有成员。
当路由器接收到某个组G 的数据报文后,只向那些有G 的成员的接口上转发数据报文。
至于数据报文在路由器之间如何转发则由组播路由协议决定,不是IGMP 协议的功能。
4.4.2IGMP版本1
4.4.2.1报文格式
IGMP 是IP的一个组成部分。
IGMP报文封装在IP报文中,其IP的协议号为2。
IGMP 报文均使用TTL为1进行传递,并在IP头中包括了IP 路由检测选项。
version type unused checksum
group address
版本号version: 1
类型type:为1时是成员关系查询报文,为2时是成员关系报告报文
未用unused:发送时设为0,接收时忽略
校验和checksum:对8字节的IGMP消息补码之和进行求16位补码运算
组地址group address:对成员关系查询报文为0;对成员关系报告报文等于所报告的组的IP组播地址。
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.3IGMP版本2
4.4.3.1与版本1相比的改进
查询选择过程
最大响应时间字段
指定组查询消息
离开组消息
4.4.3.2报文格式
如图:
type Max Resp Time checksum
group address
type:类型
有3种IGMP 消息和主机与路由器的交互有关:
(1)0x11 = 成员关系查询(Membership Query)
有两个成员关系查询的子类型:
- 常规查询,用于了解一个组中是否有成员在相邻的网络中。
- 特定组查询,用于了解在相邻的网络中特定的组是否有成员。
这两个消息由组地址进行区分,对常规查询,组地址为0;而对于特定组查询来说,组地址中包含了欲查询的组播组地址。
(2)0x16 = 版本2 成员关系报告(V ersion 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.4IGMPv2离开组信息
IGMP版本2新增一个特性是离开组信息。
在IGMP版本1中,主机是悄悄的离开,没有发出任何消息。
在版本2中,当主机离开一个组播组,向所有路由器组播组地址(224.0.0.2)发送一条离开组消息。
当查询者接收到组成员离开组消息之后,向正要离开的组发送指定组查询,以确认子网中是否有其他活动的组成员。
其他活动的组成员将响应成员关系报告。
如果在最后的成员查询期间,都没有任何报告消息,路由器就会认为该组没有本地成员。
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.5IGMP版本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 Checksum
Group Address
Resv S QRV QQIC Number of Sources (N)
Source Address [1]
Source Address [2]
……
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成员报告报文:
Type = 0x22 Reserved Checksum
Reserved Number of Group Records (M)
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 Number of Sources (N)
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的为状态改变组记录。