跳到主要内容

2. Introduction (简介)

2. 简介 (Introduction)​

互联网组管理协议 (Internet Group Management Protocol, IGMP) 被 IP 主机用于向任何直接相邻的组播路由器报告其组播组成员资格. 本备忘录仅描述主机和路由器之间使用 IGMP 来确定组成员资格的情况. 作为组播组成员的路由器应该既作为主机又作为路由器运行, 甚至可以响应自己的查询. IGMP 也可以在路由器之间使用, 但此类用法未在此处规定.

与 ICMP 一样, IGMP 是 IP 的组成部分. 所有希望接收 IP 组播的主机都需要实现 IGMP. IGMP 消息封装在 IP 数据报中, IP 协议号为 2. 本文档中描述的所有 IGMP 消息都以 IP TTL 1 发送, 并在其 IP 头部中包含 IP Router Alert 选项 [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. Type​

与主机-路由器交互相关的 IGMP 消息有三种类型:

0x11 = 成员资格查询 (Membership Query)

成员资格查询消息有两种子类型:

  • 通用查询 (General Query), 用于了解连接网络上哪些组有成员.
  • 组特定查询 (Group-Specific Query), 用于了解连接网络上特定组是否有任何成员.

这两种消息通过 Group Address 区分, 如第 1.4 节所述. 成员资格查询消息简称为 "Query" 消息.

0x16 = 第 2 版成员资格报告 (Version 2 Membership Report)

0x17 = 离开组 (Leave Group)

还有一种额外的消息类型, 用于与 IGMPv1 向后兼容:

0x12 = 第 1 版成员资格报告 (Version 1 Membership Report)

本文档将成员资格报告简称为 "Report". 当未指定版本时, 陈述同样适用于两个版本.

无法识别的消息类型应被静默忽略. 新消息类型可能由较新版本的 IGMP, 组播路由协议或其他用途使用.

2.2. Max Response Time​

Max Response Time 字段仅在 Membership Query 消息中有意义, 它以 1/10 秒为单位指定发送响应 Report 前允许的最大时间. 在所有其他消息中, 发送方将其设置为零, 接收方忽略它.

改变此设置可让 IGMPv2 路由器调节 "leave latency" (最后一个主机离开某个组到路由协议获知不再有成员之间的时间), 如第 7.8 节所述. 它还可用于调节子网上 IGMP 流量的突发性, 如第 7.3 节所述.

2.3. 校验和 (Checksum)​

校验和是整个 IGMP 消息 (整个 IP 载荷) 的反码和的 16 位反码. 计算校验和时, 校验和字段设置为零. 发送数据包时, MUST 计算校验和并将其插入此字段. 接收数据包时, 在处理数据包之前 MUST 验证校验和.

2.4. Group Address​

在 Membership Query 消息中, 发送 General Query 时 Group Address 字段设置为零, 发送 Group-Specific Query 时设置为被查询的组地址.

在 Membership Report 或 Leave Group 消息中, Group Address 字段保存正在报告或离开的组的 IP 组播组地址.

2.5. 其他字段 (Other fields)​

注意, IGMP 消息可能长于 8 个八位字节, 特别是未来向后兼容的 IGMP 版本. 只要 Type 是可识别的, IGMPv2 实现在处理数据包时 MUST 忽略前 8 个八位字节之后的任何内容. 但是, IGMP 校验和始终在整个 IP 载荷上计算, 而不仅仅是前 8 个八位字节.