《IP组播(第1卷)》一2.6 IGMP版本

简介:

本节书摘来自异步社区《IP组播(第1卷)》一书中的第2章,第2.6节,作者【美】Josh Loveless(乔希 勒夫莱斯) , Ray Blair(雷 布莱尔) , Arvind Durai(阿温德 杜莱),更多章节内容可以访问云栖社区“异步社区”公众号查看

2.6 IGMP版本

要想选择在你的网络中运行哪个版本的IGMP,这取决于操作系统以及网络中使用的组播应用的行为。一般来说,操作系统的功能决定了网络中运行的IGMP版本。IGMP一共有3个版本:版本1、2和3。每一个版本都有独特的特征。在本书写作时,Cisco大部分设备上默认启用的IGMP版本是版本2。

2.6.1 IGMPv1

这是最早的IGMP定义,于1986年记录在RFC 988中。这个RFC文档和RFC 1054都被RFC 1112代替,后者是现在的IGMPv1标准。IGMPv1提供了基本的查询和响应机制,能够确定应该将哪个组播流发送给特定的网段。

IGMPv1的工作与图2-7所示的大体相同,只是有两点主要的区别,这也是使用IGMPv1的主要问题。IGMPv1中主机无法表达它希望离开一个组播组的意愿。当使用IGMPv1的主机离开一个组播组后,路由器仍会继续向它发送这个组播流,直到组播组超时为止。可以想象,如果主机快速加入不同组播组的话,这种做法会在子网中创建大量组播流量。比如主机使用IPTV时的“调台”行为。

为了能够确定一个组播组的成员,查询器(路由器)会向子网中的所有主机发送消息。查询器的这种功能是为了维护一张表,记录子网中的哪些主机对哪些组播流感兴趣。没错,那些从来不想接收任何组播流的主机也会收到这个消息。路由器会向组播地址 224.0.0.1发送查询消息,这个组播地址表示“所有主机”。只要有一台主机响应了这个查询消息,所有其他主机就不会发送报告消息了。

IGMPv1也不具备选择查询器的功能。如果子网中有多台查询器(路由器),那么会选择DR(指定路由器)来使用PIM发送组播数据包,以此防止发送重复的数据包。被选中的查询器是拥有最大IP地址的路由器。在现代网络中很少使用到IGMPv1,Cisco设备也为了规避这些限制,默认设置为使用IGMPv2。

2.6.2 IGMPv2

与所有发明一样,当我们发现不足时,就会做出改进。IGMPv2定义在RFC 2236中,针对IGMPv1进行了增强。其中一项最重要的改进是增加了离开进程。使用IGMPv2的主机可以向查询器发送离开组的消息,表示自己不想再接收这个组播流。这样做极大地消除了在等待组播组超时期间,在子网中发送大量多余的组播流;路由器这时需要追踪组成员关系,并在需要时主动删除成员。

IGMPv2中添加了组查询功能。通过使用这个特性,查询器可以只向属于某个组播组的主机发送消息。组播消息的目标不再是子网中的所有主机。

IGMPv2中的查询器选举进程无须使用PIM,就能决定在子网中使用哪台查询器。除此之外,查询器和DR角色之间不再有任何关系。这要求每台设备都向所有主机组224.0.0.1发送一个通用请求消息。如果子网中有多台路由器,那么DR为拥有最大IP地址的设备,而查询器为拥有最小IP地址的设备。

IGMPv2中也添加了最大响应时间字段,它能够调整请求/响应进程,以此优化离开延迟。

考虑一个问题:发送到表示所有主机地址(224.0.0.1)的组播消息实际上是广播吗?

图2-8展示了IGMPv1和IGMPv2的消息格式。


fd5e310b7a36da751e8e8cc4cd05e9bf0709a467

IGMPv1和IGMPv2支持下列IGMP消息类型。

  • 0x11:成员查询消息。
  • 通用查询消息:用来确定所有组中的组成员。
  • 特定组查询消息:用来确定某个组中是否有成员主机。
  • 0x12:IGMPv1成员报告消息。
  • 0x16:IGMPv2成员报告消息。
  • 0x17:离开组消息。

最大响应时间(MRT)是以1/10秒为增量进行计算的,只用于测量成员查询消息。路由器可以通过这个参数管理这个时间间隔:最后一个主机离开组的时间,与路由协议获得通知的时间之间的间隔。当主机接收到IGMP查询数据包后,它就会开启一个计时器,这个计时器的超时时间是小于MRT的随机值。如果在这个随机计时器超时之前,都没有其他主机通过成员报告进行响应,这台主机将会响应一个报告消息。这样做减少了维护组状态所需的IGMP报告总数量,同时也节省了本地带宽,因为主机只有在必要时才会发送报告消息。IGMPv1中不使用MRT;IGMPv1中的计时器永远设置为10秒。当然这意味着MRT不能小于查询间隔,也就是最大可配置的MRT为25秒(1字节的MRT字段;1/10秒×255 = 25秒)。

校验和是使用消息中的信息计算出来的值,用于错误检测。

例2-1中展示了IGMPv2成员请求数据包。其中需要留意的信息包括源和目的MAC地址。这个查询消息的源是路由器(192.168.12.1),目的使用了组播MAC地址224.0.0.1,这表示子网中的所有设备。从例2-1中捕获的数据包可以看出,IGMP类型是0x11、最大响应时间是0x64(十六进制中的10秒,这是IGMPv2默认的MRT)、校验和,以及组地址是0.0.0.0,这表示它是一个通用查询消息。还要注意TTL(生存时间)字段。这个消息的TTL设置为1,也就是说它不能被发送到多个子网中。当工程师在排查组播问题时,应该总是确保组播发送方发出消息的TTL值,大于或等于网络的传输直径。

例2-1 IGMPv2成员查询数据包

Ethernet Packet:  60 bytes
      Dest Addr: 0100.5E00.0001, Source Addr: 0022.5561.2501
      Protocol: 0x0800

IP    Version: 0x4, HdrLen: 0x6, TOS: 0xC0 (Prec=Internet Contrl)
      Length: 32,  ID: 0x03E6,   Flags-Offset: 0x0000
      TTL: 1,   Protocol: 2 (IGMP),  Checksum: 0x7387 (OK)
      Source: 192.168.12.1,     Dest: 224.0.0.1

      Options: Length = 4
      Router Alert Option: 94 0000

IGMP  VersionType: 0x11, Max Resp: 0x64, Checksum: 0xEE9B (OK)

Version 2 Membership Query
      Group Address: 0.0.0.0

要记得IGMP是一项基于LAN的协议,用来对主机进行管理。人们常认为管理主机是一个麻烦的过程。IGMP的实施中可以配置多个计时器,通过调整这些计时器,修改协议消息的计时和处理,其中包括MRT。例2-2通过命令show ip igmp interface x/x的输出内容,展示了IGMP接口上配置的计时器。

例2-2 命令show ip igmp interface的输出内容

Router#show ip igmp interface e1/0
Loopback0 is up, line protocol is up
  Internet address is 192.168.2.2/32
  IGMP is enabled on interface
  Current IGMP host version is 2
  Current IGMP router version is 2
  IGMP query interval is 60 seconds
  IGMP configured query interval is 60 seconds
  IGMP querier timeout is 120 seconds
  IGMP configured querier timeout is 120 seconds
  IGMP max query response time is 10 seconds
  Last member query count is 2
  Last member query response interval is 1000 ms
  Inbound IGMP access group is not set
  IGMP activity: 3 joins, 0 leaves
  Multicast routing is enabled on interface
  Multicast TTL threshold is 0
  Multicast designated router (DR) is 192.168.2.2 (this system)
  IGMP querying router is 192.168.2.2 (this system)
  Multicast groups joined by this system (number of users):
      224.0.1.40(1)  224.0.1.39(1)  239.1.1.1(1)

本例中输出的计时器都使用了默认值。在一般的组播部署环境中,工程师都不会调整这些计时器,都保持“默认值”。不过管理员也可以根据具体应用程序的需求来调整计时器值(这种情况并不常见),因此了解这些计时器的功能很有必要。

ip igmp query-interval [interval in secs]:一个网段中的主机在收到IGMP查询器发来的查询后,会发送它们的组成员报告作为响应。查询间隔定义了路由器在收到某个组的报告之前,保存IGMP状态的时间。这个保持时间是查询间隔的3倍。
ip igmp query-max-response-time [time-in-seconds]:当主机从IGMP查询器收到查询消息时,它会启用最大响应时间计时器,并在计时器倒计时结束后,向路由器发送报告。这个特性有助于减少主机与第一跳路由器之间的无用流量。最大响应时间不能少于查询间隔。
ip igmp query-timeout [timeout]:这个计时器用于前文介绍的查询器选举过程,尤其是一个LAN网段中有多台路由器的环境。在选举中失利的路由器会在这个计时器超时后,认为查询器已失效。当计时器超时后,路由器会重新开始查询器选举程序。
ip igmp last-member-query-count [number]:在路由器收到离开消息后,它必须在从本地状态表中删除这个组状态之前等待这个计时器的超时。如果路由器上配置了命令ip igmp immediate-leave group-list [list],这个计时器就不再生效了。ip igmp immediate-leave group命令会让路由器把这些组当作只有一个主机成员,因此在收到一个离开消息后,路由器就会马上删除这个组播组。

2.6.3 IGMPv3

IGMPv3(RFC 3376和RFC 4604)在IGMPv1和IGMPv2的基础上增加了很多变化。尽管这些变化很大,但这三个版本仍然可以兼容。要想知道原因,请参考图2-9中展示的IGMPv3头部格式。新增加的重要字段中包括源数量字段、多个源地址字段,以及将最大响应时间字段改为了最大响应代码字段。

从图中的头部格式可以看出,IGMPv3中添加的最重要的功能是支持过滤特定源。这有什么重要的?在使用IGMPv2和IGMPv2时,你无法指定希望从哪个源接收组播流;由于可能会有多个源使用相同的组播IP地址和端口号发送组播流,因此主机在接收流时会发生冲突。源过滤特性允许主机在通告自己的成员状态时,使用包含组列表或排除组列表。这样主机就能指定它希望从哪(几)台接收组播流,或者也可以指定它不希望从哪(几)台设备接收组播流。这个特性也带来了能够通过应用层进行管理的安全功能。IGMPv3也用于实现二层的SSM(特定源组播)。第3章中将介绍SSM。

除了这个变化之外,IGMPv3中的MRT也再次更新了;实际上,在RFC 3376中它已经变更为MRC(最大响应代码)。与IGMPv2中的MRT字段类似,最大响应代码字段也定义了必须收到组报告的最大时间。MRC(最大响应代码)中仍然能够包含MRT,MRT以1/10秒为单位。MRC字段中一共有8个比特,这些比特的取值决定了设备该如何理解这个MRC。如果MRC的取值小于128,MRT(最大响应时间)的取值就等于MRC的值。如果MRC的取值大于或等于128,那么这个MRC会通过浮点值对应一个长得多的时间范围。这也让可配置的最大计时器值变为了55分钟。


357fd5520cad53740719de0fb744f07a2d82c772

IGMPv3中修改后的响应时间能够更好地适应不同类型的网络连接。网络工程师可以通过使用较小的计时器值,更精确地调整主机的离开延迟;也可以使用较大的计时器值,降低组管理流量带来的突发流量,比如在低带宽的无线网络中。

例2-3中展示了一个捕获的IGMPv3数据包,这是从IGMPv3主机发来的成员报告,主机的IP地址是192.168.7.14,组成员报告请求从源192.168.8.10接收发往组播地址224.64.7.7的组播流。

例2-3 IGMPv3组成员报告数据包

Ethernet II, Src: (80:ee:73:07:7b:61), Dst: (01:00:5e:00:00:16)
    Type: IP (0x0800)
Internet Protocol Version 4, Src: 192.168.7.14, Dst: 224.0.0.22
    Version: 4
    Header length: 24 bytes
    Differentiated Services Field: 0xc0 (DSCP 0x30: Class Selector 6; ECN: 0x00:
  Not-ECT (Not ECN-Capable Transport))
    Total Length: 52
    Identification: 0x0000 (0)
    Flags: 0x02 (Don’t Fragment)
    Fragment offset: 0
    Time to live: 1
    Protocol: IGMP (2)
    Header checksum: 0x3c37 [validation disabled]
    Source: 192.168.7.14
    Destination: 224.0.0.22
    Options: (4 bytes), Router Alert
Internet Group Management Protocol
    [IGMP Version: 3]
    Type: Membership Report (0x22)
    Header checksum: 0x4a06 [correct]
    Num Group Records: 2
    Group Record : 224.64.7.7 Mode Is Include
        Record Type: Mode Is Include (1)
        Aux Data Len: 0
        Num Src: 1
        Multicast Address: 224.64.7.7
        Source Address: 192.168.8.10
    Group Record : 224.0.0.251 Mode Is Exclude
        Record Type: Mode Is Exclude (2)
        Aux Data Len: 0
        Num Src: 0
        Multicast Address: 224.0.0.251

注意这个IPv4数据包的目的IP地址;这个数据包是发往224.0.0.22的。这是所有主机用来发送它们的成员报告所使用的目的IP地址。

相关文章
|
4月前
|
缓存 算法 网络架构
【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发
【网络层】IP组播(多播)、硬件组播、IGMP、组播路由选择协议、移动IP、路由器详解、路由表和路由转发
61 0
|
8月前
|
存储 缓存 网络协议
交换机、IP地址、ARP协议
划分洪泛范围—隔离广播域(收到所有洪泛信息的设备集合) 每一个接口都是一个广播域 转发数据 路由表
82 0
|
11月前
|
网络架构
IP组播路由协议(组播内部网关协议)
IP组播路由协议(组播内部网关协议)
64 0
|
缓存 网络协议
|
网络架构 架构师 网络协议
《IP组播(第1卷)》一导读
本书包含了基本IP组播原理和路由技术,尤其是Cisco路由器和交换机使用的组播技术,其中切合实际地讨论了 IP 组播网络的常见特性、部署模型和实战经验,之后讨论了 Cisco IP组播网络在实施和排错时使用的命令和方法。
1845 0
|
网络协议 算法 网络架构
【计算机网络】网络层 : IP 组播 ( IP 数据报传输方式 | 组播 IP 地址 | 组播 MAC 地址 | IGMP 协议 | 组播路由选择协议 )
【计算机网络】网络层 : IP 组播 ( IP 数据报传输方式 | 组播 IP 地址 | 组播 MAC 地址 | IGMP 协议 | 组播路由选择协议 )
296 0
【计算机网络】网络层 : IP 组播 ( IP 数据报传输方式 | 组播 IP 地址 | 组播 MAC 地址 | IGMP 协议 | 组播路由选择协议 )
|
网络协议 算法 网络架构
【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )
【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )
433 0
【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )

热门文章

最新文章