在接收路径中查找已封装数据包的传输标头

接收数据包时, 支持使用泛型路由封装 (NVGRE) 的网络虚拟化的 NIC 必须首先确定是否封装了数据包,如果是,则确定封装的类型。

注意 在发送路径中,如果 NDIS_TCP_SEND_OFFLOADS_SUPPLEMENTAL_NET_BUFFER_LIST_INFO,则会封装数据包。IsEncapsulatedPacketTRUE

在接收路径中,NIC 必须通过检查 IPv4 隧道的 “协议 ”字段中的协议号 (外部) 标头或 IPv6 隧道的 NextHeader 字段 (外部) 标头来确定是否封装数据包。 可在 中找到 https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml分配的协议编号列表。

将数据包确定为封装数据包后,NIC 必须通过分析封装数据包的协议来确定内部) IP 标头的传输 (偏移量。

对于 NDIS 6.30 (Windows Server 2012) 及更高版本,仅支持 GRE IP 封装。 因此,NIC 应该能够分析以下内容,具体取决于播发的功能:

如果 NIC 发现未知或不受支持的封装协议,则必须将未更改的数据包传递到主机堆栈。

因此,在接收路径上,微型端口必须分析内部) IP 标头 (传输,以确定 IP 版本以及访问 TCP 或 UDP 标头。 这是 NDIS 6.30 (Windows Server 2012) 及更高版本的新要求。