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

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的消息格式。

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分钟。

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地址。

时间: 2025-01-20 13:09:34

《IP组播(第1卷)》一2.6 IGMP版本的相关文章

《IP组播(第1卷)》一第1章 IP组播入门1.1 组播解决了什么问题

第1章 IP组播入门 IP组播(第1卷) IP网络中有3种数据通信方式:单播.广播和组播.在开始深入探讨组播通信方式之前,我们先来理解单播和广播的基本组成部分,以此来建立一条基线. 单播通信位于OSI(开放式系统互联)模型的第3层,基于目的设备的IP地址进行转发.路由器会通过静态或动态的方式学到路由,然后通过查看目的IP地址来转发数据包.OSI第2层使用MAC(媒体访问控制)地址,以另一种机制在设备之间建立通信. 下面来看看图1-1.发送方正在向接收方A发送一个消息,这个消息的传输过程中需要用到

《IP组播(第1卷)》一第2章 网络访问和二层组播2.1 层的封装

第2章 网络访问和二层组播 IP组播(第1卷)第 1 章讨论了单播消息.广播消息和组播消息之间的区别.本章将深入探讨二层IP组播消息,以及它们是如何在二层域中传输的.本章的内容将包含二层域中组播功能的基本组成部分,以及组播的部署. 2.1 层的封装 在学习二层组播之前,我们必须先讨论数据包转发的基础概念,这样才能为这一过程建立一条基线.封装是OSI模型中的重要概念,在数据通信尤其是IP网络中起到重要的作用.封装是指通过一种方式,在OSI参考模型的每一层上添加相关信息,这些信息的作用是处理和转发数

《IP组播(第1卷)》一导读

前 言 IP组播(第1卷)本书包含了基本IP组播原理和路由技术,尤其是Cisco路由器和交换机使用的组播技术,其中切合实际地讨论了 IP 组播网络的常见特性.部署模型和实战经验,之后讨论了 Cisco IP组播网络在实施和排错时使用的命令和方法. 本书读者对象本书适用于所有为IP组播网络提供支持的专业人士.本书的目标读者为以下人士,网络管理员也会从本书包含的案例学习和特性解释中获得帮助: IP网络工程师和架构师: 网络操作技术员: 网络顾问: 安全专家: 融合专家和架构师. 目 录 第1章 IP

《IP组播(第1卷)》一1.4 三层组播是建立在TCP/IP协议栈中的

1.4 三层组播是建立在TCP/IP协议栈中的 IP组播是建立在TCP/IP协议栈中的.也就是说,传输组播数据帧和数据包所需的协议是由Internet工程任务组(IETF)进行控制的.IETF成员通过RFC发布和管理相关协议,也就是说IP组播协议是开放标准. 注释 组播协议IETF标准适用于IPv4和IPv6组播技术:但和其他IP协议一样,这并不意味着所有厂商处理组播的方式都是相同的,同时也不意味着所有组播协议的实施都能够与标准完美兼容. 使用TCP/IP协议栈也意味着IP组播隶属于互联网数字分

《IP组播(第1卷)》一2.3 组播数据帧的交换

2.3 组播数据帧的交换 二层交换机会根据目的MAC地址将数据帧发送到物理接口或逻辑接口.组播MAC地址与单播MAC地址是不同的,因为单播MAC地址应该是唯一的,它应该对应着唯一一个目的接口.组播MAC地址可能会对应着多个目的接口,这取决于有多少台设备请求接收这个IP组播流中的内容. 在二层交换机能够转发组播数据帧之前,它必须知道应该把消息发往哪些目的接口.它会在目的接口列表中记录需要接收这个组播数据帧的接口,这个列表中只包含那些注册了这个组播流的设备所连接的接口.工程师可以在目的接口列表中静态

《IP组播(第1卷)》一2.4 组的注册

2.4 组的注册 前文我们已经看到了,为了使本地网段和整个网络中的 IP 组播转发能够正常工作,交换机和网关路由器需要知道有哪些主机对组播组感兴趣,以及这些主机都连接在哪里.如果没有这些信息的话,唯一的做法只有在整个网络域中泛洪组播数据帧.这样做就破坏了使用 IP组播带来的好处. 主机组成员的注册和离开是个动态的过程.当有一台主机加入一个组播组时,交换机就没有必要再向这个网段持续无目的地转发组播数据包了,组成员也就确定了下来.管理网络中组播主机位置的唯一方法就是让组播主机组成员自己向网络中通告加

《IP组播(第1卷)》一2.2 MAC地址映射

2.2 MAC地址映射 传统以太网交换机(二层设备)负责处理以太网数据帧,传统路由器(三层设备)负责查看数据包,来决定如何处理这个消息.如第1章中讨论的,当设备发送的是广播数据帧时,目的地址代表所有设备,而单播消息的目的地址代表一个目的MAC地址. 如果发送方发送的是组播消息会发生什么?为了优化网络资源,以太网交换机也需要能够处理组播.这也是关键的地方.发送方设备必须将目的IP组播地址按照以下方式,转换成具体的MAC地址. 最高的25比特是官方为组播预留的MAC地址范围:0100.5E00.00

《IP组播(第1卷)》一1.5 重要的组播组和组的考量

1.5 重要的组播组和组的考量 网络中有很多组播组,每个组播组都是从更大范围的组播组中细分出来的.每个组地址块范围都对应一个具体的应用或范围.每个地址块的范围可以小到一个网段,或者大到企业组播网络,甚至全球Internet.在设计组播网络时,一定要理解定义了组播组的RFC和标准.组播组地址在组播域的"范围划分"中扮演了重要的角色.第5章会更详细地介绍相关概念. 注释 IANA负责管理全球范围内的地址分配,以及应用的协议分配.如果不对这些地址进行统一管理的话,将很难把这些地址用在实现协议

《IP组播(第1卷)》一2.11 交换机中的数据包复制过程

2.11 交换机中的数据包复制过程 几乎所有设备上要求能够支持的组播转发都是开放标准的,由IETF之类的组织起草的标准.但网络设备中数据包的实际转发行为则没有对应的开放标准.对于单播数据包传输也是如此.每个厂商,或者有时是每条产品线,实施的转发机制是区分每个平台的标准. IP组播转发的核心内容是数据包复制过程.数据包复制指的是在物理上复制某个数据包,并把复制的数据包从转发路径上的目的接口发送出去. 在每个平台上,复制过程的区别在于网络设备是在哪里完成的复制.Cisco的每个网络平台在处理这个过程

《IP组播(第1卷)》一1.3 组播数据包

1.3 组播数据包 如前所述,组播这种通信方式可以只通过一条数据流,将消息送到多个接收方.在运行Internet协议(IP)的以太网环境中,构成网络基础设施的设备主要是路由器和交换机,它们负责将单个数据包复制为多个数据包或消息,并高效地将这些数据包分发给有意接收这些消息的设备. 现在我们需要简要回顾开放式系统互联(OSI)模型,并解释组播在不同层中的应用.表1-1中列出了OSI模型的组成部分. 组播应用通常使用IP上的用户数据报协议(UDP).因此需要使用传输层,使用了传输层就不能没有网络层运行