RFC2236:Internet Group Management Protocol, Version 2,November 1997
本备忘录的状态
本文档为 Internet 社区指定了 Internet 标准跟踪协议,并请求讨论和改进建议。本协议的标准化状态和现状请参考当前V的《互联网官方协议标准》(STD 1)。本备忘录的分发不受限制。
版权声明
版权所有 (C) 互联网协会 (1997)。版权所有。
梗概
本备忘录记录了 IGMPv2,IP 主机使用它向路由器报告其组播组成员身份。它更新了 STD 5/RFC 1112。
IGMPv2 允许将组成员身份终止快速报告给路由协议,这对于高带宽组播组和/或具有高度易变组成员身份的子网很重要。
本文档是 Internet 工程任务组内域间组播路由工作组的产品。征求意见并应发送至工作组的邮件列表 idmr@cs.ucl.ac.uk 和/或作者。
1、 定义
本文档中的关键词“必须”、“不得”、“需要”、“应该”、“不应”、“应该”、“不应该”、“推荐”、“可以”和“可选”是按照 RFC 2119 [RFC 2119] 中的描述进行解释。
2、 介绍
IP 主机使用互联网组管理协议 (Internet Group Management Protocol,IGMP) 将其组播组成员身份报告给任何紧邻的组播路由器。本备忘录仅描述在主机和路由器之间使用 IGMP 来确定组成员身份。作为组播组成员的路由器被期望作为主机和路由器,甚至可以响应它们自己的查询。IGMP 也可以在路由器之间使用,但这里没有指定这种使用。
与 ICMP 一样,IGMP 是 IP 的组成部分。所有希望接收 IP 多播的主机都需要实现它。IGMP 消息封装在 IP 数据报中,IP 协议编号为 2。本文档中描述的所有 IGMP 消息都使用 IP TTL 1 发送,并在其 IP 报头中包含 IP 路由器警报选项 [RFC 2113]。与主机相关的所有 IGMP 消息都具有以下格式:
2.1、 类型
主机-路由器交互涉及三种类型的 IGMP 消息:
0x11 = 成员查询
成员资格查询消息有两种子类型:
- 一般查询,用于了解哪些组在连接的网络上有成员。
- 组特定查询,用于了解特定组是否在连接的网络上有任何成员。
这两个消息由组地址区分,如第 1.4 节所述。成员查询消息简称为“查询”消息。
0x16 = V2 成员报告 0x17 = 离开组
为了与 IGMPv1 向后兼容,还有一种额外的消息类型:
0x12 = V1 成员报告
本文件将成员报告简称为“报告/Reports”。当未指定V时,该语句同样适用于两个版本。
应默默忽略无法识别的消息类型。新版本的 IGMP、多播路由协议或其他用途可能会使用新的消息类型。
2.2、 最大响应时间
Max Response Time字段仅在Membership Query消息中有意义,以1/10秒为单位指定发送响应报告前允许的最长时间。在所有其他消息中,它由发送者设置为零并被接收者忽略。
更改此设置允许 IGMPv2 路由器调整“离开延迟”(从最后一个主机离开组到通知路由协议没有更多成员之间的时间),如第 7.8 节所述。它还允许调整子网上 IGMP 流量的突发性,如第 7.3 节所述。
2.3、 校验和
校验和是整个 IGMP 消息(整个 IP 有效载荷)的补码和的 16 位补码。为了计算校验和,校验和字段设置为零。传输数据包时,必须计算校验和并将其插入该字段。接收数据包时,必须在处理数据包之前验证校验和。
2.4、 组地址
在Membership Query消息中,发送General Query时组地址字段设置为零,发送Group-Specific Query时设置为被查询的组地址。
在成员报告或离开组消息中,组地址字段保存正在报告或离开的组的 IP 多播组地址。
2.5、 其他字段
请注意,IGMP 消息可能长于 8 个八位字节,尤其是未来向后兼容的 IGMP V。只要类型是可识别的,IGMPv2 实现就必须在处理数据包时忽略前 8 个八位字节之后的任何内容。然而,IGMP 校验和总是在整个 IP 有效载荷上计算,而不仅仅是前 8 个八位字节。
3、 协议说明
请注意,计时器值的默认值将在本文档后面进行描述。计时器和计数器名称出现在方括号中。
本文档中有时使用术语“接口/interface”来表示“连接网络上的主要接口”;如果路由器在单个网络上有多个物理接口,则该协议只需在其中一个上运行。另一方面,主机需要在所有与它们关联的成员资格的接口上执行它们的操作。
组播路由器使用 IGMP 来了解哪些组在其连接的每个物理网络上都有成员。多播路由器为每个连接的网络保存一个多播组成员列表,并为每个成员保留一个计时器。“组播组成员资格”是指在给定的连接网络上至少存在组播组的一个成员,而不是所有成员的列表。对于它所连接的每个网络,组播路由器可以承担以下两种角色之一:查询者或非查询者。每个物理网络通常只有一个查询器。所有组播路由器都作为每个连接网络上的查询器启动。如果组播路由器从具有较低 IP 地址的路由器听到查询消息,则它必须成为该网络上的非查询器。如果路由器在 [Other Querier Present Interval] 内没有听到来自另一个路由器的 Query 消息,则它恢复查询者的角色。路由器周期性地[查询间隔]在每个连接的网络上发送一个通用查询,这个路由器是查询器,以征求成员信息。在启动时,路由器应该发送 [Startup Query Count] General Queries 紧密间隔在一起 [Startup Query Interval],以便快速可靠地确定成员信息。通用查询寻址到全系统组播组(224.0.0.1),组地址字段为0,最大响应时间为[查询响应间隔]。
当主机接收到通用查询时,它在接收查询的接口上为其所属的每个组(不包括所有系统组)设置延迟计时器。每个计时器设置为不同的随机值,使用主机上可用的最高时钟粒度,从范围 (0, Max Response Time] 中选择,其中 Max Response Time 如查询数据包中指定。当主机收到 Group-Specific Query,如果它是从其接收查询的接口上的成员,则它将延迟计时器设置为从上述范围(0,最大响应时间)中选择的随机值,用于被查询的组。如果该组的计时器已在运行,则仅当请求的最大响应时间小于正在运行的计时器的剩余值时,才将其重置为随机值。当组的计时器到期时,主机向该组多播V2成员身份报告,IP TTL 为 1。如果主机在计时器运行时收到另一台主机的报告(V1或V2),它会停止指定组的计时器并且不发送报告,以抑制重复报告。
当路由器收到报告时,它会将被报告的组添加到它收到报告的网络上的组播组成员列表,并将成员的计时器设置为 [组成员间隔]。重复报告刷新计时器。如果在此计时器到期之前没有收到特定组的报告,则路由器假定该组没有本地成员,并且不需要将该组的远程发起的组播转发到所连接的网络上。
当主机加入组播组时,它应立即为该组发送未经请求的V2成员资格报告,以防它是网络上该组的第一个成员。为了避免初始成员报告丢失或损坏的可能性,建议在短暂延迟后重复一次或两次[主动报告间隔]。(完成此操作的一种简单方法是发送初始V2 成员资格报告,然后就像收到该组的特定于组的查询一样,并适当设置计时器)。
当一个主机离开一个组播组时,如果它是最后一个回复带有该组成员报告的查询的主机,它应该向所有路由器组播组(224.0.0.2)发送一个离开组消息。如果它不是最后一个回复查询的主机,它可以不发送任何内容,因为子网上必须有另一个成员。这是减少流量的优化;一个没有足够存储空间来记住它是否是最后一个回复的主机可能总是在它离开一个组时发送一个离开组消息。路由器应该接受发往离开组的离开组消息,以适应本标准早期V的实现。Leave Group 消息发送到 all-routers 组,因为其他组成员无需知道主机已离开该组,但将消息发送到该组没有坏处。
当查询者在接收界面上收到一个有组成员的组的离开组消息时,它每隔[最后成员查询间隔]向离开的组发送[最后成员查询计数]组特定查询。这些特定于组的查询的最大响应时间设置为 [Last Member Query Interval]。如果在最后一次查询的响应时间到期后没有收到任何报告,则路由器假定该组没有本地成员,如上所述。在此期间,任何查询器到非查询器的转换都将被忽略;同一路由器不断发送特定于组的查询。
非查询者必须忽略离开组消息,查询者应该忽略接收接口上没有组成员的离开组消息。
当一个非查询者收到一个 Group-Specific Query 消息时,如果其现有的组成员计时器大于 [Last Member Query Count] 乘以消息中指定的最大响应时间,则将其组成员计时器设置为该值。
4、 与 IGMPv1 路由器的兼容性
IGMPv2 主机可能位于查询器路由器尚未升级到 IGMPv2 的子网上。以下要求适用:
IGMPv1 路由器将发送最大响应时间设置为 0 的一般查询。这必须被解释为 100(10 秒)的值。
IGMPv1 路由器期望V1 成员报告以响应其查询,而不会关注V2 成员报告。因此,必须为每个接口保留一个状态变量,描述该接口上的组播查询器是运行 IGMPv1 还是 IGMPv2。该变量必须基于在最后一个 [Version 1 Router Present Timeout] 秒内是否听到 IGMPv1 查询,并且不能基于最后听到的查询的类型。此状态变量必须用于决定为主动提供的成员报告以及响应查询的成员报告发送什么类型的成员报告。
IGMPv2 主机可以在查询器使用 IGMPv1 的网络上抑制离开组消息。
IGMPv2 路由器可以放置在子网上至少有一台路由器尚未升级到 IGMPv2 的子网上。以下要求适用:
如果存在任何 IGMPv1 路由器,则查询器必须使用 IGMPv1。IGMPv1 的使用必须以管理方式进行配置,因为没有可靠的方法来动态确定网络上是否存在 IGMPv1 路由器。实现可以为系统管理员提供一种在他们的路由器上启用 IGMPv1 的方法;在没有显式配置的情况下,配置必须默认为 IGMPv2。在 IGMPv1 模式下,路由器必须发送最大响应时间为 0 的周期性查询,并且必须忽略离开组消息。他们还应该警告收到 IGMPv2 查询,尽管这样的警告必须是速率限制的。
如果路由器没有明确配置为使用 IGMPv1 并且听到 IGMPv1 查询,它应该记录一个警告。这些警告必须是限速的。
5、 与 IGMPv1 主机的兼容性
IGMPv2 主机可能放置在有尚未升级到 IGMPv2 的主机的子网上。以下要求适用:
主机必须允许其成员报告被V1 成员报告或V2 成员报告抑制。
IGMPv2 路由器可以放置在有尚未升级到 IGMPv2 的主机的子网上。以下要求适用:
如果路由器收到V1成员报告,它必须设置一个计时器来注意存在V1主机,它们是它听到报告的组的成员。这个定时器应该和【组员间隔】一样。
如果某个特定组存在V1 主机,则路由器必须忽略它为该组接收的任何离开组消息。
6、 主机状态图
下面的状态转换图更正式地指定了主机行为。对于任何单个网络接口上的任何单个 IP 组播组,主机可能处于以下三种可能状态之一:
- “非成员/Non-Member”状态,当主机不属于接口上的组时。这是所有网络接口上所有成员的初始状态;它不需要主机中的存储。
- “延迟成员/Delaying Member”状态,当主机属于接口上的组并且为该成员运行报告延迟计时器时。
- “空闲成员/Idle Member”状态,当主机属于接口上的组并且没有为该成员资格运行的报告延迟计时器时。
有五个重要事件会导致 IGMP 状态转换:
- 当主机决定加入接口上的组时,会发生“加入组/join group”。它可能只发生在非成员状态。
- 当主机决定离开接口上的组时,会发生“离开组/leave group”。它可能只发生在延迟成员和空闲成员状态。
- 当主机接收到有效的一般成员资格查询消息或有效的组特定成员资格查询消息时,发生“收到查询/query received”。要有效,查询消息必须至少有 8 个八位字节长,并且具有正确的 IGMP 校验和。IGMP 报头中的组地址必须为零(通用查询)或有效的多播组地址(特定于组的查询)。通用查询适用于接收查询的接口上的所有成员资格。特定于组的查询适用于从其接收查询的接口上的单个组中的成员资格。对于处于非成员状态的成员,查询将被忽略。
- 当主机收到有效的 IGMP 成员报告消息(V1 或V2)时,会出现“收到报告/report received”。为有效,报告消息必须至少有 8 个八位字节长并且具有正确的 IGMP 校验和。成员报告仅适用于成员报告确定的组中的成员,在接收成员报告的界面上。对于处于非成员或空闲成员状态的成员,它会被忽略。
- 当接口上的组的报告延迟计时器到期时,发生“计时器超时/timer expired”。它可能只发生在延迟成员状态。
所有其他事件,例如接收无效的 IGMP 消息,或除查询或报告之外的 IGMP 消息,在所有状态下都将被忽略。
针对上述事件,可以采取七种可能的行动:
- 在界面上为组“发送报告/send report”。报告的类型由接口的状态决定。报告消息被发送到被报告的组。
- 在界面上为组“发送离开/send leave”。如果接口状态显示查询器正在运行 IGMPv1,则应跳过此操作。如果表明我们是最后报告的主机的标志被清除,则可以跳过此操作。离开消息被发送到 ALL-ROUTERS 组 (224.0.0.2)。
- “设置标志/set flag”,我们是最后一个为该组发送报告的主机。
- “清除标志/start timer”,因为我们不是最后一个为该组发送报告的主机。
- 接口组的“启动计时器/start timer”,使用从间隔(0,最大响应时间)中统一选择的延迟值,其中最大响应时间在查询中指定。如果这是一个主动提供的报告,则设置计时器到从间隔 (0, [Unsolicited Report Interval] ] 中统一选择的延迟值。
- 使用从间隔(0,最大响应时间)中统一选择的延迟值,将接口上的组的“重置计时器/reset timer”设置为新值,如“启动计时器”中所述。
- 接口上组的“停止计时器/stop timer”。
在以下所有状态图中,每个状态转换弧都标有导致转换的事件,并在括号中标记了在转换期间采取的任何操作。请注意,转换始终由事件触发;即使动作是有条件的,转换仍然发生。
all-system 组(地址 224.0.0.1)作为特殊情况处理。主机在每个接口上以该组的空闲成员状态开始,从不转换到另一个状态,也从不发送该组的报告。
此外,对于任何单个网络接口,主机可能处于两种可能状态之一:
- “No IGMPv1 Router Present”,当主机没有听到针对 [Version 1 Router Present Timeout] 的 IGMPv1 样式查询时。这是初始状态。
- “IGMPv1 路由器存在”,当主机在 [V1 路由器存在超时] 内听到 IGMPv1 样式查询时。
有两个事件可以导致状态转换:
- “IGMPv1 query received”,当主机收到最大响应时间字段设置为 0 的查询时。
- “计时器到期”,当设置为注意 IGMPv1 路由器存在的计时器到期时。
以及可以由事件触发的单个操作:
- “设置计时器”,将计时器设置为其最大值 [V1 路由器存在超时] 并(重新)启动它。
7、 路由器状态图
下面的状态转换图更正式地指定了路由器行为。
对于任何单个连接的网络,路由器可能处于两种可能状态之一:
- “查询器/Querier”,当该路由器被指定在该网络上传输 IGMP 成员资格查询时。
- “Non-Querier”,当有另一个路由器被指定在该网络上传输 IGMP 成员资格查询时。
以下三个事件可能导致路由器更改状态:
- 当为查询传输设置的计时器到期时,出现“查询计时器到期/query timer expired”。
- “从具有较低 IP 地址的路由器收到的查询”发生在从具有较低 IP 地址的同一网络上的路由器收到 IGMP 成员资格查询时。
- 当设置为注意网络上具有较低 IP 地址的另一个查询器的存在的计时器到期时,会发生“其他查询器存在计时器超时”。
针对上述事件,可以采取三种措施:
- 连接网络的“启动一般查询计时器”。
- 连接网络的“启动其他查询器存在计时器”[其他查询器存在间隔]。
- 在连接的网络上“发送一般查询”。通用查询发送到全系统组(224.0.0.1),最大响应时间为【查询响应间隔】。
路由器应在所有连接的网络上以初始状态启动,然后立即进入查询器状态。
此外,为了跟踪哪些组有成员,对于任何单个连接网络上的任何单个 IP 多播组,路由器可能处于四种可能状态之一:
- “无成员存在/ No Members Present”状态,当网络上没有主机为该组播组发送报告时。这是路由器上所有组的初始状态;它不需要在路由器中存储。
- “成员存在/Members Present”状态,当网络上有主机发送了该组播组的成员报告时。
- “V1 成员存在/ Version 1 Members Present”状态,当网络上有 IGMPv1 主机发送了该多播组的V1 成员报告时。
- “检查成员/Checking Membership”状态,当路由器收到离开组消息但还没有听到组播组的成员报告时。
有六种重要事件会导致路由器状态转换:
- 当路由器在接口上收到组的V2成员报告时,会出现“收到 v2 报告”。要有效,报告消息必须至少有 8 个八位字节长,并且必须具有正确的 IGMP 校验和。
- 当路由器在接口上收到组的V1成员报告时,会出现“收到 v1 报告”。适用相同的有效性要求。
- 当路由器在接口上接收到该组的 IGMP 组离开消息时,会发生“收到离开”。要有效,Leave 消息必须至少有 8 个八位字节长,并且必须具有正确的 IGMP 校验和。
- 当为组成员设置的计时器到期时,会出现“计时器到期”。
- 当设置为重传特定于组的成员资格查询的计时器到期时,会出现“重传计时器到期”。
- 当设置为记录V1 主机作为组成员的计时器到期时,会出现“v1 主机计时器到期”。
针对上述事件,可以采取六种可能的行动:
- 接口上组成员资格的“启动计时器” - 如果计时器当前正在运行,也会将计时器重置为其初始值 [组成员间隔]。
- 接口上组成员资格的“启动计时器*” - 此备用操作将计时器设置为 [Last Member Query Interval] * [Last Member Query Count](如果此路由器是查询器)或 [Max Response Time] 在packet * [Last Member Query Count] 如果此路由器是非查询器。
- 接口[Last Member Query Interval]上的组成员资格的“启动重传计时器”。
- “启动 v1 主机计时器”用于接口上的组成员资格,如果计时器当前正在运行,也会将计时器重置为其初始值 [组成员间隔]。
- 为附加网络上的组“发送特定于组的查询”。Group-Specific Query 发送给被查询的组,Max Response Time 为【Last Member Query Interval】。
- “通知路由+”通知路由协议在这个连接的网络上有这个组的成员。
- “通知路由-”通知路由协议在此连接的网络上不再有该组的任何成员。
处于 Querier 状态的路由器的状态图如下:
Non-Querier 状态下的路由器的状态图类似,但 non-Querier 不发送任何消息,仅由消息接收驱动。注意 non-Querier 不关心 Membership Report 消息是V1 还是V2。
8、 定时器列表和默认值
这些计时器中的大多数都是可配置的。如果使用非默认设置,它们必须在单个链路上的所有路由器之间保持一致。请注意,括号用于对表达式进行分组以使代数清晰。
8.1、 健壮性变量
健壮性变量允许调整子网上的预期数据包丢失。如果子网预计是有损的,健壮性变量可能会增加。IGMP 对(Robustness Variable-1)数据包丢失具有鲁棒性。健壮性变量不得为零,也不应为一。默认值:2
8.2、 查询间隔
查询间隔是查询器发送的一般查询之间的间隔。默认值:125 秒。
通过改变 [查询间隔],管理员可以调整子网上 IGMP 消息的数量;较大的值会导致 IGMP 查询的发送频率降低。
8.3、 查询响应间隔
插入到定期常规查询中的最大响应时间。默认值:100(10 秒)
通过改变 [Query Response Interval],管理员可以调整子网上 IGMP 消息的突发性;较大的值使流量的突发性较小,因为主机响应分布在较大的间隔内。【查询响应间隔】所代表的秒数必须小于【查询间隔】。
8.4、 组员间隔
组成员间隔是组播路由器决定网络上没有更多组成员之前必须经过的时间量。这个值必须是((健壮性变量)乘以(查询间隔))加上(一个查询响应间隔)。
8.5、 其他查询器呈现间隔
其他查询器存在间隔是多播路由器决定不再有另一个应该是查询器的多播路由器之前必须经过的时间长度。这个值必须是((健壮性变量)乘以(查询间隔))加上(一个查询响应间隔的二分之一)。
8.6、 启动查询间隔
启动查询间隔是查询器在启动时发送的一般查询之间的间隔。默认值:查询间隔的 1/4。
8.7、 启动查询计数
启动查询计数是启动时发出的查询数量,由启动查询间隔分隔。默认值:健壮性变量。
8.8、 最后成员查询间隔
Last Member Query Interval 是插入到响应 Leave Group 消息的 Group-Specific Queries 中的 Max Response Time,也是 Group-Specific Query 消息之间的时间量。默认值:10(1 秒)
可以调整该值以修改网络的“离开延迟”。减小的值会导致检测组中最后一个成员丢失的时间减少。
8.9、 最后成员查询计数
最后成员查询计数是路由器假定没有本地成员之前发送的特定于组的查询的数量。默认值:健壮性变量。
8.10、 主动报告间隔
主动提供的报告间隔是主机首次报告组成员身份的重复间隔时间。默认值:10 秒。
8.11、 V1 路由器存在超时
V1 路由器存在超时是主机在听到V1 查询后必须等待的时间,然后才能发送任何 IGMPv2 消息。值:400 秒。
9、 消息目的地
此信息在文档的其他地方提供,但为了方便起见,在此进行了总结。
注意:在 IGMPv2 的旧版本(即非标准且现已过时)中,主机向离开的组发送离开消息。为了与这些主机向后兼容,路由器应该接受发往留下的组的离开消息。然而,在所有情况下,主机必须发送到 ALL-ROUTERS 地址以符合本规范。
10、 安全考虑
我们考虑了每种类型的伪造消息的后果。
查询消息:
来自 IP 地址低于当前查询器的机器的伪造查询消息将导致查询器职责分配给伪造者。如果伪造者随后不再发送查询消息,则其他路由器的其他查询器存在计时器将超时,并恢复查询器的角色。在此期间,如果伪造者忽略留言,流量可能会流向没有成员的组,最长可达 [组成员间隔]。
发送到具有成员的组的伪造查询消息将导致作为该组成员的主机报告其成员身份。这会导致 LAN 上的少量额外流量,但不会导致协议问题。
报告消息:
伪造的报告消息可能会导致组播路由器认为子网上有组成员,而实际上没有。来自本地子网的伪造报告消息是没有意义的,因为加入主机上的组通常是一种无特权的操作,因此本地用户可以在不伪造任何消息的情况下轻松获得相同的结果。来自外部来源的伪造报告消息比较麻烦;针对外部伪造报告有两种防御措施:
- 如果您无法将数据包的源地址识别为属于分配给接收数据包的接口的子网,则忽略报告。此解决方案意味着将忽略本地子网上没有地址的移动主机发送的报告。
- 忽略没有路由器警报选项的报告消息 [RFC 2113],并要求路由器不转发报告消息。(该要求不是转发路径中通用过滤的要求,因为数据包中已经有路由器警报选项)。此解决方案破坏了与不需要路由器警报的本规范早期V的实现的向后兼容性。
伪造的V1 报告消息可能会将路由器置于特定组的“V1 成员存在”状态,这意味着路由器将忽略离开消息。这可能会导致流量流向没有成员的组,最长可达 [Group Membership Interval]。针对伪造的 v1 报告有两种防御措施:
- 为了防御外部来源的 v1 报告,如果您无法将数据包的源地址识别为属于分配给接收数据包的接口的子网,则忽略该报告。此解决方案意味着将忽略本地子网上没有地址的移动主机发送的 v1 报告。
- 为路由器提供配置开关以完全忽略V1 消息。这会破坏与V1 主机的自动兼容性,因此只应在“快速离开”至关重要的情况下使用。此解决方案还可以防止来自本地子网的伪造V1 报告。
离开消息:
伪造的离开消息将导致查询者为相关组发出特定于组的查询。这会导致对每个路由器和组的每个成员进行额外处理,但不会导致所需流量的丢失。针对外部伪造的 Leave 消息,有两种防御措施:
- 如果您无法将数据包的源地址识别为属于分配给接收数据包的接口的子网,则忽略离开消息。该解决方案意味着没有本地子网地址的移动主机发送的离开消息将被忽略。
- 忽略没有路由器警报选项的离开消息 [RFC 2113],并要求路由器不转发离开消息。(该要求不是转发路径中通用过滤的要求,因为数据包中已经有路由器警报选项)。此解决方案破坏了与不需要路由器警报的本规范早期V的实现的向后兼容性。
11、 致谢
IGMPv2 是由 Rosen Sharma 和 Steve Deering 设计的。
12、 参考文献
RFC 2119 Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. RFC 2113 Katz, D., "IP Router Alert Option," RFC 2113, February 1997. RFC 1112 Deering, S., "Host Extensions for IP Multicasting", STD 5, RFC 1112, August 1989.
13、 附录 I - IGMPv1 的变化
IGMPv1“版本/Version”和“类型/Type”字段合并为一个“类型/Type”字段。
新的 IGMP 类型被分配给V2 成员报告消息,因此路由器可以区分 IGMPv1 和 IGMPv2 主机报告之间的区别。
为 IGMPv2 Leave Group 消息创建了一个新的 IGMP 类型。
Membership Query 消息已更改,以便先前未使用的字段包含一个新值,即最大响应时间。
IGMPv2 规范现在指定了查询器选举机制。在IGMPv1中,查询器的选举由组播路由协议决定,不同的协议采用不同的机制。这可能导致每个网络有多个查询器,因此 IGMPv2 中的选举机制已标准化。但是,这意味着当 IGMPv2 路由器尝试与使用不同查询器选举机制的 IGMPv1 路由器共存时必须小心。特别是,这意味着 IGMPv2 路由器必须能够在特定网络上充当 IGMPv1 路由器(如果配置为这样做)。需要采取的行动包括:
- 在所有查询中将最大响应时间字段设置为 0。
- 忽略离开组消息。
IGMPv2 规范放宽了对成员查询和成员报告的有效性检查的要求。升级实现时,请确保删除任何不属于的检查。
IGMPv2 规范要求在本备忘录中描述的所有数据包中都存在 IP 路由器警报选项 [RFC 2113]。
14、 完整版权声明
版权所有 (C) 互联网协会 (1997)。版权所有。
本文件及其译文可能会被复制和提供给他人,并且可以全部或部分地准备、复制、出版和分发对其进行评论或以其他方式解释或协助其实施的衍生作品,不受任何限制,前提是上述版权声明和本段包含在所有此类副本和衍生作品中。但是,不得以任何方式修改本文档本身,例如通过删除版权声明或对 Internet 协会或其他 Internet 组织的引用,除非出于制定 Internet 标准的需要,在这种情况下,版权程序定义在必须遵循 Internet 标准流程,或按照要求将其翻译成英语以外的语言。
上述授予的有限权限是永久性的,不会被互联网协会或其继任者或受让人撤销。
本文档和其中包含的信息按“原样”提供,互联网协会和互联网工程工作队不提供所有明示或暗示的保证,包括但不限于任何保证,即使用此处的信息不会侵犯任何有关适销性或特定用途适用性的权利或任何默示保证。