问题描述
IGMPv1 有一定缺陷:
1)IGMPv1离组使用超时机制,组成员只能静默离组。在未超时的时间内,组播流量依然会被组播路由器转发。
2)IGMPv1 IGMP Querier 选举必须要依赖PIM协议,导致 IGMP Querier 选举不够灵活。
解决方案
IGMPv2 vs. IGMP v1
在保持对 IGMPv1 兼容的同时,IGMPv2 还改善 IGMPv1 的缺陷。
相同点:
1)协议兼容:IGMPv2 能与 IGMPv1 兼容。
2)加组机制:IGMPv2 组成员加组机制与 IGMPv1 基本相同
改进点:
1)选举机制:IGMPv2 增加 IGMP Querier 选举机制;
2)离组机制:IGMPv2 增加 离开组机制;
查询器选举机制
与 IGMPv1 比,IGMPv2 IGMP Querier 选举机制有较大改进,IGMPv2 使用独立的 IGMP Querier 选举机制。
当网络上存在多个 Multicast Router 时,IP Address 最小的路由器成为 IGMP Querier 角色:
1)初始状态都认为自己是 IGMP Querier ,并且都会发送 IGMP Membership Query 报文;
2)当收到对端报文后,接口 IP Address 最小的 Multicast Router 自动成为 IGMP Querier ;
3)非 IGMP Querier 上都会启动一个定时器(即其他 IGMP Querier 存在时间定时器 Other Querier Present Timer,默认 120s)。在该定时器超时前,如果收到来自 IGMP Querier 的 Query 报文,则重置该定时器;否则认为原 IGMP Querier 失效,并发起新的 IGMP Querier 选举过程。
组成员加组机制
IGMPv2 组成员加组机制与 IGMPv1 一致,不再赘述。
组成员探测机制
在 IGMPv2 中,引入组成员离组机制,所以无需特意来探测组内是否存在成员。
组成员离组机制
新增两种报文
为了改善组成员离开机制,IGMPv2 新增 Leave Group 报文与 Group-Specific Query 报文,来加速感知 IGMPv2 组成员离开。
1)成员离开报文(Leave Group):成员离开组播组时主动向 IGMP Querier 发送该报文,以宣告自己离开某个组播组。成员离开报文目的地址为 224.0.0.2(仅 IGMP Querier 处理)。
2)特定组查询报文(Group-Specific Query):IGMP Querier 向共享网段内指定组播组发送的 Query 报文,用于查询该组播组是否存在成员。特定组查询报文目的地址为所查询组播组的组地址。(IGMPv1 中,Query 报文会查询所有组,而无法查询特定组)
IGMPv2 对 Query 报文格式进行改进,添加 Max Response Time(最大响应时间)字段。此字段取值可以通过命令配置,用于控制成员对于查询报文的响应速度(终端将生成 Max Response Time 以内的随机数,而非 IGMPv1 中默认 10s 时间,这实现根据需要来控制 Report 报文的响应速度)。
离组机制细节
当组成员离组时,组播组成员向本地网段内的所有组播路由器(DST-IP-Address 224.0.0.2)发送针对组 G1 的 Leave Group 报文:
1) IGMP Querier 收到离开报文,会发送针对组G1的特定组查询报文。发送间隔和发送次数可以通过命令配置,缺省情况下每隔1秒发送一次,共发送两次。同时 IGMP Querier 启动组成员关系定时器(Timer-Membership=发送间隔x发送次数)。
—- 如果该网段内还存在组G1的其他成员,这些成员在收到 IGMP Querier 发送的特定组查询报文后,会立即发送针对组G1的报告报文(默认每隔1秒发送一次,共发送两次,所以终端设备要立即响应,而不能使用默认的 Max Response Time 中设置的时间)。 IGMP Querier 收到针对组G1的报告报文后将继续维护该组成员关系。
—- 如果该网段内不存在组G1的其他成员, IGMP Querier 将不会收到针对组G1的报告报文。在Timer-Membership超时后, IGMP Querier 将删除(*,G1)对应的IGMP组表项。当有组G1的组播数据到达 IGMP Querier 时, IGMP Querier 将不会向下游转发。
设备厂商的实现可能有所不同:
1)如果 Last Report 未离组,那么其他终端设备离组时,IGMP Querier 不会发送特定组查询报文。
补充说明
1)如果 Last Report 直接拔出网线,即没有及时发送 Leave 报文。只能等待时间超时(130s),