组播协议

一、组播协议的要素

通过和广播,单播的数据传输方式的比较,我们可以发现组播中最关键的两个部分:

1 组的管理和维护

在组播这套协议中,在网络设备和所连接的子网需要有一套协议或机制来保证网络设备知道所连接的子网中,有多少台主机属于一个特定的组。

2 组播报文的路由

要组播路由协议有什么用?

(1)是发现上游接口,离源最近的接口。因为组播路由协议只关心到源的最短路径。

(2)通过(SG)对来决定真正的下游接口,当所有的路由器都知道了他们的上下游接口,那么一颗多播树就已经建立完成。根是源主机直连的路由器,而树枝是通过IGMP发现有组员的子网直连的路由器 (转载注明出处n et130

(3)管理多播树

单播路由只需要知道下一跳的地址,就可以进行报文得转发。而组播,是把从一个由源产生得报文发送给一组目的。在一个特定的路由器上,一个包得多个备份可能从多个接口上发出。如果有环路得存在,那么一个或多个包会返回到其输入的接口,而且这个包也会经复制发到其他的端口上。这一结果可能导致多播风暴,这个包不断在路由器与交换机间复制,直到TTL减为0。由于这是个复制过程,它的危害会比单播环路严重的多,所以所有的多播路由器必须知道多播包的源,并且需要保证多播包不能从源接口发出。所以他必须知道哪些是上游接口和下游接口,可以分辨出数据包的流向。如果在不是在源的上游接口收到数据包,就会把它丢弃掉。而多播路由协议必须关心到源的最短路径,或者说它关心到源的上游接口。同时,除了关心上游接口,但是在转发的时候,不能把数据包从除了上游接口的其他接口发送出去。所以,另外,他还要关心(SG)下游接口。当关于一个(SG)的上下游接口都被判断出来了,那么一颗多播树就形成了。

稀疏和密集模式的比较?

什么是稀疏模式?它是指在一个整体网络中,参与组播的主机相对来少的一种拓扑,主要出现在WAN中。

什么是密集模式?和以上相反,主要出现在交换式LAN或校园网中

隐式加入和显示加入的比较?

组员可以在多播会话存活的时候,加入或退出一个组,而其相连的路由器必须动态的根据直连子网内组员的存在或退出来决定要加入或剪除多播树的树枝。这就是通过显式或隐式加入两种方式来完成。

隐式加入试用于密集模式,它是采用广播/剪除模式来去除多播树上的没有组播成员的树枝,也就是说,它是通过先把网际网络上的所有路由器都加入到多播树上,然后由每个路由器通过IGMP来查询是否有组员在直连的子网上,如果没有,就发出一条剪除消息,来剪除多余的树枝。

而显示加入适用于稀疏模式,它是由每个路由器先查询子网内有无组员,然后才看是否要发加入信息给上游路由器。

基于源的树和共享树的比较?

基于源的树是针对一个源就会有一颗多播树构成,也就说,如果网络中有多个可以产生组播报文的源主机,那么就会有多少颗组播树组成,在组播表里,会有组数×每组的成员数的项目条数。这种拓扑主要适用于密集模式。

共享树是在整个网络中选一个RP,或叫集中点,所有的组播报文都需要从这个点来进行传送,所以它没有(SG)项,只有(*G)项,表明所有有多个源。RP是预先设定的一个路由器,承担转发所有的多播报文的责任。所有要发送组播报文的源主机在发送组播报文前,都需要到RP上进行注册,然后通过直连的路由器来确定到RP的最短路径,通过RP路由器来确定到目的地的最短路径。RP成为了多播树的根结点。

相对于基于源的树,共享树的多播表项更为精简,适合在稀疏模式下使用。但是也有一些缺点。共享树在RP上的选择,会导致从源主机到各个组地址的路由并非最优路径。

如果在整个局域网里同时有多条耗带宽的组播链路,会导致RP成为整个网络的瓶颈。并且在共享树中,采用选取RP来转发组播报文,会增加产生单点故障的可能。


IP
组播地址主要分为2个大范围:
1.
保留给网络协议用的地址(224.0.0.0-224.0.0.255
2.
组播全局地址,是可以整个internet中动态的分配的(224.0.1.0-238.255.255.255
3.
组播私有地址,也是组播管理地址(239.0.0.0-239.255.255.255
组播在第二层的地址是IANA的一个以0x01:00:5E打头的地址块
IP
组播和2层组播地址转换方法:将IP组播地址的最后的23位映射到MAC地址的最后23位。(但是这样会造成32IP组播地址被映射到一个MAC组播地址的问题。)


二、如何来维护组成员

现在有IGMPCGMPCisco专有的)两种协议,可以进行主机和网络设备之间的组员关系的维护。

IGMP是路由器和内部子网之间通信的方式,也就是说它是三层设备对直连子网的组关系的维护机制。它可以分成两个部分,主机部分和路由器部分,每个部分可以完成不同的工作。但是它有一个限制,就是IGMP报文只能在本地子网内传送,使三层设备不能前转到其他的设备上,它的TTL总是1

IGMPv2主机部分的功能:

运行IGMPv2的主机会产生以下3种信息:

* Member Report消息

用来指示一台主机想要加入一个组播组,这个消息在一个主机第一次加入组的时候会发出,也可以用来响应三层设备发出Membership Query消息。由于Membership Query消息的目的地址是组地址,除了路由器,网内其他的组员主机都会收到这个报文,一旦其他主机收到报文,他们将会抑制自己的Membership Query报文,避免了内部局域网充斥了Membership Query报文。它只需要让路由器知道网内还有一个组员。

* Version 1 Membership Report消息

是为了IGMPv2主机的向后兼容性,用于检测和支持子网中IGMPv1主机和路由器 (转载注明出处n et130

* Leave Group消息

主机发出的,目的地址为224.0.0.2(所有路由器),告诉路由器主机离开了一个组。

IGMPv2路由器功能:

主要是查询功能,它会有两种查询报文,General QueryGroup-Specific Query

General Query每隔一段时间就会向局域网内发送,目的地址是224.0.0.1(网内所有主机),所以子网里的每一个主机都会收到这个报文,并且会以Member Report报文回应,如果在一定的时间间隔内设备没有收到任何Member Report,它就会认为子网内没有组员。

Group-Specific Query报文,当路由器收到一个Leave Group报文的时候,它会发送这样一个具体包含有组地址的报文来查询这个组是否有组成员存在。

当如果在一个子网上同时有两个多播路由器,他们一开始都会认为自己是组播成员的查询者,当他们发送General Query报文时,通过比较从对端收到的报文源IP地址的大小来决定谁是查询者谁不是查询者,IP地址大的成为查询者。如果在一段时间内没有收到查询的报文,就会认为查询者down掉了,它就会充当起查询者的角色。

 

CGMPCisco专有)

考虑到了如果有交换机存在的情况,考虑到了在三层设备和主机中有二层设备,而IGMP是一个三层协议,二层设备如果收到这样一个类型的报文,只会向除了源端口以外的所有端口进行转发,这样会对网络的带宽和整体性能造成影响。解决的方法是希望交换机可以对有组播成员的端口进行组播报文的转发。

在交换式网络上,对组播流的控制有三种方法:

(1)手工配置的交换式多播树

在交换机的桥接表上配置静态的组播MAC地址和端口映射。

(2)GMRP802.1p

他让MAC层的多播组地址动态地在交换机上注册和取消。

(3)IGMP侦听

通过在交换机端口上配置,可以使交换机进行IGMP消息地检查,可以知道多播路由器和组员地位置。但是,检测IGMP消息意味着所有地IP包都要进行检查。尤其当这些如果是在软件地方式来实施,会严重降低交换机的性能。

CGMP的做法是通过路由器来告诉交换机,组播成员的组MAC地址和主机MAC地址,让交换机可以知道在那个端口上有组员,并且可以进行转发。

三、组播报文如何来进行路由

组播最大的难点在于组播的路由协议:PIM
PIM
是协议无关的组播路由协议
PIM
的分类:
从内部运行的机理分为:信源树,共享树
IP组播使用的拓扑结构分为:Sparse mode(稀疏模式),Dense mode(密集模式)
IP组播适用的范围分为:域内协议,域间协议

单播路由关心目标地址,而组播路由关心的是源地址。
RPF
(逆向路径检查)是避免组播路由环路和安全性检查的一个很重要的因素。
通过路由器单播路由表检查源目的地址才能确定RPF,靠近信源的接口是RPF接口,只有从RPF接口接收的报文才会向下游转发。

PIM-SM
:假定网络带宽很低,成员稀疏的分布在网络中。(重点)
1.
通常用于WAN的网络
2.
适用PUll机制
3.
通常使用共享分发树(共享分发树的根是RP

PIM-DM:
假定组成员密集的存在于组中并且有足有的带宽和资源建立和维护分发树。
1.
通常用于LAN的网络
2.
使用PUSH的机制
3.
通常适用源分发树

现下常用的组播路由协议有一下几种,由于现在主流的路由器产品只支持Pim,其他的路由器协议都不支持,所以只会对PIM做个详细的解释。

DVMRP 它是通过RIP来发现到源的最短路径,采用广播/剪除的方式来构建一颗多播树。

MOSPF 它是通过OSPF协议来发现到源的最短路径,也是用在密集方式的拓扑下。

CBT 是一个与协议无关的,基于稀疏模式的,共享树协议。他和DVMRPMOSPF的区别有两点:它无需要在组播中在加入一个路由协议,可以在现有的任何协议上查找到到源的最短路径;它是基于共享树的协议,所以必须要在网络里设置一个网络的核心来确保组播包的前转;更适合使用在稀疏模式下。

PIM-DM 它是个与协议无关的组播协议,同时又是基于密集拓扑的组播协议。采用广播/剪除的方法来进行多播树的构造。

功能:

* 通过交换Hello报文发现邻居

* 当单播路由发生变化时,重新计算RPF接口

* 在多路访问的网络中选举指定路由器

* 在多路访问的网络中使用剪除覆盖

* 在多路访问的网络中用Assert消息选举指定前转器

其中会产生一下5PIMv2消息:

* Hello

周期性地发送用来发现PIM邻居。和OSPF中的Hello报文有着类似点,如果没有在一定的时间内收到,就会认为邻居已经死亡。

* Join/Prune

这是一个合成的报文,其中有要加入组播树的路由器信息,也有要被剪除路由器信息,都会在这样一个报文里列出来。

当源在发送多播报文的时候,PIM-DM用扩散与剪除的方式建立多播树。那些没有组员连接的路由器通过发送Prune消息可以把自己变成处于剪除状态。

当处在剪除状态的路由器,它收到了所直连的子网所发出的IGMP加入信息,就会发出这样一个join的报文给上游路由器,通知列出了需要加入多播树的子网列表。

* Graft

当一个下游路由器发送给上游路由器一个Prune报文时,上游路由器不会马上把通告的子网从多播前转表中删除,而是会等待一段时间,如果下游路由器所直连的子网又要加入多播树时,需要发出一个Graft报文,通知上游路由器来加入多播树。 (转载注明出处n et130

* Graft-Ack

上游路由器收到一个Graft信息,必须要回一个Ack信息,这样才会使下游路由器接受组播报文

* Assert

当有两台设备同时连在同一个广播网络上,并且有相同的上游路由器接口,如果两台路由器同时负责前转多播报文的话,会造成网络资源的浪费,所以需要可以在两台路由器中选出一个来作为唯一的前转报文路由器,Assert报文就是在两个路由器中互相通信,选出一个前转器的报文,通过优先权值,IP地址等参数来协商前转器。

PIM-SM

采用共享树的拓扑方式,建立起多播树。使用显示加入的方式来加入多播树。

查找汇聚点:

* 自举协议

* 自动RP协议

* 静态设置

PIM-SM和共享树:

PIM-SM由于是单向传输协议,所以组播流量只能从RP向外发送,而不能向RP发送,而源是通过把组播报文封装在PIM Register报文里,发送RP接口,然后再由RP进行剥头,对其中的组播报文进行处理。如果组播报文比较多,通过封装Register报文对设备来说是一种负担,所以可以在RP和源之间建立一个基于源的树,进行源到RP的组播报文传送。

PIM-SM和最短路径树

在大型网络中,共享树的路径未必是最短路径,PIM-SM可以通过在源和目的地之间建立一个基于源的树实现最短路径的传送。


PIM-SM
的运行机制分为四步:

1.RP Discovery
RP发现):包括RP的选举和RP的发现

2.shared Tree built
(建立共享分发树):在接收方发送IGMP Join信息和路由器发送PIM Join信息到达RP后,所有经过的路径的接口都被加入到Outgoing interface,这样就建立了源到目的的共享分发树。

3.Source to RP registration
(源到RP的注册):源首先通过单播发送封装的Register信息,RP收到注册数据包后会通过RPF向源发送注册信息,注册信息一直到达源之后建立源到RP的源树,RP再发送一个Register-stop停止源向RP发送
Register
信息。

4.SPT switchover
(切换路径):当源和目标连接上了以后,可能会选择一条更优的源树作为组播的转发路径。可以通过 ip pim spt-threshold 阀值控制组播路径的切换。

难点:RP的发现
RP
发现分为1.静态选定RP
          2.
动态发现RPAuto-RPPIM v2 BSR

配置注意事项:

1.
静态RP的配置需要再所有的路由器上配置,包括RP路由器本身也需要。所有的路由器配置的RP必须是一致的,是同一台路由器。在默认情况下,一个配置了静态和动态RP的路由器中动态配置的优先级高于静态配置。
配置命令: ip pim rp-address ip-address [group-access-list-number][bidir][override]
配置[override]选项可以使静态RP配置优先级高于动态配置。

2.Auto RP
cisco的私有的解决方案。配置需要配置C-RP(candidate RP)和动态映射代理(mapping Agents)
每一个C-RP会向224.0.1.39发送一个Announce通告自己是RPmapping Agents会监听224.0.1.39,再经过裁定后选择出谁是RP再通过224.0.1.40向所有的路由器通告真正的RP的地址。cisco推荐AutoRP路由器使用ip pim sparse-dense-mode

配置命令:
C-RP: ip pim send-rp-announce interface [type number] scope ttl [group-list acl-number]
注意:注意配置的范围不当会导致多台MA选举的RP不一致,在acl-number这个列表中的访问控制列表中的deny any将不起作用。
M-A
ip pim send-rp-discovery interface [type number] scope ttl
注意:参与选举MA的接口一定要运行的PIM组播协议,推荐使用sparse-dense-mode
配置注意:如果涉及到AutoRP通告的范围,请在组播路由域的边界上配置一条ip multicast boundary限制泛洪了其他的域中,针对C-RPMA都需要配置。

RP筛选机制: ip pim rp-announce-filter rp-list 1 group-list 2

­注:这条命令可以针对rp-list列表1的路由器选出group-list列表2中组的RP

3.PIMv2 BSR Mechanism  
PIM自带的一种RP选举机制,在一个BSR域内,BSR选定以后向网络中所有的设备发送一个组播地址为224.0.0.13,周期为60秒的通告,通告自己是BSR,然后所有的C-RP知道BSR后都会向BSR发送单播的注册信息,周期也是60秒发送一次。当所有的C-RP的注册信息收集完后,再将所有的C-RP的信息全部转发给BSR范围内的所有路由器,所有路由器都会使用这些C-RP的信息,根据自己的算法计算出谁是RP
配置命令:
C-RP: ip pim rp-candidate type number [group-list access-list-number]
注意:参与选举的接口不需要运行组播协议
BSR:  ip pim bsr-candidate type number hash-mask-length [priority]
注意:hash掩码可以根据组播掩码范围选择一部分主机使用其中一个C-RPRP,选择另外一个C-RP为其RP,分担了RP的负担也充分利用了C-RP的资源。
配置注意:请在BSR的边界路由器连接外部的接口配置ip pim bsr-border 防止BSR通告泛洪到其他域中。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值