来自: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带来的问题,但是却增加了交换机的成本。