组播技术基础——IGMPv2简介

报文类型

在IGMPv2报文中,一共有四种报文。

  1. 成员关系查询(membership query)
    IGMPv2定义了两种成员关系查询报文的子类型:常规查询(General Query)报文及特定组查询(Group-Specific Query)报文。
  • 常规查询:IGMP查询器使用该报文向直连网段进行查询,以确认该网段中是否存在组播组成员。由于该报文查询的是所有组播组,因此也被称为普遍组查询报文。常规查询报文的目的IP地址为224.0.0.1(标识所有组播节点)。
  • 特定组查询:运行IGMPv2的主机在离开其所加入的组播组时,会主动发送一个IGMPv2离组报文,用于宣告自己离开组播组,当网络中的查询器收到这个离组报文后,需要确认该组播组中是否存在其他成员,此时该查询器便会发送特定组查询报文,该报文只针对特定的组播组进行查询,报文的目的IP地址为其所查询的组播组地址,而且报文载荷中的“组地址”字段也记录了这个组播组地址。
  1. 成员关系报告(membership report)
    当主机加入组播组时,或者当其收到查询器发送的常规查询报文时,主机将发送成员关系报告报文,该报文的目的IP地址是主机所加入的组播组地址,而且报文载荷中的“组地址”字段也记录了该组播组地址。

  2. 离组报文(leave group)
    IGMPv2在IGMPv1的基础上增加了离组报文,当主机离开其所加入的组播组时,便会主动发送离组报文。离组报文的目的IP地址为224.0.0.2(标识所有组播路由器),报文载荷中的“组地址”字段记录了主机所要离开的组播组地址。

  3. 版本1成员关系报告(version1 membership report)
    该报文用于兼容IGMPv1,报文中的类型字段值是0x12。

报文格式

IGMPv2的报文格式和IGMPv1类似,如下图所示:
在这里插入图片描述
字段含义如下:

  • 版本(version):对于IGMPv2,该字段值为2。
  • 类型(type):若是成员关系查询报文,该字段值是0x11;若是成员关系报告(IGMPv2)报文,该字段值为0x17;若是版本1成员关系报告报文,该字段值为0x12。
  • 校验和(checksum ):用于校验IGMPv2报文。
  • 最大响应时间(max response time):该字段指的是主机使用成员关系报告来响应该成员关系查询报文的最长等待时间(缺省是10s,可设置)。该字段只在成员关系查询报文中被设置,在其他IGMPv2报文中被设置为0。
  • 组地址(Group Address):若是常规查询报文,该字段值被设置为0(0.0.0.0);若是特定组查询报文,该字段值被设置为所查询的特定组播组的IP地址;若是离组报文,该字段的值被设置为主机离开的组播组的IP地址;若是成员关系报告报文,该字段值被设置成组成员加入组播组的IP地址。

示例

在这里插入图片描述
如上图所示的网络拓扑,PC1、PC2、PC3以及R1连接到了同一台二层交换机,并且都属于相同的VLAN,使用相同的IP网段。在R1的GE0/0/1接口激活了IGMPv2。PC1及PC3是组播组239.1.1.1的成员,而PC2是组播组239.1.1.2的成员。

IGMPv2查询及响应

  • IGMPv2的常规查询与响应机制和IGMPv1基本相同,查询器(IGMPv2路由器)发送一个目的地址是224.0.0.1的组播IP地址报文,用于查询本网段内是否存在组播组的组播成员,组播成员(IGMPv2 PC)收到查询报文之后,会发送一个目的地址是所属组播地址(比如239.1.1.1)的成员关系报告报文应答查询器。
  • 和IGMPv1相同,为了减少多余的组播成员关系报告报文,IGMPv2也有成员关系报告抑制机制。和IGMPv1略微不同的是,用于成员关系报告抑制机制中的报告延时定时器(report delay timer)的时间是可以通过配置命令设置的,查询器通过常规查询报文中的最大响应时间(max response time)字段来传递给组成员。
  • 当主机收到该查询报文时,会读取该报文中的“最大响应时间”字段的值,并启动一个报告延迟计时器,该计时器的时间被设置为一个随机数,取值范围是0~最大响应时间。当该计时器超时的时候,主机便立即发送成员关系报告。当然,如果在此之前,主机收到了同一个组播组内的其他成员发送的成员关系报告,则会抑制自己的报告。

IGMPv2组成员离开

与IGMPv1组成员的默默离开不同 ,IGMPv2定义了组播组成员的离开机制,在IGMPv2中,组成员离开组播组时,会主动发送IGMPv2离组报文。

以上图中PC1离开组播组239.1.1.1时举例:
(1)PC1离开组播组239.1.1.1,它将发送一个IGMPv2离组报文,该报文的目的IP地址是224.0.0.2(所有路由器组播地址),报文中的“组地址”字段的值被设置为239.1.1.1(离开的组播组IP地址)。
(2)R1收到了这个离组报文后,得知有组成员要离开组播组239.1.1.1,于是它立即针对该组发送IGMPv2特定组查询报文,报文的目的IP地址为239.1.1.1(要查询的组播组地址),而且报文载荷中的“组地址”字段也记录了这个组播组地址,以确认该组播组中是否还有其他成员。如果在很短的时间内没有主机回应该查询(缺省最大响应是1s),则R1将再次发送一个IGMPv2特定组查询报文(缺省发2次报文,间隔时间为1s)。
(3) PC3收到了R1发送的IGMPv2特定组查询报文后,它发现R1正在查询的就是自己所加入的组播组,因此它立即发送一个IGMPv2组成员关系报告报文用于通告自己的存在。
(4)R1收到了PC3发送的组成员关系报告后,便知道了组播组239.1.1.1中还存在着其他成员,因此它将继续维护该组的成员关系(IGMP组成员表项、IGMP路由表、组播路由表),并继续向该网段转发239.1.1.1的组播流量。

若是PC2离开组播组238.1.1.2时,离组步骤和上述基本相同,略微存在差异的是,当R1发送目的地址是239.1.1.2的特定组查询报文时,直连网段内不会有组成员进行应答。由于没有组成员进行应答,当其组成员老化定时器超时之后,R1将不再维护其组成员表项,后续也不会向该网段转发239.1.1.2的组播流量。

IGMPv2查询器

问题背景

如果在同一个网段中连接着多台组播路由器,并且这些路由器都在接入该网段的接口上激活IGMPv1,且都向该网段发送IGMPv1成员关系查询报文,这显然会增加网络中的多余IGMP流量。

解决方法

IGMPv1没有定义查询器的选举机制,而IGMPv2则定义了查询器的选举机制:接口IP地址最小的路由器成为该网段的IGMPv2查询器,它将负责向这个网段执行查询操作。

扫描二维码关注公众号,回复: 11091165 查看本文章

如下图所示,R1及R2都是最后一跳路由器,两者都在各自的GE0/0/ 1接口上激活了IGMPv2。
在这里插入图片描述

  • 在初始情况下,双方都认为自己是GE0/0/1接口所直连的网段的IGMPv2查询器,因此都向该网段发送IGMPv2常规查询报文。
  • R1及R2都会收到对方发送的常规查询报文,它们将报文的源IP地址与自己的接口IP地址进行比较,由于R1的接口IP地址更小,因此在本例中R1胜出成为查询器,而R2则是非查询器(Non-Querier)。R1的GE0/0/1接口继续周期性地发送常规查询报文,而R2则停止发送。
  • 非查询器会为当前的查询器启动一个其他查询器存活计时器(Other Querier Present Timer),该计时器的时间缺省为125秒(可配置),每次收到查询器发送的查询报文时(缺省时60s),该计时器将被重置。如果长时间没有收到查询器发送的查询报文并导致该计时器超时,那么非查询器将认为当前的查询器已经发生故障,此时新一轮查询器的选举过程将被触发。

相关表项

  • 使用display igmp interface命令(HW)可以查看设备激活了IGMP的接口及其状态,例如在R1上查看IGMP接口状态:
    在这里插入图片描述
    通过“Querler for IGMP: 192.168.1.252 (this rooter)”可以判断该该设备是其GE0/0/1接口所连接网段的查询器。

  • 使用display igmp group命令(HW)可以查看设备的IGMP组表,例如查看R1的IGMP组表:
    在这里插入图片描述
    Uptime字段显示了该表项己经存在的时间,Expires列则显示了该表项超时的时间,这个时间缺省从2分10秒(也即130秒)开始倒计时,当该时间达到0时,表项会被删除,当然如果在此之前收到该组播组内任意一个成员的成员关系报告,则该时间将被刷新。

  • 使用display igmp group static命令(HW)可以查看设备的IGMP静态组表,例如查看R1的IGMP静态组表:
    在这里插入图片描述

发布了17 篇原创文章 · 获赞 1 · 访问量 237

猜你喜欢

转载自blog.csdn.net/mn3321/article/details/105604386
今日推荐