IGMP协议概述

IGMP协议

一、简介

  IGMP协议运行于主机和与主机直连的组播路由器之间。

  IGMP工作机制 

    • 接收者主机向所在的共享网络报告组成员关系。
    • 查询器周期性地向该共享网段发送组成员查询信息。
    • 接收者主机接收到查询消息后进行相应以报告组成员关系。
    • 网段中的组播路由器一句接收到的相应来刷新组成员的存在信息。

  支持组播的路由器不需要也不可能保存所有主机的成员关系,它只是通过IGMP协议了解每个接口连接的网段上是否存在某个组播组的接收者,即组成员。(所以对应于某个组播组,会存在一个Last Reporter的巨鹿表项),而各主机只需要保存自己加入了哪些组播组。

二、协议发展

  • 目前,IGMP协议共有3个版本:
    • IGMPv1(RFC1112)定义了基本的组成员查询和报告过程。
    • IGMPv2(RFC2236)在IGMPv1的基础上添加了组成员快速离开的机制。
    • IGMPv3增加的主要功能是成员可以指定接收或指定不接收某些组播源的报文。
  • 三个版本在演进过程中对协议报文的处理是向前兼容的,因此尽管各版本的协议报文格式不同,但是运行IGMP高版本的路由器可以识别低版本的成员报告。
  • 所有IGMP版本都支持ASM(Any-Source-Multicast)模型。IGMPv3可以直接应用于SSM(Source-Specific Multicast)模型,而IGMPv1和IGMPv2则需要SSM-Mapping技术的支持。

三、IGMPv1

  1、报文格式

  Version:IGMP版本标识,版本1为1,IGMPv2报文中没有该字段。

  Type:类型字段,表示IGMP报文类型。IGMPv1支持两种类型的报文:

  • 成员关系查询(0×11):路由器周期性的发送成员关系查询报文去查询是否有组播成员。默认查询周期为60秒。
  • 成员关系报告(0×12):成员关系报告用于表示主机想加入某个组播组。成员关系报告可以主动发送也可以被动发送:
    • 被动发送是指主机收到成员关系查询消息后如果对某个组播组感兴趣想加入组播组时发送成员关系报告。
    • 主动发送是指如果主机想加入某个组播组时,可以不用等待成员关系查询报文,而主动地发送成员关系报告。

  Checksum:IGMP消息的校验和。该字段在进行校验计算时设置为0。

  • 当传送报文的时候,必须计算该校验字并插入到该字段中去。
  • 当接收包的是hi,该校验字必须在处理该包之前进行校验。

  组地址:不同类型的IGMP报文中组地址不同。

  • 在成员关系报告报文中,组地址为某个特定的组播地址。
  • 在成员关系查询报文中,组地址为0。

  2、IGMPv1的抑制机制

  IGMP成员关系查询报文是目的地址224.0.0.1,就是说网段内的所有设备都会接收到该查询报文。

  但并不是所有接收到该报文的主机都会响应查询请求的。

  实际上主机收到IGMP成员关系查询时,会对它已经加入的每个组播组启动一个倒计数报告计时器,计时器的值默认为0到最大响应值,IGMPv1中的最大响应值固定使用10秒。计时器到时的主机则主动发送成员关系报告,组地址为该组播地址,目的地址为224.0.0.1,于是网段内其他主机都会收到该成员关系报告报文,接收到成员关系报告报文的主机抑制成员关系报告的发送,并删除计时器。

  当路由器周期性的发送成员关系查询报文时,每一个主机都会再次启动计时器进行查询/响应/抑制。(路由器的查询间隔为60秒)

  3、IGMPv1组成员离开

  由于IGMPv1版本没有定义专门离开组播组的消息,因此主机离开组时是默默离开不发送任何报文。

  当离开的成员超过60秒没有向路由器发送成员关系报告报文时,路由器会认为组内已经没有此成员,便不会再向该网段发送组播报文。

四、IGMPv2

  1、报文格式:版本2和版本1的报文略有不同,取消了版本字段而相应增加了最大响应时间字段。

  • Type:报文类型,IGMPv2报文中有三种报文类型。
    • Type=0×11:成员关系查询报文,分为两种子类型:
      • 常规查询:用于确定哪些组播组是有效的,常规查询组地址全为0
      • 特定查询:用于查询特定的组播组是否还有组成员。组地址为特定的组播地址。
    • Type=0×16:IGMPv2组成员关系报告
      • 为了和IGMPv1兼容,还有另外的消息类别:0×12(IGMPv1成员报告)
    • Type=0×17:离开组消息,主机发送的离开报告
      • 只有last reporter才会发送,不是last reporter则依然会默默离开
  • Max Resp Time:最大响应时间字段,仅用于组成员关系查询。表示主机响应查询返回报告的时间范围。IGMPv1中没有该字段。
    • 普遍组查询最大响应时间为10秒
    • 特定组查询最大响应时间为1秒
  • Checksum:IGMP消息的校验和,是IGMP消息长度的16位检测。
    • 传送报文时,必须计算校验和并填入该字段中
    • 接收报文时,必须在处理报文之前的检验校验和,以判断IGMP消息在传输过程中是否发生了错误。
  • 组地址字段:发送常规查询时,组地址字段设置为0
    • 特定组查询时,设置为要插损的组地址
    • 当主机成员发回组关系报告或是离开组消息时,本字段设置为目标组地址。

  2、IGMPv2查询器选举

  对于一个网段上有多个组播路由器的共享网段,此网段下运行IGMP的路由器都能从主机那里收到成员关系报告消息,但是只需要一个路由器发送成员资格查询消息,所以这就需要一个路由器选举机制来确定一个路由器作为查询器。

  只有查询器才会发送成员关系查询报文。IGMPv1版本中,查询器的选择由组播路由协议决定;

  IGMPv2版本对此做了改进,规定同一网段上有多个组播路由器时,具有最小IP地址的组播路由器被选举出来充当查询器。

  路由器启动,主动发出到目的地(224.0.0.1)的IGMPv2常规查询信息。

  收到常规查询信息的路由器,会把此信息的源IP地址和接收口的IP地址作比较,拥有最低IP地址的路由器被选举为IGMP查询路由器。

  查询器也会有失效的时候,当查询器失效时,另一路由器成为查询器。所以非查询路由器会启动一个查询计时器,周期检查IGMP查询路由器的状态,缺省情况下120秒(其实就是等两个查询周期)。该值可以通过命令 timer other-querier-present interval 修改。

  3、IGMPv2组成员离开

  离开报告报文目的地址:加入的组播组地址;

  在IGMPv1版本中,主机悄然离开组播组,不会向任何组播路由器发出任何通知。造成组播路由器只能依靠响应超时来获知组播成员的离开。

  而在v2版本中,当一个主机决定离开一个组播组时,它会向网络中所有组播路由器以组播方式(224.0.0.2)发送离开组的消息(目的地址为加入的组播组地址),为了明确该组播组中是否还包含其它成员主机,该组播路由器会向网络中发送特定组查询消息。在查询的最大响应时间内(默认为1秒)没有收到该组的报告,则再次发送特定组查询。2次特定组查询后仍没有收到成员报告,则认为组播成员全部离开。(注意只是该组的组播成员,但网络中可能还有其它的组播组)(发送针对组成员离开的特定组查询,最大响应时间才为1s,其它情况为10s

五、IGMPv3

  1、报文格式

  • IGMPv3主要是为了配合SSM(Source-Specific Multicast)模型发展起来的,提供了在报文中携带组播源信息的能力,即能加入到指定源的组播组。
  • 相较于IGMPv2IGMPv3新增的报文:
    • 特定源组查询报文
    • 报告报文包括主机要加入的组和组播源的过滤模式
      • INCLUDE
      • EXCLUDE(如果没有指定源,则主机加入组时默认为此模式,并且exclude列表为null
    • 取消成员关系报告抑制机制
      • 因为有可能加入了相同的组,但是不同的源,这就要分开来查询了
  • IGMPv3的报文格式可参考报文格式大全,它包含了查询报文和报告报文两种不同格式的报文

  IGMPv3查询报文

  相较IGMPv2,其变化如下:

  • 查询报文中除了普遍组查询特定组查询,新增了特定源组查询报文Group-and-Source-Specific Query)。该报文由查询器向共享网段内特定组播组成员发送,用于查询该组成员是否愿意接收特定源发送的数据。特定源组查询通过在报文中携带一个或多个组播源地址来达到这一目的。
  • IGMPv3主机离开某一个组时,路由器就会发送该特定源组查询报文
  • 需要注意的是,IGMPv3支持特定组查询是为了兼容IGMPv2

  IGMPv3报告报文

  相较IGMPv2,其变化如下:

  • 报告报文不仅通知路由器主机要加入某组播组,并且可以指定只接收哪些组播源发往该组的数据。
  • IGMPv3增加了针对组播源的过滤模式(INCLUDE/EXCLUDE)
    • G,INCLUDE,(S1、S2...)),表示只接收来自指定组播源S1、S2……发往组G的数据;
    • (G,EXCLUDE,(S1、S2...)),表示接收除了组播源S1、S2……之外的组播源发给组G的数据,即S1、S2……在接收范围之外。
  • IGMPv3报告报文的目的地址为224.0.0.22,表示发往所有使能了IGMPv3的路由器

  2、工作机制

  • 如果主机和路由器之间运行的是IGMPv1或IGMPv2,主机加入组播组G时无法对组播源进行选择,无论其是否需要,都会同时接收到来自组播源S1和S2的数据。
  • 如果采用IGMPv3,主机可以选择仅接收S1组播数据。
    • 方法一:Host发送IGMPv3报告(G,IS_IN,(S1)),仅接收S1向组播组G发送的数据。
    • 方法二:Host发送IGMPv3报告(G,IS_EX,(S2)),不接收指定源S2向组播组G发送的数据,从而仅有来自S1的组播数据才能传递到Host。
posted @ 2022-04-13 17:14  超级无敌狍子  阅读(1987)  评论(1编辑  收藏  举报