IGMP组管理协议

IGMP(Internet Group Management Protocol)是用于主机向路由器通知其加入多播组的协议,以便路由器转发特定多播组的数据包。文章详细介绍了IGMP的三个版本:IGMPv1、IGMPv2和IGMPv3的功能和改进。IGMPv1采用路由器查询和主机报告维护组成员关系,而IGMPv2增加了特定组查询和主机主动退出功能。IGMPv3引入了源过滤功能,允许主机指定接收或拒绝来自哪些源的数据流。此外,文章还讨论了IGMP Snooping,一种在交换机上实现组播数据包转发优化的方法,以节省带宽并防止IGMP报告风暴。
摘要由CSDN通过智能技术生成

来自:http://www.56cto.com/html/Cisco/1/40288.html

IGMP(Internet Group Management Protocol)主要用于主机向路由器通知其加入某个多播组  的行为,以
便路由器向其转发到达特定多播组的数据包。IGMP目前共有三个版本,版本1在RFC  1112中阐述,版本2
在  RFC 2236  中阐述,版本  3在  RFC 3376  中阐述。 
23.2.1 IGMPv1 
版本1采用路由器查询和主机报告两种方法维护组成员关系。路由器向  224.0.0.1(all hosts)地址发
送  TTL=1  的查询包,这种查询每  60-120s  发生一次,  如果在一个  LAN  上面存在多台路由器,则只
有其中的一台作为  Designated/Elected  的路由器  发送查询信息。 
主机可以向路由器发送  TTL=1  的组成员关系报告,在主机想要加入某个多播组或是收到来  自路
由器的组成员关系查询消息时发出  ,因为同一网段上的主机只要有一台想要接收到达某个多播组的消
息, 
路由器就会将到达这一多播组的消息发至该网段,所以主机的报告采用压  制的方式,对某一个
组信息的接收请求只需有一台主机报告即可。

 

 
上图是版本  1  的消息包格式,Ver=1,Type=1  表示主机成员关系查询,Type=2  表示主机成员关
系报告。Group Address  表示  Report消息中主机要加入的多播组。 
 
当一个主机要加入多播组时,它可以立即向路由器发送成员关系报告,不必等待查询,这样  就
减少了端系统最初加入一个多播时的延时。路由器也会定期的发出组成员关系查询,同一网段中只需
一台欲接收组播信息的主机响应查询即可。其它同属于该组的主机的响应被压制。(Response 
Suppression:每台主机在响应发自路由器的查询之前启动一个  count-down  计数器,计数器的值是一
个组定范围内的随机数,当这个数减到0时主机对查询发出响应,如果在这之前主机收到了其它主机发
出的响应,则它不再发出响应消息。)这个查询周期可以通过命令  ip  igmp  query-interval  来修改,
缺省时间间隔为  60s。 
一个网段只需一台路由器发出查询即可,但是  IGMPv1没有规范的  Query    Router  的选举机制,
选举过程依赖于多播路由协议,有时候会出现多次查询的情况。 
当主机离开一个组后,它不再响应路由器发出的组成员关系查询,同一网段上的所有主机都离开
一个组后,路由器将收不到任何报告,达到超时值后路由器停止向该网段转发相应组播消息。这个 
Passively Leave  的方式增加了注销延时,在版本  2  中得以改良。 
 
23.2.2 IGMPv2 
对版本  1  的改良主要体现在以下几个方面: 
在原有的发向  224.0.0.1  的针对所有组成员关系的  General Query  的基础上增加发向特定组地址

的针对特定组的查询,以确定是否仍存在该组的接收者。  当主机离开一个组时,主动向路由器发送注
销报告,当发送此报告的主机是最后一个组成员时,可以减少路由器停止特定组播消息前的延时。 
版本2中关于  Designated  Router  的选举有了固定的机制,单播地址最小的支持  IGMP  协议的路
由器成为  Query Router。 
此外,路由器在发出查询包时可以指定主机响应时间间隔。

 

 
上图是版本  2  所采用的信息包格式,Type=11  表示成员关系查询,=12  表示版本  1  成员关系报
告, =16表示版本  2  成员关系报告, =17  表示退出组报告。   Max.Resp.Time  表示最大响应时延,以  1/10 
秒为单位,缺省等于  10  秒。  组地址表示报告或查询的组地址,General Queries  用  0.0.0.0  表示。 
主机欲加入一个多播组时可主动发出报告(与版本  1  相同)

 

上图显示的是路由器中记录的多播组成员关系记录。  路由器也可发出组成员关系查询,最初每
路由器都认为自己是  Query Router  并发出查询, 
直到它收到来自比自己的  IP  地址更低的路由器所发出的查询。最后,具有最低  IP  地址的路由
器成为最后的  Query Router。版本  2  中路由器还可以发出对特定组成员关系的查询。查询  消息缺省
每  60  秒发送一次。 
如下图所示,我们可以通过  show  ip  igmp  interface  命令查看哪一台路由器是当前的  Query 
Router。

.

主机对查询的响应同样采用压制机制。 
主机退出多播组时主动向路由器发送退出消息,路由器收到该消息后会发出指向特定组的查询,
以判断该网段上是否还有属于该多播组的成员,如果没有收到任何回应报告,将停止向  该网段转发该
多播组数据。(从收到退出消息到停止转发大约经历  1-3  秒) 
在版本  1  中, count-down  计数器的最大值固定为  10  秒,这样如果同一网段上的接收者分属  许
多不同的多播组,路由器将同时收到大量的回应,版本  2    中可以由  Query    Router    指定

count-down  计数器的上限,通过使用命令  ip igmp query-max-response-time 来增加这个值(缺省为 
10  秒)可以减少报告拥塞情况的发生。 
 
版本  1  与版本  2  的互操作能力 
情况一:主机使用IGMPv2  ,路由器使用IGMPv1。v1  路由器不能识别v2  类型的成员报告报文,因此,
当子网中的查询路由器运行的是v1  时,v2  主机需要发送v1  类型的成员报告报文。主机可以根据路由
器查询报文的最大响应时间字段来判断路由器的版本,因为v1  的查询报文中,该字段被置为0  ,而在v2的
查询报文中,该字段值非0。 
情况二:主机使用IGMPv1  ,路由器使用IGMPv2。在这种情况下,组加入不会有问题,因为IGMPv1  格
式的组加入报文可以被运行IGMPv2  的路由器接收。但是组退出时会有问题,当IGMPv1  主机加入某个
组后,路由器必须忽略该组的任何组离开报文,因为运行IGMPv1  的主机不能识别来自路由器的特定组
查询报文,这样会使路由器以为没有组成员而停止转发该组的数据。 
情况三:同一子网上既有IGMPv1  路由器,也有IGMPv2  路由器。同一子网上的所有路由器必须运行
同一版本的IGMP协议,这种情况下,必须将运行IGMPv2  的路由器手工配置为运行IGMPv1。 
同一网段上的多台路由器所运行的  IGMP  版本必须相同,如果版本  1  和版本  2  路由器共存的
情况,版本  2  的路由器必须在该接口下配置为版本  1,命令为:ip igmp version 1 | 2。
 
23.2.3 IGMPv3 
IGMPv3  的提出,主要是为了配合源特定组播的实现。源特定组播(Source  Specific  Multicast  ,SSM) 
是一种区别于传统组播的新的业务模型,它使用组播组地址和组播源地址同时来标志一个组播会话,而
不是向传统的组播服务那样只使用组播组地址来标志一个组播会话。 
SSM保留了传统PIM2SM模式中的主机显式加入组播组的高效性,但是跳过了PIM2SM  模式中的共
享树和RP  规程。在传统PIM2SM模式中,共享树和RP  规程使用( 3 ,G)  组对来表示一个组播会话,其中, (G) 
表示一个特定的IP  组播组,而( 3 )表示发向组播组G的任何一个源。SSM  直接建立由(S , G)  标志的一个
组播最短路径树(Shortest Path Tree ,SPT) ,其中, (G)  表示一个特定的IP  组播组地址,而(S)  表示发向组播
组G的特定源的IP  地址。SSM  的一个(S ,G)  对也被称为一个频道(Channel) ,以区分传统PIM2SM  组播中
的任意源组播组(Any SourceMulticast  ,ASM)  。由于ASM支持点到多点和多点到多点两种组播业务模式,
因此源的发现过程是ASM  复杂性的原因。 
SSM特别适合于点到多点的组播服务,例如视频点播、在线网络教学等业务,但是在多点到多点的
应用场合还是需要ASM模式。

PIM2SSM是对传统PIM  协议的扩展,使用SSM,用户能直接从组播源接收组播报文。PIM2SSM  利用
PIM2SM  的功能,在组播源和客户端之间,产生一个SPT  树。但PIM2SSM  在产生SPT树时,不需要汇聚点
(RP)  的帮助。 
在缺省情况下, SSM  组播组地址限制在IP  地址范围:232. 0. 0. 0~232. 255. 255. 255  之间。一个具
有SSM功能的网络,  相对于传统的PIM2SM网路来说,具有非常突出的优越性。网络中不再需要汇聚点
(RP)  ,也不再需要共享树或RP  的映射,同时网络中也不再需要MSDP  协议,以完成RP  与RP  之间的源发
现。 
为了在网络中实施SSM  组播业务,除了要求网络端到端地支持网络组播和SSM  模式外,同时还要
求网络和应用支持IGMPv3  协议栈。IGMPv3  在IGMPv1/v2  的基础上提供了额外的源过滤组播功能
(Source2Filtered Multicast ,SFM)  。在IGMP v1/ v2中,主机只根据组地址来决定加入某个组,并从任何一个
源接收发给该组地址的报文。具有源过滤组播功能(SFM)  的主机使用IGMPv3  来表示主机所希望加入的

组播组,同时还表示该主机所希望接收的组播源的地址。主机可以使用一个包括列表(  Inclusion  List)  或
一个排除列表(Exclusion List)  来表示对源地址的限制。

 

有两个多播源都有数据发送至  224.1.1.1  多播组,但是下面的主机只想接收来自源  1.1.1.1 
的多播数据流,这在以前两个版本的多播中是不能由主机自身实现的。而版本  3  提供了对
这一功能的支持。

 

 
版本  3  的组成员关系报告方式和前面两个版本一样。不过在主机加入一个多播组时可以
指定它接收或拒绝(Include or Exclude)源自哪些多播源的数据流。 
路由器周期性的向  224.0.0.1  发送查询消息,所有主机发回响应。(因为不同主机可能有不
同的多播源要求,所以这里要求所有主机均要做出回应,不采用压制机制。) 
3.2.4 IGMP的发展 
IGMP  是IPv4  环境下支持组播必不可少的协议。IGMPv1实现简单,但是有离开延迟过大和选择查
路由器需要依赖组播路由协议的缺点,  IGMPv2  对此进行了改进。IGMPv3  协议的主要目的是支持源
特定组播,并进一步对IGMPv2  进行完善。目前大部分的网络设备和主机操作系统协议栈都支持IGMPv1 
和IGMPv2。为了在网络中实施源特定组播,就要求网络中所选用的网络设备和操作系统都要支持
IGMPv3  协议。目前,Windows XP  已经支持IGMPv3 ,同时某些UNIX  操作系统还支持升级到IGMPv3 ,最新
的Linux 2. 6  内核也支持IGMPv3。IGMPv3  可以与IGMP v1/ v2  协议向后兼容。在IPv6  环境下,IGMP  协
议将被新的MLD  协议所替代。 
 
3.2.5 IGMP Snooping 
传统以太网交换机处理组播数据包时只是简单地在每个端口上进行广播,这种方式使得组播包洪
泛到并不支持组播的网络,这样的网络比较多的时候则会造成带宽极大的浪费。解决这个问题有几种方
案,如CISCO  组管理协议CGMP和组播注册协议GMRP  。如果采用CGMP  协议,则需要路由器必须支持
CGMP  协议,有着兼容性问题。如果采用GMRP  协议,同样也存在兼容性问题,因为它要求主机的网卡以
及应用软件支持GMRP  协议,所以以上两种方案对解决这个问题并不十分合适。而运行在交换机上的
IGMP Snooping  协议  则能够很好地解决这一问题,同时它也不需要主机和组播路由器支持额外的协议。  
IGMP Snooping  协议监视网络上的IGMP  消息,为每一个组播MAC地址建立一个VLAN。该VLAN端口
所连接的网络中至少含有一个主机组成员或者含有组播路由器。这些端口即为组播数据包应该转发的
端口组,它们在一起组成组播VLAN  的端口集。协议将维护这个端口集。这样,当转发组播数据包时,组播
数据包只在它所在的组播VLAN  端口上转发而不会广播到不需要组播的端口,节省了带宽。同时,该以太
网交换机在保持对组播路由器透明的前提下,完成IGMP  代理的功能,过滤掉不必要的IGMP  消息,防止
了“IGMP  报告风暴”。

IGMP  协议介于第二层和第三层之间,它要求交换机既能分析IGMP  数据包,又必须支持VLAN。从协
议层次框架上分析,TCP/IP  协议栈得到IGMP  的报文,交由IGMP Snooping  协议进行处理, IGMP Snooping 
协议根据处理结果更新VLAN。同时,当收到生成树的TCN(拓扑结构变化通知)  时, IGMPSnooping  还需要
重新计算组播VLAN  以减少网络变化所带来的影响。 
交换机在监听主机也路由器之间的  IGMP  会话,  但这样做意味着交换机必须复制并分析所有的
组播帧才能找寻出所有的  IGMP  数据包。可以想像这是一项繁重的任务,会严重影响交换机的性能,
用专用芯片来实现这一处理过程可以  释解交换机的压力,但同时会增加交换机的成本。 
二层交换机的内部由三部分组成:CPU,CAM Table  和  Switching Engine。CAM Table  是核心,它
的内容由  CPU  来维护,Switching  Engine  则依照  CAM  Table  的内容和  CPU  的指令来  完成端口间的
交换任务。 
好了,现在让我们通过一个实例来讲述  IGMP Snooping  会给交换机的  CPU  带来多大的负担。   主
要内容都基于下面这幅图。

 

首先,主机  1  发出报告,请求接收到达  224.1.2.3  的多播数据,CAM  表中没有相关条目,于是
这条消息被洪泛传递到所有接口。交换机在分析这个  IGMP  包后知道,知道端口  0(CPU,  为了接收
后续的组播包)端口  1(路由器)和端口  2(主机  1)与这个组播地址有关,于是在  CAM  表中增加了如下条
目:

 

 
接下来是主机  4  也要加入这个多播组,根据  CAM  表,它发出的  IGMP  包只被转发到端口  0,1
和  2。但同时  CAM  表变成如下的形式:

 

接下来是主机  4  向  224.1.2.3  地址发送流量为  6Mbps  的视频信息,根据  CAM,这些数据包  将
被转发到端口  0,1  和  2。所以这种方式只能用于多播数据流较小的情况下,实际网络中通常无法应
用。 
 
23.2.6 Layer 3 Aware Switch 
这种方法是在交换机内部加上一块专门用来处理  IGMP  消息的三层感知芯片。同原来一样,  所
有的多播数据包仍然要送至  CPU,不过它们不再由  CPU  而是由这块专用芯片来处理。为了实现这一
点,最初的  CAM  表中应该包含下面的项目:

 

 
现在如果主机4再发送  6Mbps  的数据到地址  224.1.2.3,将不会对  CPU  产生任何影响。因为根
据  CAM  表中的具体条目,该信息流只会被送至  1,2  和  5  号端口。这种方式很好的解决了IGMP 
Snooping带来的问题,但是却增加了交换机的成本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值