数据包合并概述
某些 IP 版本 4 (IPv4) 和 IP 版本 6 (IPv6) 网络协议涉及将数据包传输到广播地址或多播地址。 这些数据包由 IPv4/IPv6 子网中的多个主机接收。 在大多数情况下,接收这些数据包的主机不会对这些数据包执行任何操作。 因此,接收这些不需要的多播或广播数据包会导致接收主机中发生不必要的处理和功耗。
例如,主机 A 在 IPv6 子网上发送多播链接本地多播名称解析 (LLMNR) 请求,以解析主机 B 的名称。 除主机 A 外,子网上的所有主机都接收此 LLMNR 请求。 除主机 B 外,在其他主机上运行的 TCP/IP 协议堆栈会检查数据包,并确定数据包不适合它。 因此,协议堆栈拒绝数据包并调用 NdisReturnNetBufferLists 将数据包返回到微型端口驱动程序。
从 NDIS 6.30 开始,网络适配器可以支持 NDIS 数据包合并。 通过合并随机广播或多播数据包来减少接收中断数,可以显著减少系统上的处理开销和功耗。
数据包合并涉及以下步骤:
过分的驱动程序(如 TCP/IP 协议堆栈)定义用于筛选广播和多播数据包的 NDIS 接收筛选器。 覆盖驱动程序将这些筛选器下载到支持数据包合并的基础微型端口驱动程序。 下载后,微型端口驱动程序使用数据包合并接收筛选器配置网络适配器。
有关这些筛选器的详细信息,请参阅 数据包合并接收筛选器。
与接收筛选器匹配的接收数据包在网络适配器上缓存或 合并。 适配器不会为合并的数据包生成接收中断。 相反,适配器会在发生另一个硬件事件时中断主机。
生成此中断时,适配器必须指示包含中断的接收事件。 这允许网络适配器处理网络适配器收到的合并数据包。
例如,当发生以下事件之一时,支持数据包合并的网络适配器可能会生成接收中断:
硬件计时器的过期时间设置为匹配接收筛选器的最大合并延迟值。
硬件合并缓冲区中的可用空间达到适配器指定的低水位线。
收到的数据包与合并筛选器不匹配。
发生了另一个中断事件,例如发送完成事件。
有关此过程的详细信息,请参阅 处理数据包合并接收筛选器。
以下几点适用于 NDIS 对数据包合并的支持:
对于分配给物理网络适配器的默认 NDIS 端口 (端口 0) 接收的数据包,NDIS 支持数据包合并。 NDIS 不支持在分配给虚拟网络适配器的 NDIS 端口上进行数据包合并。 有关详细信息,请参阅 NDIS 端口。
NDIS 支持对网络适配器的默认接收队列上收到的数据包进行数据包合并。 此接收队列的标识符为 NDIS_DEFAULT_RECEIVE_QUEUE_ID。