跳到主要内容

4. 主机要求

本节描述支持源特定组播的主机要求, 包括:

  • IP 模块接口的扩展

  • IP 模块的扩展

  • SSM 地址分配

4.1. IP 模块接口的扩展

面向上层协议的 IP 模块接口被扩展, 以允许协议请求接收发送到特定信道的所有数据报.

Subscribe ( socket, source-address, group-address, interface )

Unsubscribe ( socket, source-address, group-address, interface )

其中:

"socket" 如第 2 节所定义,

并且, 按照 [IGMPv3] 的表述:

"interface" 是网络接口的本地标识符, 用于指明要在哪个网络接口上启用或禁用对由 (source-address,group-address) 对标识的信道的接收. 可以使用特殊值表示 "默认" 接口. 如果希望在多个接口上接收同一信道, 则需要为每个接口分别调用一次 Subscribe.

上述接口是严格意义上的抽象功能接口, 其功能可以通过实现特定方式提供. 例如, 在支持 [MSFAPI] 的组播源过滤应用程序编程接口的主机上, Subscribe 和 Unsubscribe 接口可以通过该 API 支持. 当主机已配置为知道 SSM 地址范围时, 无论配置机制是手动方式还是通过协议完成, 如果应用发起非源特定请求以接收发送到 SSM 目的地址的组播, 主机操作系统应该向该应用返回错误.

不支持这些 IP 模块接口及其底层协议的主机, 例如仅支持 ASM 的主机, 不能期望可靠接收在 SSM 信道上发送的流量. 如下文第 5.2 节所规定, 路由器不会响应 ASM 加入请求而设置 SSM 转发状态或转发数据报.

IP 数据包接收接口的广泛实现, 例如 BSD Unix 中的 recvfrom() 系统调用, 不允许接收者确定数据报被发送到的目的地址. 在具有这类实现的主机上, 如果接收数据报的套接字订阅了多个信道, 就无法推断该数据报的目的地址. 主机操作系统应该提供一种方法, 让主机能够确定数据报发送时使用的源地址和目的地址. 例如, Linux 操作系统在 recvmsg() 系统调用的响应中提供数据包目的地址. 在具备这种能力之前, 应用可能被迫使用更高层机制来识别数据报被发送到的信道.

4.2. 主机 IP 模块要求

目的地址为 SSM 地址的传入数据报必须由 IP 模块递送给所有已通过 Subscribe 表明希望接收与该数据报源地址, 目的地址和到达接口匹配的数据的套接字. 它不得被递送给其他套接字.

当主机 H 上的第一个套接字在接口 I 上订阅信道 (S,G) 时, H 上的主机 IP 模块会在接口 I 上发送请求, 向相邻路由器表明该主机希望接收源 S 发送到源特定组播目的地址 G 的流量. 类似地, 当主机上的最后一个套接字在接口 I 上取消订阅某个信道时, 主机 IP 模块会向接口 I 发送该信道的取消订阅请求.

这些请求通常是 IPv4 的 Internet Group Management Protocol version 3 (IGMPv3) 消息, 或 IPv6 的 Multicast Listener Discovery Version 2 (MLDv2) 消息 [IGMPv3,MLDv2]. 支持 SSM 服务模型的主机必须为 IPv4 实现 [IGMPv3] 的主机部分, 并为 IPv6 实现 [MLDv2]. 它还必须符合 [GMP-SSM] 中描述的 IGMPv3/MLDv2 行为.

4.3. 源特定组播地址分配

SSM 目的地址 232.0.0.0 是保留地址, 不得用作目的地址. 类似地, FF3x::4000:0000 也是保留地址. 保留这两个地址的目标是分别为 IPv4 和 IPv6 保留一个无效 SSM 目的地址, 这在实现中可用作空值. 地址范围 232.0.0.1 - 232.0.0.255 目前保留给 IANA 分配. FF3x::4000:0001 到 FF3x::7FFF:FFFF 范围内的 SSM 目的地址同样保留给 IANA 分配 [IPv6-MALLOC]. 保留这些地址的动机在下文第 9 节 "IANA 考虑" 中说明.

将其余 SSM 地址分配给发送应用的策略完全由发送主机本地决定.

动态分配 SSM 地址时, 主机或主机操作系统不得从第一个允许的地址开始顺序分配.推荐随机地将 SSM 地址分配给应用, 同时确保已分配地址不会同时提供给多个应用, 并避免使用保留地址. 对于 IPv6, 随机化应应用于地址的最低 31 位.

如第 6 节所述, 将带有 SSM 目的地址的 IP 数据包映射到链路层组播地址时, 不会考虑数据报的源 IP 地址, 这适用于以太网等常用链路层. 如果所有主机都从第一个允许的地址开始分配, 则共享介质 LAN 上的许多源特定信道很可能会使用相同的链路层组播地址. 结果, 发往某个信道订阅者的流量会被递送到另一个订阅者的 IP 模块, 后者随后不得不丢弃该数据报.

主机操作系统应该提供一个接口, 允许应用在会话开始前请求唯一分配某个信道目的地址, 并且该分配数据库应该在主机重启后保持持久. 通过提供持久分配, 主机应用可以在会话开始时间之前, 在网页或其他目录中公告该会话. 需要注意, 这个问题并非 SSM 应用所特有, ASM 也存在相同问题.

本文档既不定义请求或归还地址的接口, 也不规定主机用于存储这些分配的算法. RFC 2771 [RFC2771] 定义了一个可行的抽象 API. 注意, RFC 2771 允许应用在特定地址范围内请求地址. 如果使用该接口, 范围的起始地址应该由应用随机选择.

对于 IPv6, 可通过为 SSM 目的地址选择适当的作用域标识符来创建管理范围内的 SSM 信道地址. 常规 IPv6 组播作用域边界 [SCOPINGv6] 会应用于发送到 SSM 目的地址的流量, 包括同时应用于源地址和目的地址的任何相关边界.

目前尚未为 IPv4 源特定组播定义全球一致认可的管理范围地址范围 [ADMIN-SCOPE]. 对于 IPv4, 可以在管理域的边界路由器处过滤发往范围地址的出站 SSM 流量, 从而在该管理域内实现 SSM 地址的管理范围.