数据包合并概述

某些 IP 版本 4(IPv4)和 IP 版本 6(IPv6)网络协议涉及将数据包传输到广播或多播地址。 这些数据包由 IPv4/IPv6 子网中的多个主机接收。 在大多数情况下,接收这些数据包的主机不会对这些数据包执行任何操作。 因此,接收这些不需要的多播或广播数据包会导致接收主机内出现不必要的处理和电源消耗。

例如,主机 A 在 IPv6 子网上发送链接本地多播名称解析(LLMNR)请求,以解析主机 B 的名称。 除主机 A 外,子网上的所有主机都会收到此 LLMNR 请求。 除主机 B 之外,在其他主机上运行的 TCP/IP 协议堆栈会检查数据包并确定数据包不适合它。 因此,协议堆栈会拒绝数据包,并调用 NdisReturnNetBufferLists 将数据包返回到微型端口驱动程序。

从 NDIS 6.30 开始,网络适配器可以支持 NDIS 数据包合并。 通过合并随机广播或多播数据包来减少接收中断的数量,系统上的处理开销和能耗显著减少。

数据包合并涉及以下步骤:

  1. 上层驱动程序(如 TCP/IP 协议堆栈)定义用于筛选广播和多播数据包的 NDIS 接收筛选器。 上层驱动程序将这些筛选器加载到支持数据包合并的底层微型端口驱动程序。 下载后,微型端口驱动程序使用数据包合并接收筛选器配置网络适配器。

    有关这些筛选器的详细信息,请参阅数据包合并接收筛选器

  2. 与接收筛选器匹配的已接收数据包在网络适配器上被缓存或被合并。 适配器不会为合并数据包生成接收中断。 相反,适配器会在发生另一个硬件事件时中断主机。

    生成此中断时,适配器必须指示伴随中断的接收事件。 这样,网络适配器就可以处理网络适配器收到的合并数据包。

    例如,当发生以下事件之一时,支持数据包合并的网络适配器可能会生成接收中断:

    • 硬件计时器的到期时间被设置为与匹配接收筛选器的最大合并延迟值一致。

    • 硬件合并缓冲区中的可用空间达到适配器指定的低水印标记。

    • 收到与合并筛选器不匹配的数据包。

    • 发生了另一个中断事件,例如发送完成事件。

    有关此过程的详细信息,请参阅处理数据包合并接收筛选器

以下几点适用于 NDIS 对数据包合并的支持:

  • NDIS 支持对在分配给物理网络适配器的默认 NDIS 端口(端口 0)上接收到的数据包进行数据包合并。 NDIS 不支持分配给虚拟网络适配器的 NDIS 端口上的数据包合并。 有关详细信息,请参阅 NDIS 端口概述。

  • NDIS 支持对网络适配器的默认接收队列上收到的数据包进行数据包合并。 此接收队列的标识符为 NDIS_DEFAULT_RECEIVE_QUEUE_ID