分享

【组播技术入门 05】IGMPv2(RFC2236)

 wusiqi111 2016-03-09

【组播技术入门 05】IGMPv2(RFC2236)

        
                               


              
         
1.消息格式
【组播技术入门 <wbr>05】IGMPv2(RFC2236)

TYPE:      请看消息类型小节
Max Resp Time:
最大响应时间(只在查询消息中设置,其他消息中为0x00)是主机用membership report 来响应查询包的最长等待时间,默认10s,使用ip igmp query-max-response-time修改(此处设置的单位是s),而这个时间存储在报文中则是以1/10s为单位。因此这个值的范围是:0-255个1/10s或0-25.5s
Group address:
在发送常规查询时,该字段为全0;特定组查询中该字段设置为该组的组播地址。
在成员关系报告或离开组消息中,该字段设置为目标组播组地址。

2.消息类型

2.1 成员关系查询 Membership query (TYPE:0x11)

  • 常规查询General Query

路由器向子网中所有主机进行轮询 发向224.0.0.1,而且不涉及任何一个具体组播组。消息中的组地址设置为0.0.0.0。
如果一台组播路由器在querier timeout 计时器(默认是3倍的查询间隔)超前仍没有收到一个特定子网的Membership Report消息,那么这个路由器将宣布这个子网中没有组员,不再向这个子网发送组播数据。
常规查询默认60s发送一次(范围0-65535),可使用ip igmp query-interval修改。这个查询中同时包含Max ResponseTime,这个值告诉主机用membership report消息回应这个查询的最长等待时间,默认10S,使用ip igmp query-max-response-time修改,单位1/10S,范围是0-255个1/10S。

  • 特定组查询Group-Specific Query

路由器的Group-Specific Query消息是根据主机发出的Leave Group消息而发出的,当路由器收到Leave Group消息时,必须判断子网中是否仍有组员存在。特定组查询消息报文目的地址为该发出Leave Group的主机所在组的组地址。为了避免Group-Specific Query被意外丢弃或被破坏导致路由器误以为组内没有成员了,因此查询路由器将间隔1S一次性发送两个Group-Specific Query消息(可以使用ip igmp last-member-query-count修改发送几个特定组查询消息),如果依然没有成员响应,路由器删除该组。
2.2 Membership Report (0x16)

这个消息在一台主机第一次加入组播组时发送,用于通知IGMP查询器自己要加入特定的组播组。这个报文也用来响应IGMP查询器发出的membership Query。该消息被封装在IP报文中,目的是该主机期望加入的组播组地址。
2.3 Version1 Membership Report (0x12)

功能同上,为兼容V1而设定的消息。
2.4 Leave report (0x17)

发向224.0.0.2,这样子网中的组播路由器都知道。这个消息包含有想退出的组播组的地址。当IGMP查询器收到一个离开消息的时候,会向这个特定组发送一个“特定组查询消息”,这样,如果这个组内还有其他PC,则有人会回应,如果没有人回应,则路由器将不向该组发送组播消息。

3.报告抑制机制

当一台主机想加入某个组播组(224.5.5.5)时,发送关于224.5.5.5的Membership Report,由于这是个组播报文,当二层交换机收到时,没有关于这个目的MAC地址(01-00-5e-05-05-05)的转发表项,因此就从所有端口发送出去,这时,当网络中还有需要接收224.5.5.5组播数据的主机收到这个关于224.5.5.5的Membership Report时,自己就不会再发送关于224.5.5.5的Membership 报文.这样可以减少组播数据在网络中的泛洪。这些个现象,可以通过debug ip igmp看到。

4.离开机制
【组播技术入门 <wbr>05】IGMPv2(RFC2236)

首先我们看一下上图所示的情况:有组成员希望离开组播组,但该主机不是子网中该组播组的最后一个组播成员。
  • PC1要离开组224.1.1.1,发送IGMPv2离开消息,目的地址是224.0.0.2。
  • A收到该消息,发送一个“特定组查询消息”以便确认该子网中是否有该组的其他成员。
  • PC3仍然是组224.1.1.1的成员,因此它将响应该查询。
  • A知道该子网中仍然存在该组播组的成员。
【组播技术入门 <wbr>05】IGMPv2(RFC2236)

上面这种情况,PC2为224.2.2.2组播组的最后一个成员:
  • PC2要离开组播组224.2.2.2,发送IGMPv2离开消息,目的地址是224.0.0.2。
  • A收到该消息,发送一个特定组查询消息以便了解该子网中是否有该组播组的其他成员。
  • 现在组224.2.2.2已经没有成员了,因此没有主机对这个查询包进行响应。A在等待“最后组成员查询期间”(last-member-query-interval 默认1s),仍然向没有响应的地方发送另一个特定组查询(其实前后一共发了两个,可以用last-member-query-count来修改个数)。此后确认组中没有成员,停止转发该组在子网中的流量。

5.IGMPv2查询器
【组播技术入门 <wbr>05】IGMPv2(RFC2236)

如果一个LAN中有多个组播路由器,这些组播路由器都发送IGMP查询消息的话那就显得非常多余且低效,这种情况下我们会在这些路由器(的接口)中选择出一台IGMP查询器。前面我们已经了解到IGMPv1没有定义机制来选举查询器,因此不得不依赖于第三层的组播路由协议来协助选择。而IGMPv2就定义了查询器的选举办法,IP地址小(指的是发送genernal Query的源地址)的路由器来充当IGMP查询器,由它来发送查询消息。
初始化的时候大家伙儿都会发,稳定后只有IP小的那个充当查询者。如果非查询者在“other query persent Interval”(other query persent Interval这个计时器在CISCO IOS上默认120s,这个时间是查询间隔计时器的两倍,后来IETF又做了微调,把查询间隔计时器改成125s,因此other query persent Interval默认就是两倍的125s也就是250s,这里在实际部署的时候一定要注意新旧设备的计时器差异) 内没有收到查询者的查询,那么它会认为查询者挂了,自己就会成为查询者。

6.IGMPv2计时器
【组播技术入门 <wbr>05】IGMPv2(RFC2236)


红茶三杯 

网络工程 | 项目管理 | 技术培训
沉淀 提升 成长 分享
站点:http://

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多