NetAdapterCx 硬件卸载简介

为了提高性能,Windows TCP/IP 堆栈可以将某些任务卸载到具有相应任务卸载功能的网络接口卡 (NIC) 。

NetAdapterCx 侧重于简化卸载配置和管理卸载功能。 客户端驱动程序只需为其硬件卸载功能指定简单的配置,并注册回调以接收功能更改的通知。

本指南概述了 NetAdapterCx 中硬件卸载的关键概念。

  • 硬件卸载功能在初始化期间由网络适配器硬件播发,必须在调用 NetAdapterStart 之前播发。
  • 驱动程序不需要检查标准注册表关键字。 NetAdapterCx 检查注册表关键字,并在启用主动卸载功能时遵循它们。
  • 网络适配器 的活动 卸载功能是网络适配器当前编程为要执行的功能。 这些是客户端驱动程序先前播发的硬件功能的子集。
  • TCP/IP 堆栈或覆盖协议驱动程序可以请求更改网络适配器的活动功能。 客户端驱动程序向 NetAdapterCx 注册回调,以便收到活动卸载功能更改的通知。
  • 如果卸载需要数据包扩展,则当网络适配器播发对硬件卸载的支持时,会自动注册该扩展。

客户端驱动程序将其硬件可以卸载的网络数据包类型播发到 NetAdapterCx 的粒度功能集。 例如,这可以是是否支持 IPv4 选项、IPv6 扩展、TCP 选项或此类的任意组合,等等。某些硬件只有在数据包标头偏移已知的情况下才能执行卸载,并且此类硬件的客户端驱动程序还可以指定其数据包标头偏移量限制。 例如,如果硬件描述符只有 8 位来存储第 4 层标头偏移量,则客户端驱动程序会将 Layer4HeaderOffset 设置为 255。 客户端驱动程序功能未涵盖的任何数据包都将由 NetAdapterCx 卸载到软件中。

如果硬件无法处理特定组合,客户端驱动程序既不应声明对该功能的支持,也不应在遇到此类数据包时自行执行软件回退。 相反,它应允许 NetAdapterCx 自动执行任何必要的软件回退。

注意

如果希望 NetAdapterCx 对硬件不支持的卸载执行软件回退,则客户端驱动程序必须在 INF 文件中包含该卸载的标准化关键字。 例如,如果客户端驱动程序根本无法在硬件中执行 RSC 卸载,并且需要 NetAdapterCx 在软件中执行此卸载,则必须在 INF 中包含 *RscIpv4 和 *RscIpv6 关键字。

NetAdapterCx 和 Windows TCP/IP 堆栈支持以下卸载:

卸载名称 说明
校验和 将 IP 和 TCP 校验和的计算和验证卸载到 NIC。
通用发送卸载 (GSO) 卸载 IPv4 和 IPv6 的大型 TCP/UDP 数据包分段。
接受段合并 (RSC) 卸载 IPv4 和 IPv6 接收的 TCP 段序列的合并。

有关在 TCP/IP 堆栈或超载协议驱动程序请求更改网络适配器的活动功能时配置卸载和更新卸载的详细信息,请访问相应的卸载参考页。