Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19005406
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: 系统运维

2008-05-22 15:48:53

是对Multicast的总结...
                             Created by Cappuccino on January 21, 2005
【多播地址】


l         Link-local addresses: 224.0.0.0 ~ 224.0.0.255 由一些网络协议在本网段使用,路由器不转发这些报文。

l         Administratively scoped addresses: 239.0.0.0 ~ 239.255.255.255 用于私有的多播域中,类似于私有IP地址

l         Globally scoped addresses: 224.0.1.0 ~ 238.255.255.255 可供任何实体使用,这些地址可以在一个组织内部或者Internet上路由,因此它们必须是全局唯一的。

l         Source specific multicast: 232.0.0.0 ~ 232.255.255.255,用于指定源的多播(Source specific Multicast),SSM是PIM协议中的扩展。

l         GLOP addresses: 233.0.0.0 ~ 233.255.255.255,保留给组织静态定义的多播地址,该组织的AS号被插入到第2、3字节中,如AS 62010(0xF23A)拥有的多播地址空间为:233.242.58.0/24。


【Cisco对IP多播路由的实现】

1、  IGMP:用于在LAN的主机和路由器(或多层交换机)之间追踪多播组的成员

2、  PIM:用于在路由器(或多层交换机)之间跟踪多播报文如何转发

3、  DVMRP:用于Internet的多播骨干(MBONE),Cisco支持PIM与DVMRP的互操作

4、  CGMP:用在连接到2层Catalyst交换机的Cisco路由器和多层交换机,其功能与IGMP类似

【IGMP】

为了参与到IP多播中,多播主机、路由器和多层交换机必须有IGMP工作。该协议是一个组成员协议,主机用它来通知路由器和多层交换机组成员的存在,使得路由器和多层交换机可以发送和接收多播数据报文。

当一台主机加入到一个新的组时,它发送一个IGMP消息到组地址以宣告它的成员身份,多播路由器和交换机就可以从中学习到组的成员。

利用从IGMP中获取到的信息,路由器和交换机在每个接口上维护一个多播组成员的列表。在某个接口上,若至少一个主机发送IGMP加入消息表示要接收多播组流量,则该接口上的这个多播组成员是激活的。

l         IGMPv1

IGMPv1使用query-response模型来允许多播路由器和多层交换机来确定在本网段内哪个多播组是激活的。这个模型中,路由器或交换机充当IGMP查询器,周期性(每隔60秒)地发送IGMPv1成员查询给224.0.0.1。启用多播的所有主机监听该地址并接收查询报文。主机以IGMPv1成员报告应答,表示它要接收指定组的多播流量;该子网中的路由器或交换机就知道多播组中有哪些接收者。

主机可以通过发送一个或多个主动的发送成员报告报文表明加入一个多播组。下图中,Host 3主动发送一个报告报文表明要接收组224.3.3.3的流量(而不是等待来自Router 1下一个的成员查询报文)。

主机通过停止处理多播组的流量以及不响应IGMP查询的方式来离开多播组。

IGMPv1依靠L3的IP多播路由协议(PIM、DVMRP等)来解决同一网段中哪个路由器或多层交换机成为Querier。查询路由器发送IGMPv1的查询来确定哪个多播组是激活的。通常指派路由器被选择为Querier。

IGMPv1的报文有2种:

n         成员查询(Member Query,60秒查询一次)

n         成员报告(Member Report)

l         IGMPv2

IGMPv2的查询和成员报告消息与IGMPv1类似。区别在于,第一:IGMPv2的查询消息分为两部分:一般查询(功能与IGMPv1的查询相同)、指定组的查询(仅查询指定组的信息);第二:IGMPv1和IGMPv2的成员报告消息中使用不同的类型代码。IGMPv2的新特性包括:

1)Querier的选择过程――IGMPv2路由器或多层交换机可以自己选举查询路由器(不需要依赖多播路由协议来完成这个工作)。每个IGMPv2的路由器或多层交换机启动时,它发送IGMPv2的一般查询报文(以其接口IP地址作为报文的源IP)给所有主机。每个IGMPv2设备比较接收到的这种消息报文,网段中拥有最小接口IP地址的路由器成为Querier。

2)Maxinum response time――查询消息中的这个字段允许查询路由器指定最大的查询响应时间,并控制突发的应答过程。在某个子网中若存在大量的组,可能需要较长的时间来传播这个应答。(缺点是太长的最大响应时间也会增加主机离开的延迟)

3)指定组的查询消息――允许查询路由器针对某个具体的组进行查询

4)Leave group消息――为主机提供一种手段,来通知路由器和多层交换机它们要离开某个组
                224.1.1.1       224.1.1.1
Host1            Host2            Host3
  |                |                |
  |                |                |
  |                |                |
  |                |                |
----------------------------------------
              |
              |
             Router
             IGMPV2
             querier

上图中,Host 2和3是组224.1.1.1的成员。主机2发送IGMPv2的离开报文给所有多播路由器的组(224.0.0.2)来通知所有路由器和多层交换机它将离开这个组。路由器1(查询路由器)接收到消息后,由于它保存的组成员信息还包括其他成员,因此它发送一个指定组的查询给目标组(224.1.1.1),来确定该组中是否还有成员主机。主机3仍然是组224.1.1.1的成员并且接收到指定组的查询。它以IGMPv2的成员报告消息回应,通知路由器1仍然有成员存在。当路由器1接收到报告后,在该子网中它保持该组是激活的。若没有收到响应,查询路由器将停止向该子网转发该组的流量。

IGMPv2的报文如下:

n         成员查询

n         V2成员报告

n         离开

n         V1成员报告

IGMPv2中的指派查询器:网段中具有最小接口IP地址的路由器

l         IGMPv3

l         CGMP:Cisco私有协议,路由器收到IGMP报告后,处理报告报文后发送一个CGMP报文给交换机;交换机就可以把多播信息转发到需要多播流量的指定端口。CGMP Fast-Leave处理允许交换机检测主机发送的IGMPv2离开报文。当IGMPv2离开消息发送后,交换机可以立即关闭该端口的多播流量。(配置:ip cgmp)

n         加入一个组

连接到L2 Catalyst交换机的主机通过发送一个主动的IGMP成员报告消息给目标组224.1.2.3来加入该多播组。由于LAN交换机工作在L2,只能识别MAC地址,数据帧中的源和目标字段包含48bit的MAC地址(主机3:0080.c7a2.1093)以及多播MAC地址(0100.5e01.0203)。

IGMP成员报文被L2交换机接收到,并转发到CGMP Server进行正常的IGMP处理。CGMP Server(它必须在连接到L2交换机的接口上启用CGMP)在接收到成员报告后,把它翻译为CGMP Join消息。接着它发送CGMP Join消息给交换机(发送到一个知名的多播MAC:0x0100.0cdd.dddd)。当L2交换机接收到Join消息时,它更新自己的转发表,其中包含多播组的多播MAC以及交换机的端口信息。

n         离开一个组

IGMPv2成员离开时,它发送一个IGMP leave消息给所有路由器的组(224.0.0.2)。CGMP Server把它翻译为CGMP leave消息,并发送给交换机。

为了加速LAN中的主机离开一个多播组,一些L2 Catalyst交换机软件提供CGMP Fast-Leave特性,它允许交换机自行处理IGMPv2离开消息,而不需要CGMP Server的参与,从而加快删除不使用的CGMP组。主机发送离开组的消息到224.0.0.2。L2交换机处理该报文而不转发给CGMP Server。L2交换机从接收到离开消息的端口发送出一个IGMP通用查询消息,以便确定是否还有该组的剩余成员。若没有收到响应,L2交换机发送一个IGMP离开消息给CGMP Server。CGMP Server将发送一个指定组的查询消息,来查询是否还有该组的成员;若没有响应,CGMP Server将更新自己的多播路由表并发送一个CGMP delete group(删除组)消息给L2交换机。

l         IGMP Snooping:监听主机和路由器之间的IGMP消息。若主机发送IGMP报告消息给路由器,交换机则把该端口添加到多播组并允许此端口接收多播流量。当主机发送IGMP离开消息后,该端口从多播组中移除。IGMP snooping的缺点是它必须监听每个IGMP控制消息,这样将影响交换机CPU的使用。(配置:ip igmp snooping)

【多播路由协议】

l         密集模式

n         DVMRP

n         MOSPF

n         PIM-DM

l         稀疏模式

n         CBT

n         PIM-SM

l         多播分发树

n         Source:每个多播组以多播源为根,计算一个SPT。缺点是必须为每个多播组去计算SPT,消耗路由器资源多。PIM-DM模式使用源树,它的多播条目以(S,G)格式表示,S表示源的IP地址,G表示多播组的IP地址。

n         Shared:共享树在源和接收者之间的某个地方作为分发树的根(称为RP,汇聚点)。优点是减少路由器的资源消耗,缺点是多播报文经过的路径并不一定是最优的。RP路由器必须有较多的内存来完成工作。PIM-SM模式使用RP,它的多播条目以(*, G)格式表示,因为这里的分发树不是源自多播源。

【PIM】

PIM是协议无关多播路由协议,它不需要依赖于具体的单播路由协议,它使用单播路由表来进行多播的转发,而不是单独再维护一个多播路由表。

l         PIM版本

n         版本1(Ciso在IOS 11.1(6)中引入新特性称为Auto-RP,不需要在每个路由器和多层交换机上手工配置RP信息)

n         版本2(IOS 11.3,PIMv2有BSR特性,与Auto-RP类似)

Cisco IOS 11.3(2)T及后续版本缺省是PIMv2。PIMv2提供下列新特性:

1)每个多播组仅仅存在一个激活的RP以及多个备份的RP。在PIMv1中,一个组中同时存在多个激活的RP。

2)BSR提供容错、自动RP发现和分发机制,允许路由器和多层交换机动态学习组和RP之间的映射关系。

3)Sparse模式和Dense模式成为组的属性,而不是接口的。强烈推荐配置sparse-dense模式,而不是指定sparse模式或者dense模式

4)PIM加入和剪枝消息采用更灵活的编码,可以适应多种地址族

5)采用更灵活的Hello报文格式取代原先的查询报文

6)向RP发送的注册消息中指明这些消息是否是边界路由器或指派路由器发送的

7)PIM报文不再放在IGMP报文中,它们有独立的报文

l         PIM模式

n         Dense模式

一个PIM DM路由器或多层交换机假设所有其他路由器或多层交换机都要转发某个组的多播报文。如果PIM DIM设备接收到一个多播报文,并且它没有直连的成员或PIM邻居,它将发送一个Prune消息给源。后续的多播报文将不会泛洪到该路由器或多层交换机上。PIM DM建立基于源的多播分发树。

       多播分发树中最简单的形式是源分发树,它的根是多播流量的源,它的分支在网络中形成一个生成树到达接收者。这种树使用最短路径,因此也被称为SPT(最短路径树)。每个组有一个独立的SPT。在SPT中采用(S, G)来表示多播路由,其中S表示源的IP地址,G是多播组的地址。


下图中,主机A是多播组224.1.1.1的源,而主机B、C是接收者,SPT的表示为(194.1.1.1, 224.1.1.1)。若主机B也发送组224.1.1.1的数据,而A、C是接收者,那么将存在另一个独立的SPT,表示为(194.2.2.2, 224.1.1.1)。

       PIM DM通过flood和prune的方式,仅仅使用SPT来发送(S, G)多播流量。它假设网络中的每个子网里至少存在组(S, G)的一个接收者,因此流量被泛洪到网络中的每个点。

       为了避免消耗不必要的网络资源,PIM DM设备沿着源分发树向上发送prune(剪枝)消息来停止不必要的多播流量。没有接收者的分支从分发树中被剪掉。Prune有个超时计时器,计时器过期之后,PIM DM设备重新将接口置为转发状态,并从该接口泛洪多播流量。当一个新的接收者从已被剪枝的位置加入到多播组,PIM DM设备检测到新的接收者,立即沿着分发树向上发送一个graft(嫁接)消息。当上游的PIM DM设备接收到graft消息后,立即把接收到graft消息的接口置为转发状态,这样多播流量可以转发到接收者。

n         Sparse模式

PIM SM使用共享树和SPT来分发多播流量。在PIM SM中,一台路由器或多层交换机假设其他路由器或交换机不转发多播流量,除非明确的请求该多播流量(Join消息)。当主机使用IGMP加入到一个多播组时,它直连的PIM SM设备发送PIM join消息给Root(即RP)。这个Join消息通过路由器逐跳地到达Root,它经过的路径将形成共享树的一个分支。RP了解多播的接收者,它也通过Register消息(从源的第一跳路由器(即DR)收到的)来注册多播源,从而完成从多播源到接收者的共享树路径的建立。

使用共享树时,源必须把它们的流量发送到RP,以便流量可以到达所有接收者。(*, G)用于表示树,*表示所有的源,G表示多播组。下图显示组224.2.2.2的共享树(其中RP位于路由器3)。从源A和D来的多播组流量到达RP(路由器3)之后,顺着共享树到达2个接收者(主机B和主机C)。因为多播组中的所有源使用相同的共享树,(*, 224.2.2.2)描述这个共享树。

n         Sparse-Dense模式

若一个接口设置为Dense模式,那么该接口对于所有组来说均是Dense模式;同样Sparse模式也是如此。而对于Sparse-Dense模式,若一个接口设置为这种模式,那么该接口处于何种模式,要根据具体组的情况;即该接口对于某些组是Dense模式,而对于另外一些组则是Sparse模式。

l         Auto-RP

该特性消除在网络中每个路由器和多层交换机手工配置RP信息的必要。在Auto-RP中,配置一台Cisco路由器或多层交换机作为映射代理。它使用IP多播来学习哪些路由器或交换机可能是候选的RP(通过监听Cisco-RP-announce多播组 224.0.1.39来接收候选RP的通告)。候选RP发送多播RP-announce消息给一个特定的组或组的范围(每隔60秒)来通告它们的可用性。每个RP-Announce消息包含一个holdtime时间,来告诉映射代理候选RP通告的有效时间。缺省为180秒。

Mapping agents(映射代理)监听这些候选RP的宣告,并且使用这些信息在它们的Group-to-RP映射缓存中创建相应的条目。对于接收到的任何的Group-to-RP范围,仅仅创建一个映射缓存条目,即使多个候选RP发送的RP宣告是针对相同的范围(即这些候选RP均宣传自己可以作为这个范围的多播组的RP)。当接收到RP宣告消息时,映射代理选择具有最大IP地址的路由器或交换机作为Active RP,并将这个RP地址保存在Group-to-RP的映射缓存中。

Mapping agents将它们的Group-to-RP映射缓存的内容放在RP-discovery消息中每隔60秒以多播方式发送(多播地址为Cisco-RP-Discovery多播组224.0.1.40),所有的Cisco PIM路由器和多层交换机均加入该组以便接收Group-to-RP的映射信息。这样,所有路由器和交换机自动地发现每个多播组使用哪个RP。Discovery消息中包含holdtime时间,它定义了Group-to-RP映射的有效期。若一个路由器或交换机没有接收到RP-discovery消息,并且Group-to-RP映射信息过期,它将切换到使用静态配置的RP(通过全局配置模式命令ip pim rp-address定义的静态RP)。若不存在静态配置的RP,路由器或交换机将把该组的工作模式转换为Dense模式。

多个RP可以为不同范围的多播组服务,并且可以互为备份。

l         Bootstrap Router(自举路由器)

PIMv2的BSR用于在网络中向所有PIM路由器和多层交换机分发Group-to-RP的映射信息。这样就不需要手工在网络中的每个路由器和交换机上配置RP信息。但是,BSR并不是使用多播来分发group-to-RP的映射信息,BSR采用逐跳泛洪BSR消息的方式来分发映射信息。

BSR是从域内一些被配置为BSR的候选路由器和交换机中选举出来的。选举的机制类似于桥接LAN中根桥的选举。BSR选举基于BSR的优先级,在BSR消息中包含该优先级,然后逐跳泛洪到网络中。每个BSR设备检查消息,并且从所有接口只转发最优的BSR消息(BSR优先级最高;若优先级一样,拥有更高BSR IP地址者优先)。通过这种方式,BSR被选举出来。

选出的BSR发送BSR消息(TTL为1)给所有PIM路由器多播组(224.0.0.13)。邻居PIMv2路由器或多层交换机接收到BSR消息,并从所有其他接口泛洪出去(TTL为1)。通过这种方式,BSR消息逐跳地传播到PIM域中。因为BSR消息中包含当前BSR的IP地址,这种泛洪机制允许候选RP自动学习哪个设备是选举出来的BSR。

候选RP直接向BSR发送候选RP宣告(表示该候选RP负责哪些多播组),BSR则将这些信息保存在本地的candidate-RP缓存中。BSR周期性地用BSR消息向域内所有其他PIM设备通告缓存中的内容。这些消息在网络中逐跳地传播给所有其他路由器和交换机,它们将BSR消息中的RP信息保存在各自本地的RP缓存中。路由器和交换机根据这些信息,采用相同的Hash算法,为某个组选择RP(由于hash算法一样,因此所有路由器选择的结果相同)。

l         多播转发和逆向路径检查(RPC)

在单播路由中,路由器和多层交换机是根据数据包的目标IP地址,查找单播路由表进行转发。

而在多播路由中,源发送多播数据给任意的多播组,在数据包的目标IP地址中表示该多播组的地址。为了确定是否要转发或丢弃一个接收到的多播报文,路由器或多层交换机使用逆向路径转发(Reverse Path Forwarding)来检查报文。

1)路由器或多层交换机检查接收到的多播报文的源IP地址,判断从本路由器到达该源IP地址所经过的接口是否和接收该报文的接口相同

2)若相同,RPF检查成功,报文被转发到出口接口列表中的所有接口(并不一定是路由器的所有接口)

3)若失败,报文被丢弃

 

       其中一些多播路由协议,如DVMRP,维护一个独立的多播路由表,并用它来进行RPF的检查;而PIM使用单播路由表完成RPF的检查。


l         邻居的发现

PIM使用邻居发现机制来建立PIM邻居的邻接关系。为了建立邻接,一个PIM路由器或多层交换机发送PIM hello报文给所有PIM路由器多播组(224.0.0.13),从它所有启用多播的接口发送出去。Hello消息包含holdtime时间。

另外,Hello消息也用于选举多路访问网络(如Ethernet)中的DR。拥有最大IP地址的路由器或多层交换机成为DR。在PIM DM运行方式下,只有使用IGMPv1时DR才有意义;IGMPv1自身没有Querier(查询器)的选举过程,因此PIM选择出来的DR就作为IGMP的查询器。在PIM SM模式中,DR是直接和多播源相连的路由器或交换机。它发送PIM注册消息来通知RP,从某个源来的多播数据必须沿着共享树转发下来。

阅读(606) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~