IGMP简介
--------------------------------------------------IGMP概述--------------------------------------------------
IP 主机通过发送IGMP 报文宣布加入某组播组;本地组播路由器通过周期性的发送IGMP 报文轮询本地网络上的主机,确定本地组播组成员信息。
到 目前为止,IGMP 有三个版本:IGMPv1 版本(由RFC1112 定义)、IGMPv2 版本(由RFC2236 定义)和IGMPv3(由RFC3376 定义)版本。所有IGMP 版本都支持ASM(Any-Source Multicast)模型。IGMPv3 可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1 和IGMPv2 则需要SSM-Mapping 技术的支持。
--------------------------------------------------IGMP原理简介--------------------------------------------------
IGMP 协议是IP 组播在末端网络上使用的主机对路由器的信令机制,分为两个功能部分:主机侧和路由器侧。IGMP 工作机制如下所述:
1. 接收者主机向所在的共享网络报告组成员关系。
2. 处于同一网段的所有使能了IGMP 功能的组播路由器选举出一台作为查询器,查询器周期性地向该共享网段发送组成员查询消息。
3. 接收者主机接收到该查询消息后进行响应以报告组成员关系。
4. 网段中的组播路由器依据接收到的响应来刷新组成员的存在信息。如果超时无响应,组播路由器就认为网段中没有该组播组的成员,从而取消相应的组播数据转发。
5. 所有参与组播传输的接收者主机必须应用IGMP 协议。主机可以在任意时间、任意位置、成员总数不受限制地加入或退出组播组。
6. 支持组播的路由器不需要也不可能保存所有主机的成员关系,它只是通过IGMP协议了解每个接口连接的网段上是否存在某个组播组的接收者,即组成员。而各主机只需要保存自己加入了哪些组播组。
--------------------------------------------------IGMPv1工作机制--------------------------------------------------
IGMPv1 协议主要基于查询和响应机制完成组播组管理。在多路由器共享网段上,由三层路由协议选举出唯一的组播信息转发者(Assert Winner 或DR),并作为IGMPv1 的查询器,负责该网段的组成员关系查询。网络上IGMPv1 消息交互如图9-1 所示。
![](http://www.bbfish.net/ipigmp/UploadFiles_8068/200802/20080228150312431.jpg)
主机加入组播组的基本过程如下:
1. IGMP 查询器(RouterB)周期性地向共享网段内所有主机以组播方式(目的地址为组播地址)发送普遍组Query 查询消息。该报文的目的地址为224.0.0.1,表示该网段上的所有主机和路由器。
2. 网段内所有主机都接收到该普遍组查询消息。如果主机(如HostB 和HostC)希望加入某组播组G1,则以组播方式发送Report 报告。该报文的目的地址为224.0.0.1,报文中携带组播组G1 的地址信息。
3. 网段中所有主机和路由器都接收到该Report 报告,并获知组播组G1 地址信息,此时网段中其它也希望加入该组播组G1 的主机将不再发送针对相同组播组的Report 报告。同时,网段中预备加入另一组播组G2 的主机发送针对组播组G2 的Report 报告以响应普遍组查询消息。
4. 经过查询和响应过程后,IGMP 路由器了解到本网段内存在组播组G1 对应的组播组成员,则由组播路由协议生成(*,G1)组播转发项并以此作为组播数据的转发依据。之后,组播路由协议将发起上游路由更新以维护组播转发树。
5. 组播源发出的组播数据经过组播路由到达IGMP 路由器,如果IGMP 路由器上存在(*,G1)组播转发项,则转发该组播数据到此共享网段,G1 组播组成员主机接收该数据。
6. IGMPv1 中没有专门定义离开组播组的消息。当主机离开某组播组后,将不再发送以此组播组地址为目的地址的Report 报告。当网段中不再存在该组播组成员后,IGMP 路由器将不能收到任何针对此组播组的Report 报告,则IGMP 路由器删除该组播组对应的转发项。
--------------------------------------------------IGMPv2改进功能--------------------------------------------------
IGMPv2 对IGMPv1 所做的改进主要有以下几个方面:
查询器选举机制
IGMPv1 中,当某共享网段上存在多个组播路由器时,查询器的选择由组播路由协议决定。
IGMPv2 中使用独立的查询器选举机制,规定该网段上IP 地址最小的组播路由器为查询器。
离开组机制
在IGMPv1 中,主机悄然离开组播组,不会向任何组播路由器发出任何通知。这时组播路由器只能依靠普遍组查询消息响应超时来获知组播组成员的离开。
在IGMPv2 中,当某主机决定离开组播组G1 时,它会向该网段以组播方式发送IGMP Leave 报文。该报文的目的地址为224.0.0.2,表示该网段上的所有路由器,报文中携带组播组G1 的地址。
随后,为了明确网段中是否还包含组播组G1 的其它成员主机,查询器会向网络中发送指定次数的特定组查询消息。
对指定组的查询
在IGMPv1 中,由组播路由器发起的普遍组查询面向该网段下的所有组播组。
在IGMPv2 中,增加了针对特定组的查询。IGMP 查询器在收到主机发送的离开组播组G1 的Leave 报文时,将向该网段中发送针对G1 的查询报文。该报文的目的地址为组播组G1 的地址,只有属于该组播组的主机才会进行响应,从而发送携带组播组G1 地址信息的Report 报告。IGMPv2 和IGMPv1 版本的响应消息(即Report 报告)和查询消息具有相同的报文结构,报文中仅携带组地址信息。
特定组查询报文也称为最后成员查询报文。IGMP 查询器在收到主机发送的IGMPLeave 报文后,发送指定组查询报文的次数由健壮系数来确定。
最大响应时间
IGMPv2 中设置了最大响应时间,以限制查询器等待主机响应组查询报文(即发送report 报文)的最长时间。
--------------------------------------------------IGMPv3改进功能--------------------------------------------------
IGMPv3 在继承IGMPv2 的基础上进一步增强了主机的控制能力,支持指定源/组功能:主机在加入某组播组G 的同时,能够明确的要求接收或不接收某特定组播源S 发出的组播信息。
* 当主机要求从某些指定源接收组播报文时,其IGMP Report 报告中的Filter-Mode字段将被设置为Include 模式,并在该报告中指定组播源地址Sources。鉴于描述方便,其IGMP Report 报告可以被标记为Include Sources(S1,S2,……)。
* 如果主机拒绝接收某些指定源的组播报文,则Filter-Mode 字段将被设置为Exclude 模式,并指定组播源地址Sources,表示从除指定源外的所有源地址接收组播报文。其IGMP Report 报告可以被标记为Exclude Sources(S1,S2,……)。
例如,网络中存在S1 和S2 两个组播源,均向组播组G 发送组播报文,User 仅希望接收从组播源S1 发往组播组G 的信息,典型组网如图9-2 所示。
如 果主机和路由器之间应用IGMPv1 或IGMPv2,User 加入到某组播组G 后,将接收到来自组播源S1 和S2 的组播信息。如果采用IGMPv3,主机User 可以要求加入指定源S1 对应的组播组G,或退出指定源S2 对应的组播组G,从而仅有来自S1 的组播信息才能传递到User。
携带源地址的查询消息
IGMPv3 支持指定源/组查询。IGMPv3 报文中包含组播源地址字段和多种控制字段(如查询器的健壮系数、查询间隔等)。进行普遍组查询时,不携带组地址,也不携带源地址;进行指定组查询时,携带 组地址,不携带源地址;进行指定源/组查询时,携带组地址,还携带1 个或多个源地址信息。
包含多个组记录的响应消息
IGMPv3 的响应消息(即Report 报告)的目的IP 地址为224.0.0.22,该报文携带1个或多个组记录,在每个组记录中,包含组播组地址、数目不等的源地址信息。组记录可以分为多种类型,如:
* 当前状态记录
报告了接口的当前接收状态,分为Include 和Exclude 两种状态类型。Include 表示包含指定源地址列表,Exclude 表示不包含指定源地址列表。
* 过滤模式改变记录
报告接口接收状态从Include 状态切换到Exclude 状态,或从Exclude 状态切换到Include 状态。
* 源地址列表改变记录
报告新源地址加入,或删除某源地址。
--------------------------------------------------SSM Mapping简介--------------------------------------------------
SSM 映射是SSM 特性的扩展功能,通过在路由器上配置SSM 静态映射信息,为配置了IGMPv1 或IGMPv2 的主机提供支持SSM 的功能服务。
![](http://www.bbfish.net/ipigmp/UploadFiles_8068/200802/20080228152607103.jpg)
如图9-3 所示,对于网络拓扑中的主机,主机HostA、HostB 不支持IGMPv3,仅仅会向RouterA 发送IGMPv1 或v2 报告消息。这时,为主机HostA、HostB 提供特定源/组的组播报文转发服务,有两种解决方案:
* 升级主机上的IGMP 版本为v3 以支持SSM。
* 不改变主机上的IGMP 版本,在查询器RouterA 上使能SSM Mapping,并静态配置特定组播源/组的SSM Mapping 策略。
配置了IGMPv3 的查询器,当接收到来自主机的IGMPv1 或v2 的Report 消息时,首先检查Report 消息中携带的组地址G,然后根据检查结果进行如下处理:
* 如果G 不在SSM 组地址范围内,按照原有IGMPV1/V2 正常流程处理。
* 如果G 在SSM 组地址范围内,但查询器没有SSM Mapping 的相关配置,则丢弃该报告消息(*,G)。
* 如果G 在SSM 组地址范围内,且查询器配置了SSM Mapping 的匹配策略,则依照映射策略将收到的IGMP V1/V2 报文转换成一个或者多个Include Sources(S,G)项,之后就可以像收到了IGMPv3 报文一样处理,从而实现SSM 的功能。
--------------------------------------------------多实例的IGMP--------------------------------------------------
由于IGMP 根据接口来收集组成员关系,VPN 实例的IGMP 根据接口所属实例来处理协议报文的收发,当路由器从网络上收到IGMP 报文时,需要区分该报文所属的实例类型,并在该实例范围内对其进行处理。当需要和其它组播协议交互信息时,只会通知本VPN 实例内的其它组播协议。