📄 rfc2236.txt
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:周海燕(z_d_qx z_d_qx@263.net)
译文发布时间:2001-4-2
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保留本文档的翻译及版权信息。
网络工作组 W. Fenner
RFC: 2236 Xerox PARC
更新: 1112 November 1997
类别 : 标准调试
RFC 2236 Internet组管理协议,版本2
(RFC 2236 Internet Group Management Protocol, Version 2)
备忘录:
该文档为Internet团体定义了Internet标准检测协议,并要求对其进行讨论以求进一步的改进。该协议的标准及其请参考当前的“Internet 商业协议标准("Internet Official Protocol Standards" )(STD 1). 该备忘录可以任意发布。
版权声明
版权保留归Internet Society (1997)所有.
摘要:
该备忘文档IGMPv2,归IP 主机使用,并向路由器报告他们的组播成员关系。它对STD 5, RFC 1112进行了升级.
IGMPv2 允许组中成员的退出可以迅速报告给路由协议,这一点对于高带宽的组播组以及其子网中成员关系的动态调整尤为重要。
该文档是Internet工程技术组织一个域内组播的技术标准。如有任何注释应向idmr@cs.ucl.ac.uk邮件列表或其作者提出。
目录
1. 关键字定义 3
2. 介绍 3
2.1. 类型 3
2.2. 最大的响应时间 4
2.3. 校验字 4
2.4. 组地址 4
2.5. 其它域: 4
3. 协议描述 4
4. 与 IGMPv1 路由器的兼容 性 6
5. 和IGMPv1 主机的兼容性 6
6. 主机状态报文 6
7. 路由器状态报文 9
8. 定时器表和默认值 13
8.1. 健壮性变量 13
8.2. 查询周期 13
8.3. 查询响应周期 13
8.4. 组成员周期 13
8.5. 其它的查询存在周期 14
8.6. 初始查询周期 14
8.7. 初始查询周期 14
8.8. 最后的成员查询周期 14
8.9. 最后成员计数 14
8.10. 非请求报告周期 14
8.11. 版本1路由器存在超时 14
9. 消息目的地 15
11. 致谢 16
12. 参考 16
13. 附录 I - 基于IGMPv1的改变 16
14. 作者地址 17
15. 版权声明 17
1. 关键字定义
关键字"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" 均在RFC 2119 [RFC 2119]有详细说明。
2. 介绍
Internet组管理协议 (IGMP)在IP主机上应用,并向任一个邻近的路由器报告他们的组播成员关系。该备忘录仅描述了 IGMP 在主机和路由器之间如何确定 其组成员关系, 在此路由器和组播成员主机的行为相近。IGMP 也用于两个路由器之间,但不在此进行讨论。
和ICMP一样, IGMP 也是IP的一个组成部分。要求在所有想接收IP组播的主机都进行实现。IGMP消息封装在IP报文中,其IP的协议号为2。 所有在该文档中说明了的IGMP 消息均会用TTL为1进行传递 ,并在IP头中包括了IP 路由检测选项 [RFC 2113] 。
所有和主机相关 的IGMP 消息见下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Max Resp Time | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2.1. 类型
有3种 IGMP 消息和主机与路由器的交互有关:
0x11 = 成员关系查询
有两个成员关系查询的子类型:
- 一般查询,用于了解一个组中是否有成员在相邻的网络中。
- 特定组查询,用于了解在相邻的网络中特定的组是否有成员。
这两个消息由组地址进行区分,详见第 1。4章。成员查询消息则类似于"Query"。
0x16 = 版本 2 成员关系报告。
0x17 = 离开组
为了和IGMP v1兼容,还有另外的一个附加的消息类别:
0x12 = 版本 1 成员报告。
该文档中的成员关系报告实指“报告”。当没有定义版 本号时,则同时适用于两个版本。一个不能识别的消息类型应将其忽略。新的消息类型会用新版本的IGMP,组播路由协议或其它的用途来使用。
2.2. 最大的响应时间
最大的响 应时间域仅在成员关系查询中有效。规定了在发送一个回应报文时最大的允许时间,(其单位为1/10秒)。在所有其它的消息中,会由发 送者置为0,而接收者则忽略该域。
改变该设置可以允许IGMPv2 路由器调 整离开延时"leave latency" (最后一个成员离开组的时 刻和通知路由协议该处已不在存在成员时的这一段时间。),详见第7.8节。 也允许调整子网上的IGMP 的突发流量,详见第 7.3节。
2.3. 校验字
校验字是IGMP消息长度(IP包的整个有效负载)的16位检测。该域设为0,在计算校验字时将该域包在一起进行计算。当传送包的时候,必须计算该校验字并插入到该域中去。当接收包的时候,该校验字必须在处理该包之前进行检验。
2.4. 组地址
在成员查询消息中,发送一个通常的查询时组地址域应设为0,当发送一个特定组查询时,则应设置组的地址。 在成员报告或离开组的消息中,组的地址域保留了要报告或要离开的地址。
2.5. 其它域:
注意IGMP 消息可能会大于8个字节,尤其是将来向后兼容的IGMP版本。有 一点必须注意,一个IGMPv2 的实现在处理包的时候必须忽略第一个8位字节。但是,IGMP的校验总是在整个IP的有效负载上进行计算的,而不是正好在首先的8字节上。
3. 协议描述
注意:定时器的数值将在该文档的后面进行描述。定时器和计数器的名字都写在方括号中。术语"interface" 有时会用于该文档中,(如果一个路由器在一个网络上有多个物理接口.)意思是说"邻接网络的主接口". 主机, 另一方面来说,需要在所有的的成员加入的接口上来实他们的功能。 组播路由器使用IGMP 来了解在他们所有的邻接物理网络上哪个组拥有成员。 组播路由器保留有一个组播组成员的列表,和一个针对每个成员的定时器。 "Multicast group memberships" 指在一个指定的邻接网络上至少有一个成员存在的组播组,而不是所有成员的列表。 考虑到其所有的邻接网络,一个组应该是两个角色中的一个:查询者或非查询者。在每个物理网络上仅能有一个查询者。在每个邻接的网络上,开始时所有的路由器都做为一个查询者。如果一个组播路由器从一个拥有低IP地址的路由器听到了查询消息,则在该网络上它必须作为一个非查询者。如果一个路由器没有从其他的路由器那听到查询消息(在查询周期内),则会继续做为一个查询者。 该路由器作为一个查询者周其性的在每个邻接的(查询周期)网络上发出通常的查询消息,请求得到成员信息。在开始时,路由器应该发送 [初始查询计数] 间隔短的一般查询消息,从而可以快速的可靠的确定成员信息。一般查询的组地址为0,发给所有系统的组播组 (224.0.0.1),有最大的查询响应时间 [Query Response Interval]。
当一个主机接收到了普通的查询,它会给每个组(有查询请求到达并有成员存在的端口,包括所有系统平台的组)都设一个延时定时器,每一个定时器都设为一个不同的随机值,该值由主机上所能有的最高时钟频率产生,范围从0,到查询包中所定义的最大响应时间。当一个主机接收到了一个特定组的查询,则会将延时定时器设为从0到最大响应时间的一个随机值。如果定时器已经运行了,则如果所要求的最大响应时间小于当前运行的定时值所剩部份时,重置该定时器。当组的定时器到时后,主机组播一个版本2的成员报告到该组中,其IP 中 TTL的值为1。如主机接收到了另一个主机的报告(版本为1或2),而其本身的定时器还没有到时,则它会停止其特定组的定时器,且不发送报告,这样就减少了重复的报告。
当路由器接收到了报告,它就会把该组报告加入到一个组播组成员列表中,并且会为其成员关系设一个值为组成员生存周期的定时器 。重复的报告会导致该定时器的刷新。如果在定时器到时之前没有接收到一个特定组的报告,路由器则会假定没有本地的成员,它也不再需要在邻接的网络上为该组转发组播消息了。
当一个主机加入了一个组播组,则应该立即发送一个非请求的版本2的成员关系报告给组,以防它是网络上该组的第一个成员。初始的成员报告可能会丢失或会受到损害,为了防止此种情况,推荐在短的间隔时间内报告一次或两次(非请求报告间隔)。(一种简单的方法可以解决该问题。即通过发送版本号为2的初始成员报告,就好象是从一个组接收到了特定组查询的消息一样,并设置适当的定时器)。
当一主机离开一个组播组,如果它是最后一个主机,除它外没有其它的机器来报告成员关系了,则它应该发送一条离开组的消息 给所有路由器,地址为组播组(224.0.0.2),如它并不是最后一个回答查询的主机,它可以不发送消息,就好象另一个在子网中的成员一样。这样也可以减少了一些数据流量。一个没有足够存储器的主机不能记住是否它是最后一个主机,它离开一个组时,它总是会发送一条离开组的消息。为了和早期的版本标准的兼容,路由器应接收该条离开组的消息。离开组消息发布给所有的路由器组,因为其它的组成员不必知道一个主机是否离开了该组,但它不会破坏该离开组的消息。
当查询者在其接口上接收到了组成员离开组的消息之后,它发送 [最后成员查询计数 ] 特定组成员查询 消息[最后成员查询间隔] 给正离开的组。这些特定组查询有最大的响应时间(设为最后成员查询间隔)。如果在最后查询的响应时间之后,没有报告者接到消息,路由器则会假定该组没有本地的成员。在该时间内,任一个查询者到非查询者的传送都会忽略,一个路由器会继续发送特定组的查询。
对于接收端口上没有组成员时,非查询者必须忽略离开组的消息,而查询者则是应该忽略离开组的消息。当查询者接收发一个特定组查询消息,如果它的组成员定时器大于[最后成员查询计数] 消息中所定义的最大响应时间,它会将其组成员计数 为该值。
4. 与 IGMPv1 路由器的兼容 性
在一个路由器没有升级到IGMPv2的子网上,IGMPv2 主机可能会被取代。如下的请求为IGMPv1 路由器会发送正常的查询消息,其响应时间设为0。这必须理解为数值100(为10秒钟点)。
IGMPv1 路由器期望版本1 的成员报告对应于它的查询,而不会注意版本2的成员报告。因此,对于每个接口都必须保留一个状态变量,描述在接口中的组播查询者是运行的IGMPv1还是IGMPv2。 该变量必须由在最后几秒内是否听到IGMPv1 查询来决定。并必须用来决定用什么类型的成员报告来发送非请求的成员报 告以及对查询响应的成员报告。
一个IGMPv2 主机可以减少使用IGMPv1查询者所在网络上的离开组消息。一个 IGMPv2 路由器可被放置在至少有一个路由器没有被升级为IGMPv2的子网上。,有如下的要求:
如果存在任一个IGMPv1 路由器,查询者必须使用IGMPv1. IGMPv1 的使用必须有组织的配置,就好象没有可靠的方法来动态决定在网络上是否有IGMPv1路由器存在一样。其实现须提供给系统管理者一个方法来打开这些路由器上IGMPv1 的使用。其配置必须默认为IGMPv2 。在 IGMPv1 模式中, 路由器必须发送最大厦响应时间为0的周期性查询。 它们必须在接收到IGMPv2 查询时报警,尽管这些报警会受速率限制。
如果一个路由器没有显式地配置为使用IGMPv1 ,且收到了一个IGMPv1 查询,它应该在日志上写上一个警告。这些警告必须有速率限制。
5. 和IGMPv1 主机的兼容性
一个 IGMPv2 主机可以被放置 于有一些主机没有被升级为IGMPv2 的子网上。如下的必要条件为 :
主机必须允许它的成员报告可被其它的版本1或版本2的成员报告所压制。
一个 IGMPv2 主机可以被放置 于有一些主机没有被升级为IGMPv2 的子网上。如下的必要条件为 :
主机必须允许它的成员报告可被其它的版本1或版本2的成员报告所压制。
如果一个路由器收到了一个版本为1的成员报告,它必须设置一个定时器来注明存在一个版本1的主机, 该主机是它接收到报告的组中的成员。该计时器应和[组成员时间间隔。
如果版本1主机声明为一个特定的组,一个路由器必须忽略任一个它所接收到的离开该组的消息。
6. 主机状态报文
主机的行为正式上由如下的传送报文状态定义。考虑到任一个单个的IP组播组在任一个单一的网络接口上,主机可以为三个可能状态中的一个:
- "无成员" 状态, 当该主机不属于接口上的组时。这是一个对于所有的网络接口上的所有成员来说,是一个初始的状态,它不要求在主机上进行存储。
"滞留成员" 状态,当该主机属于在此接口上的该组时,且对于成员关系有一个报告延迟定时器。
- "空 闲成员" 状态, 当该主机属于该接口上的组时,且对于那个成员关系没有报告定时器正在运行。
有五个明显的事件,能引起IGMP 状态的改变:
- "加入组" 发生时间。当主机决定加入该接口上的一个组时,它会 发生。它仅发生在无成员状态时。
- "离开组" 发生时间。发生在主机决定离开此接口上的该组时,它仅发生在滞留成员以及 空闲 成员状态时。
"收到的查询" 发生时间。发生在主机接收到一个有效的一般组成员查询消息,或者一个有效的特定组成员查询消息。为了使其有效,查询消息必须至少为8个字节长,并且有正确的IGMP 校验字。在IGMP 头中的组地址必须是0(对于一般的查询)或者为一个有效 的组播地址(对于特定组的查询)。一个特定组的查询应用于接收到查询的接口上所有的成员关系。对于在非成员状态中的成员关系,查询会被忽略。
- "收到的报告" 发生时间。发生在主机接收到一个有效的IGMP 成员报告消息(版本1或版本2)。为了使其有效,此报告消息必须至少有8个字节长并且有正确的IGMP 校验字。 一个成员关系报告仅应用于成员关系报告所标识的组中的成员关系,位于接收到成员关系的接口上。对于在非成员或空闲成员状态中的成员关系,会被 忽略。
- "定时器超时" 发生时间。发生在为接口上组设定的报告延时定时器超时时。它仅会发 生在延进成员状态中。
所有其它的事件中,例如接收有效的IGMP 消息,或者IGMP 消息而不只是查询或者是报告,在所有的状态中都会被忽略。这儿有七个可能的反应,对于以上的事件的反应来说:
- "发送报告" 对于接口上的组。这类型的报告由接口的状态来决定。该报告消息被 发给正被报告的组。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -