NET_BUFFER 数据打包

NDIS 6.0 中重新设计了数据打包。 基于 NDIS_PACKET 结构的发送和接收体系结构已替换为基于 NET_BUFFERNET_BUFFER_LIST 结构的体系结构。 NET_BUFFER结构是NDIS_PACKET结构的功能等效项。 NET_BUFFER结构指定用于网络数据的 MDL 链 (缓冲区) ,以及 NDIS、协议驱动程序和微型端口驱动程序的预留空间。 NET_BUFFER结构可以在由NET_BUFFER_LIST结构描述的列表中链接在一起。 NET_BUFFER_LIST结构还为适用于列表中所有NET_BUFFER结构的带外 (OOB) 数据提供存储。

Microsoft 下一代网络驱动程序堆栈中的所有组件(包括 TCP/IP 传输和 Winsock)都使用NET_BUFFER打包。 整个驱动程序堆栈的统一数据打包无需重新打包数据,简化了数据处理,减少了函数调用的数量。

为了适应使用NDIS_PACKET结构的旧驱动程序,NDIS 6.0 将NDIS_PACKET结构转换为NET_BUFFER结构,反之亦然。 此转换对 NDIS 驱动程序是透明的。

NDIS 将驱动程序的数据回填要求传播到更高级别的驱动程序。 为发送数据分配NET_BUFFER和NET_BUFFER_LIST结构时,较高级别的驱动程序会分配足够的数据空间来容纳堆栈中的所有较低级别的驱动程序。 因此,较低级别的驱动程序不必分配额外的缓冲区空间来容纳特定于层的标头。 相反,他们可以使用预先分配的回填空间来执行此操作。

有关NET_BUFFER体系结构的详细信息,请参阅 NET_BUFFER 体系结构