Skip to main content

2. 请求 IP 组播接收的服务接口

2. 请求 IP 组播接收的服务接口

在 IP 系统内, 存在一个 (至少在概念上) 服务接口, 上层协议或应用程序使用该接口要求 IP 层启用和禁用接收发送到特定 IP 组播地址的数据包. 为了充分利用 IGMPv3 的功能, 系统的 IP 服务接口必须支持以下操作:

IPMulticastListen ( socket, interface, multicast-address,
filter-mode, source-list )

其中:

  • "socket" 是一个特定于实现的参数, 用于区分系统内不同的请求实体 (例如, 程序或进程); BSD Unix 系统调用的 socket 参数就是一个具体示例.

  • "interface" 是网络接口的本地标识符, 在该接口上要启用或禁用对指定组播地址的接收. 接口可以是物理的 (例如, 以太网接口) 或虚拟的 (例如, 帧中继虚拟电路的端点或 IP-in-IP "隧道" 的端点). 实现可以允许将特殊的 "未指定" 值作为接口参数传递, 在这种情况下, 请求将应用于系统的 "主" 或 "默认" 接口 (可能由系统配置建立). 如果希望在多个接口上接收相同的组播地址, 则需要为每个所需的接口分别调用 IPMulticastListen.

  • "multicast-address" 是请求所针对的 IP 组播地址或组. 如果希望在给定接口上接收多个组播地址, 则需要为每个所需的组播地址分别调用 IPMulticastListen.

  • "filter-mode" 可以是 INCLUDE 或 EXCLUDE. 在 INCLUDE 模式下, 只请求接收从 source-list 参数中列出的那些 IP 源地址发送到指定组播地址的数据包. 在 EXCLUDE 模式下, 请求接收从除 source-list 参数中列出的源地址之外的所有 IP 源地址发送到给定组播地址的数据包.

  • "source-list" 是一个无序列表, 包含零个或多个 IP 单播地址, 根据过滤模式的不同, 期望或不期望从这些地址接收组播. 实现可以对源列表的大小施加限制, 但该限制不得小于每个列表64个地址. 当操作导致超过源列表大小限制时, 服务接口必须返回错误.

对于给定的 socket、interface 和 multicast-address 组合, 在任何时候只能有一个过滤模式和源列表生效. 但是, 可以通过后续指定相同 socket、interface 和 multicast-address 的 IPMulticastListen 请求来更改过滤模式或源列表, 或两者都更改. 每个后续请求完全替换给定 socket、interface 和 multicast-address 的任何早期请求.

IGMP 的早期版本不支持源过滤器, 并且具有更简单的服务接口, 包括 Join 和 Leave 操作, 用于在给定接口上启用和禁用接收给定组播地址 (来自所有源) 的数据包. 新服务接口中的等效操作如下:

Join 操作等效于

IPMulticastListen ( socket, interface, multicast-address,
EXCLUDE, {} )

Leave 操作等效于:

IPMulticastListen ( socket, interface, multicast-address,
INCLUDE, {} )

其中 {} 是一个空源列表.

[FILTER-API] 中有一个提供本服务接口中概述功能的 API 示例.