7.2 Extensions to the IP Module (IP 模块的扩展)
7.2. IP 模块的扩展
为支持组播 IP 数据报的接收, IP 模块必须扩展以维护与每个网络接口关联的主机组成员关系列表. 发往这些组之一的传入数据报的处理方式与发往主机单个地址之一的数据报完全相同.
发往主机不属于的组的传入数据报将被丢弃, 不生成任何错误报告或日志条目. 对于具有多个网络接口的主机, 如果数据报通过一个接口到达, 但目的组仅在不同接口上有成员, 则该数据报将被静默丢弃. (这些情况应仅因本地网络模块中组播地址过滤不足而发生.)
传入数据报不会因 IP 生存时间为 1 而被拒绝 (即生存时间不应在未被转发的到达数据报上自动递减). 源地址字段中包含 IP 主机组地址的传入数据报将被静默丢弃. ICMP 错误消息 (目的不可达、超时、参数问题、源抑制或重定向) 绝不会作为对发往 IP 主机组的数据报的响应而生成.
主机组成员关系列表根据来自上层协议的 JoinHostGroup 和 LeaveHostGroup 请求进行更新. 每个成员关系应有一个关联的引用计数或类似机制, 以处理对同一组的多次加入和离开请求. 在给定接口上首次请求加入和最后一次请求离开某个组时, 该接口的本地网络模块将收到通知, 以便它可以更新其组播接收过滤器 (参见第 7.3 节).
IP 模块还必须扩展以实现附录 I 中规定的 IGMP 协议. IGMP 用于使相邻的组播路由器了解特定本地网络上存在的主机组成员关系. 为支持 IGMP, 每台级别 2 主机必须在初始化时在每个网络接口上加入"all-hosts"组 (地址 224.0.0.1), 并在主机活跃期间保持成员关系.
(发往 all-hosts 组的数据报被组播路由器识别为特殊情况, 无论其生存时间如何, 都不会转发超出单个网络. 因此, all-hosts 地址不能用作互联网范围的广播地址. 就 IGMP 而言, 仅当主机至少属于一个其他组时, all-hosts 组的成员关系才真正必要. 但规定主机应始终保持 all-hosts 组的成员关系, 原因是: (1) 更简单, (2) 接收不必要的 IGMP 查询的频率应足够低, 开销可以忽略不计, (3) all-hosts 地址可能服务于其他面向路由的目的, 例如通告网关的存在或解析本地地址.)