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包过滤技术
    前面我们已经看到,所有的数据报都要经过中间层,所以,我们可以在中间层加入我们想要过滤的数据报的特征,实现基于中间层驱动的内核级包过滤。

你可能感兴趣的:(学习笔记)