使用 IPsec 卸载版本 2 接收网络数据

[IPsec 任务卸载功能已弃用,不应使用。]

NIC 执行 IPsec 卸载版本 2 (IPsecOV2) 处理从传输中卸载的安全关联 (SA) 中指定的接收数据包。

微型端口驱动程序设置 IPsecOV2 带外 (OOB) 信息,然后将接收的数据指示给过度的驱动程序。 有关访问 OOB 信息的详细信息,请参阅 在 IPsec 卸载版本 2 中访问NET_BUFFER_LIST信息

注意 即使处理 NIC 中的 IPsec 数据时发生错误,微型端口驱动程序也应将接收到的所有数据包指示给过度驱动程序。 驱动程序必须指示出现错误的数据包,以使驱动程序堆栈能够监视和排查网络流量问题。

在微型端口驱动程序指示驱动程序堆栈上收到的数据包之前,微型端口驱动程序:

  • 验证硬件是否已配置为处理 IPsec 卸载任务。 否则,微型端口驱动程序将执行接收指示,无需进行额外的 IPsec 卸载处理。

  • 查看 SPI) (安全参数索引,以确定是否存在匹配的卸载 SA。 微型端口驱动程序确认数据包上的目标地址与卸载 SA 中指定的地址相同。 如果没有匹配的 SA,则 NIC 指示接收的数据,而不设置 IPsecOV2 OOB 信息。

  • 验证它是否可以根据微型端口驱动程序向传输报告的功能处理数据包,或者它发出接收指示,而无需进一步的 IPsec 处理。 例如,数据包可能具有 IP 选项,其中 NIC 不支持此类数据包的 IPsec 卸载处理,微型端口驱动程序执行 IPsec 处理。

  • NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO 结构中设置 CryptoDone 标志,以指示 NIC 对接收的数据包中的至少一个 IPsec 有效负载执行 IPsec 检查。

  • 在 NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO 结构中设置 NextCryptoDone 标志,以指示 NIC 对接收数据包的隧道和传输部分执行 IPsec 检查。 仅当数据包同时具有隧道和传输有效负载时,微型端口驱动程序才会设置此标志;否则,此标志应为零。

  • 设置 NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO 结构的正确 CryptoStatus 值,以指示 IPsec 检查的结果。

如果 NIC 未对传入数据包执行卸载处理,微型端口驱动程序会清除 CryptoDoneNextCryptoDone 标志。 微型端口驱动程序会清除 NIC 不解密的所有接收数据包的这些标志,无论该数据包是 AH 保护还是 ESP 保护。

微型端口驱动程序可以在接收NET_BUFFER_LIST的NDIS_IPSEC_OFFLOAD_V2_NET_BUFFER_LIST_INFO结构中设置 SaDeleteReq。 TCP/IP 传输随后发出 OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA 一次,以删除数据包接收的入站 SA,并再次删除与已删除的入站 SA 对应的出站 SA。 有关添加和删除 SA 的详细信息,请参阅 在 IPsec 卸载版本 2 中管理安全关联

在微型端口驱动程序向 TCP/IP 传输指示NET_BUFFER_LIST结构后,TCP/IP 传输将检查 NIC 对数据包执行的 IPsec 检查结果,检查数据包的序列号,并确定对未通过校验和或排序测试的数据包执行的操作。