windows网络适配器驱动开发-泛型分段卸载(上) 泛型分段卸载GSO共同表示大型发送卸载LSO和 UDP 发送卸载USO。客户端驱动程序可以卸载大于网络介质最大传输单元MTU的 TCP/UDP 数据包分段。 驱动程序必须使用 GSO API 向 NetAdapterCx 指示此功能。卸载大型 TCP 数据包的段网络驱动程序接口规格 (NDIS) 微型端口驱动程序可以卸载大于网络介质最大传输单元 (MTU) 的大型 TCP 数据包的分段。 支持对大型 TCP 数据包进行分段的 NIC 还必须能够为包含 IP 选项的发送数据包计算 IP 校验和。为包含 TCP 选项的发送数据包计算 TCP 校验和。NDIS 版本 6.0 及更高版本支持大型发送卸载版本 1 (LSOv1)它与 NDIS 5.x 中的大型发送卸载 (LSO) 类似。 NDIS 版本 6.0 及更高版本还支持大型发送卸载版本 2 (LSOv2)该版本提供增强的大型数据包分段服务包括支持 IPv6。支持 LSOv2 和 LSOv1 的微型端口驱动程序必须从 NET_BUFFER_LIST 结构带外 (OOB) 信息中确定卸载类型。 驱动程序可以使用 NDIS_TCP_LARGE_SEND_OFFLOAD_NET_BUFFER_LIST_INFO 结构中的 Type 成员来确定驱动程序栈使用的是 LSOv2 还是 LSOv1并执行相应的卸载服务。 任何包含 LSOv1 或 LSOv2 OOB 数据的 NET_BUFFER_LIST 结构也包含一个 NET_BUFFER 结构。USO 的要求NDIS 轻型筛选器驱动程序LWFs在修改或发送数据包时必须遵循协议驱动程序的要求并且可以假设提供给其 FilterSendNetBufferLists 处理程序的任何数据包都满足协议驱动程序的要求。NetAdapterCx在这里也是一样的。NetAdapterCx和之前的微型端口驱动程序可以卸载大于网络介质 MTU 的大型 UDP 数据包的分段。 支持大型 UDP 数据包分段的 NIC 还必须能够执行以下操作为包含 IPv4 选项的发送数据包计算 IP 校验和计算已发送数据包的 UDP 校验和支持 USO 的微型端口驱动程序必须根据 NET_BUFFER_LIST 结构的带外 (OOB) 信息确定卸载类型。 如果 NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO 结构的值非零则微型端口驱动程序必须执行 USO。 任何包含 USO OOB 数据的 NET_BUFFER_LIST 也包含一个 NET_BUFFER 结构。 但是如果微型端口驱动程序收到了关闭 USO 的 OID_TCP_OFFLOAD_PARAMETERS 文件微型端口驱动程序在成功完成 OID 后应拒绝并返回任何设置了 USO OOB 字段的 NET_BUFFER_LIST。TCP/IP 传输卸载的限制TCP/IP 传输仅卸载满足以下条件的 UDP 数据包数据包是 UDP 数据包。数据包长度必须大于最大段大小 (MSS) * (MinSegmentCount - 1)。如果微型端口驱动程序未设置 SubMssFinalSegmentSupported 功能则传输层卸载的每个大型 UDP 数据包必须具有 Length % MSS 0。 也就是说大型数据包可以分成 N 个数据包每个数据包段完全包含 MSS 用户字节。 如果微型端口驱动程序设置 SubMssFinalSegmentSupported 功能则传输上的此数据包长度可除性条件不适用。 换句话说最终段可以小于 MSS。数据包不是环回数据包。UDP/IP 传输卸载的大型 TCP 数据包的 IP 标头中的 MF 位将不会被设置IP 标头中的碎片偏移将为零。应用程序已指定 UDP_SEND_MSG_SIZE/WSASetUdpSendMessageSize。在卸载大型 UDP 数据包进行分段之前TCP/IP 传输执行以下操作更新与 NET_BUFFER_LIST 结构关联的大型数据包分段信息。 此信息是一种 NDIS_UDP_SEGMENTATION_OFFLOAD_NET_BUFFER_LIST_INFO 结构而该结构是 NET_BUFFER_LIST 结构的 OOB 信息的一部分。 TCP/IP 传输将 MSS 值设置为所需的 MSS。计算 UDP 伪标头的补数和并将此和写入 UDP 标头的 Checksum 字段。 TCP/IP 传输会计算伪首部中以下字段的补数和源 IP 地址、目标 IP 地址和协议。TCP/IP 传输所提供的伪首部的补数和使 NIC 可以提前开始计算每个数据包的真正 UDP 校验和NIC 可以从大型 UDP 数据包中推导出这些数据包而无需检查 IP 标头。请注意RFC 768 和 RFC 2460 规定伪头是通过源 IP 地址、目标 IP 地址、协议和 UDP 长度UDP 标头的长度加上 UDP 有效负载的长度不包括伪头的长度计算的。 但是由于基础微型端口驱动程序和 NIC 从 TCP/IP 传输所传递的大数据包中生成 UDP 数据报传输不知道每个 UDP 数据报的 UDP 有效负载的大小因此无法在伪标头文件计算中包含 UDP 长度。 相反如下部分所述NIC 会扩展 TCP/IP 传输提供的伪标头文件校验和以覆盖每个生成的 UDP 数据报的 UDP 长度。

相关新闻

最新新闻

若依框架定时任务安全风险深度剖析与加固实战指南

若依框架定时任务安全风险深度剖析与加固实战指南

1. 项目概述:为什么若依的定时任务会成为安全重灾区?最近在内部安全巡检和几个社区项目里,又双叒叕看到了若依(RuoYi)框架定时任务模块引发的安全问题。这几乎成了一个“月经贴”,每隔一段时间就能在漏洞平…

2026/7/4 22:31:59
Python测试开发实战:从黑盒到白盒的5大核心测试方法详解

Python测试开发实战:从黑盒到白盒的5大核心测试方法详解

1. 项目概述最近和几个刚转行做测试开发的朋友聊天,发现一个挺普遍的现象:很多人对“测试”的理解还停留在“点点点”的黑盒阶段,觉得写测试就是调用一下接口,看看返回对不对。一旦遇到复杂逻辑或者需要深入代码内部验证的场景&am…

2026/7/4 22:31:59
D3keyHelper:暗黑破坏神3鼠标宏工具终极配置指南

D3keyHelper:暗黑破坏神3鼠标宏工具终极配置指南

D3keyHelper:暗黑破坏神3鼠标宏工具终极配置指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 你是否厌倦了在暗黑破坏神3的高强度战斗…

2026/7/4 22:31:59
生产环境机器学习模型监控实战:7个关键探针与MLOps落地

生产环境机器学习模型监控实战:7个关键探针与MLOps落地

1. 项目概述:当模型走出Jupyter,真正开始呼吸真实世界空气“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句暗号,懂的人一眼就明白:这不是又一篇讲如何用sklearn.fit()跑通鸢尾花…

2026/7/4 22:31:59
Wireshark实战:从抓包到网络侦察的核心技能与高级分析

Wireshark实战:从抓包到网络侦察的核心技能与高级分析

1. 项目概述:从“抓包”到“侦察”的思维跃迁 如果你在搜索引擎里敲下“Wireshark抓包”,大概率会得到一堆教你如何安装、点哪个按钮开始捕获的教程。这没错,这是第一步。但《Wireshark数据包分析实战》这本书,尤其是其配套的实战…

2026/7/4 22:31:59
YOLOv8即插即用模块优化实战与性能提升

YOLOv8即插即用模块优化实战与性能提升

1. YOLOv8与即插即用模块概述YOLOv8作为当前最先进的实时目标检测算法之一,其模块化设计为性能提升提供了广阔空间。即插即用(Plug-and-Play)模块是指那些无需修改网络主干结构,只需简单插入就能提升模型性能的轻量级组件。这类模…

2026/7/4 22:26:59

周新闻

月新闻