NDIS学习笔记一
由于项目上遇到通信问题,为了排查问题,准备做个可以模拟丢包的工具,同时弥补下网络知识。刚开始的时候以为用SPI技术就可以解决,后来才知道丢包之类的一定要在协议层之下才可以完成,对于协议层之下,本来想完全做完之后再发篇完整的文章,结果发现难度有点超出预期。没办法底子太差了。
中间层驱动技术介绍
中间层驱动,英文为NDIS intermediate driver。
1)内核级网络驱动介绍
Microsoft
Windows NT支持三种基本的内核级网络驱动,这三层driver顺序从下到上依次为:
1.
Miniport NIC drivers:微端口网卡驱动,位于最底层,直接操纵网卡并且对高层驱动提供接口。
2.
Intermediate drivers:IMD中间层驱动,这就是今天的主角,位于1和3之间,具体的作用下面就会介绍。
3.
Protocol drivers:高层协议驱动,俗称为TDI(传输驱动程序接口),高于前面两层,直接面向用户级,为用户提供网络服务,也就是绝大多数程序所用到的网络接口。
2)IMD驱动
IMD中间层,它的实质很简单,最经典的描述莫过于下面的话:
An intermediate driver is
typically layered over one or more NDIS NIC drivers and under a transport
driver (possibly multilayered) that supports TDI at its upper edge.
An NDIS intermediate
driver exports MiniportXxx functions at its upper edge and ProtocolXxx
functions at its lower edge.(见DDK文档)
中间层插入网卡和协议层之间,对上面的协议层表现为一个虚拟的微端口网卡结构,而对下面的网卡则表现为一个协议层的结构。所以,无论是网卡接收并上传的数据报,还是上层要下送至网卡发送的数据报,无一例外地要经过中间层。
3)IMD包过滤技术
前面我们已经看到,所有的数据报都要经过中间层,所以,我们可以在中间层加入我们想要过滤的数据报的特征,实现基于中间层驱动的内核级包过滤。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述