4.1. IP 模块接口的扩展
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() 系统调用的响应中提供数据包目的地址. 在具备这种能力之前, 应用可能被迫使用更高层机制来识别数据报被发送到的信道.