内核模式驱动程序的网络结构

2023-11-05

转载请标明是引用于 http://blog.csdn.net/chenyujing1234 

欢迎大家拍砖!

 

1、Windows 2000 网络结构和OSI模型

 

Windows 2000网络结构是以国际标准化组织(ISO)制定的七层网络模型为基础的,1978年,ISO制定的开放式系统(OSI)参考模型,将网络描述为一系列的协议层,在每个协议层中完成一系列的特定功能。每一层都向上一层提供明确的服务,同时将本层服务的实现封装起来.一个在相邻层之间完善的接口定义了下层对上层所提供的服务以及如何访问这些服务。

(应用层,表示层,会话层,传输层,网络层,链路层,物理层,物理介质    2.1 OSI参考模型)

Windows 2000网络驱动程序实现了这个网络结构的下面四层:

 

物理层

这是OSI模型中的最底层这一层用来通过物理介质接收和发送的原始的没有结构的二进制数据流,它描述了对于物理介质的电/光,机械和功能的的接口,物理层为所有的上层传送信号,在Windows 2000中,物理层通过网络接口卡(NIC)来实现,物理层的收发是依缚于NIC介质的。使用串行端口的网络组件,物理层也同样包含了底层的网络软件,它定义了串行位流是如何分成数据包的。

数据链路层

    电气电子工程师协会(IEEE)将该层进一步分成了两个子层,LLCMAC

LLC子层用于将数据帧从一个结点无错的传输到另一个结点LLC子层用来建立和终止逻辑链接,控制帧流,对帧排序,接收帧,并且对没有被接收的帧进行重发。LLC子层使用帧应答和帧的重发为经过链路层的上层提供了真正的无错发送。

MAC子层控制物理介质的访问,检查帧的错误,并且管理接收帧的地址认证。在Windows 2000网络结构中,逻辑链路控制子层在传输驱动程序中实现,而介质访问控制子层则在网络接口卡(NIC)中实现,NIC由一个名为NIC驱动程序的设备驱动程序软件控制Windows 2000的附带了许多常用的NIC的驱动程序。

网络层

这一层控制着子网的运作,它基于以下因素决定数据的物理路径:

·网络状况

·服务优先权

·其他因素,包括路由、流量控制、帧的分解和重组、逻辑到物理地址的映射、用户帐号

传输层

这一层确保信息传送的无错传输,连续传输和不丢失或不重复。它使得上层协议与上层协议之间或与它同层的协议之间通讯不必关心数据的传输。传输层所在的协议栈至少应包括一个可靠的网络层,或在逻辑链路控制子层中提供一个虚电路。例如,因为Windows 2000 NetBEUI传输驱动程序包括一个与OSI兼容的LLC子层,它的传输层的功能就很小。如果协议栈不包括LLC子层,并且网络层不可靠,并且/或者支持自带地址信息(例如TCP/IPIP层或NWLINKIPX),那么传输层应能进行帧的顺序控制和帧的响应,同时要对未响应帧进行重发。

Windows 2000网络结构中,逻辑链路层,物理层和传输层都是通过名为传输驱动程序的软件实现的,它有时也称作协议,协议驱动程序或协议模块Windows 2000附带了TCP/IPIPX/SPXNetBEUIAppleTalk传输驱动程序。

2、 NDIS驱动程序

网络驱动程序接口说明(NDIS)将网络硬件抽象为网络驱动程序NDIS也说明了网络驱动程序间的标准接口,因此它将用来管理硬件的底层驱动程序抽象为上层驱动程序,例如网络传输层NDIS也维护着状态信息和网络驱动程序的参数,包括指向函数的指针,句柄和链接时参数块的指针,以及其他系统参数。

NDIS支持以下几种类型的网络驱动程序:

·微端口驱动程序

·中间层驱动程序

·协议驱动程序

 2、1  NDIS微端口驱动程序

 一个NDIS微端口驱动程序(也叫微端口NIC驱动程序)有两个基本功能

(1)管理一个网络接口卡(NIC),包括通过NIC发送和接收数据。

(2)与高层驱动程序相接,例如中间层驱动程序和传输协议驱动程序。

 一个微端口驱动程序与它的NIC通信,并且通过NDIS库与高层驱动程序通信

NDIS库对外提供了一整套的函数(NdisXXX函数),这些函数封装了微端口需要调用的所有操作系统函数;

同时,微端口必须向外提供一组入口(MiniportXxx函数),使NDIS可以为了完成自己或高层驱动程序的任务而访问微端口

 发送和接收操作表明了NDIS与高层驱动程序和微端口NIC的相互作用:

(1)当一个传输驱动程序发送一个包时,它调用一个NDIS库所提供的NdisXxx函数,NDIS于是通过调用由微端口提供的合适的MiniportXxx函数将包传递给微端口,然后微端口驱动程序通过调用恰当的NdisXxx函数将包传递给NIC来发送包

(2)当一个NIC接收到由NIC发给它的包时,它将产生一个由NDIS或NIC的微端口处理的中断。NDIS通过调用恰当的MiniportXxx函数指示NIC的微端口。微端口通过调用恰当的NdisXxx函数把数据从NIC传送到上层驱动程序,并且同时指示上层驱动程序接收包。

NDIS既支持无连接环境下的微端口驱动程序,也支持面向连接的微端口驱动程序:

(1)无连接的微端口为无连接网络介质,例如Ethernt,FDDI和Token Ring,控制NIC。可将无连接微端口进一步分为以下几种子类型:

(1、1)串行化的驱动程序,它依靠NDIS对MiniportXxx函数调用进行串行化,并管理它们的发送队列;

(1、2)非串行化驱动程序,它自己对MiniportXxx函数操作进行串行化,并且在内部对进入的发送包进行排队。它的意义在于有很高的效率,例如驱动程序的临界区(在一个时间段内只有一个线程可访问的代码区)。

(2)面向连接的微端口为面向连接的网络介质,例如ATM和ISDN,控制NIC。面向连接的微端口经常非串行化的——它自己对MiniportXxx函数操作进行串行化,并且在内部对进入的发送抱进行排队。

一个NDIS微端口驱动程序可以有一个非NDIS的底层:

通过它的非NDIS底层,微端口使用某种类型的接口,例如通用串行总线构架(USB)或IEEEE1394(火线)来控制总线上的设备。微端口通过直接发送I/O请求包(IRPs)到总线或是发送到连接到总线的其他远程设备上来与设备通信。在它的上层,微端口提供了标准的NDIS微端口接口,它使得微端口可以与上层NDIS驱动程序通信。 NDIS也支持广域网(WAN)范围的控制WAN NIC的微端口,有关更多的WAN网络环境的信息。

2、2    NDIS中间层驱动程序

中间层驱动程序一般位于微端口驱动程序和传输协议驱动程序之间。因为它在驱动程序层结构的中间位置,所以既与上层协议驱动程序通信又要与下层微端口驱动程序通信:

(1)在它的下界,中间层驱动程序提供了协议入口点(ProtocolXxx函数),NDIS调用这些函数传递下层微端口的请求。对于一个下层微端口驱动程序,一个中间层驱动程序这时就仿佛是一个协议驱动程序。

(2)在它的上界,中间层驱动程序提供了微端口的入口指针(MiniportXxx函数),一个或多个上层协议驱动程序通过NDIS调用这些函数进行通信。对于上层协议驱动程序,一个中间层驱动程序这时就仿佛是一个微端口驱动程序

虽然向上层提供了MiniportXxx函数的一个子集,但是事实上中间层驱动程序并不管理物理的NIC。它只是向上层协议提供了一个或多个可以绑定的虚拟适配器。对于一个协议驱动程序,一个由中间层驱动程序提供的适配器就如同一个物理的NIC。当协议驱动程序发送包或向一个实际的适配器时发出请求时,中间层驱动程序将传递这些包和请求到下层的微端口。当下层微端口向上发出接收包的指示、响应协议请求的信息或指示状态信息时,中间层驱动程序将这些包、响应、和状态指示传递给绑定在虚拟适配器上的协议驱动程序。

中间层驱动程序有如下几种典型使用方法:

(1)在不同的网络介质间进行转换

例如,处于Ethernet和Token Ring传输层及一个ATM微端口之间的中间层驱动程序的功能是将Ethenet和Token Ring的包转换为ATM包,反之亦然。

(2)过滤包

一个包调度器是中间层驱动程序用作过滤驱动程序的很好例子。包调度器读出每个传输层传下来的发送数据包和每一个由微端口指示的接收包的优先权。然后包调度器以它的优先权调度抱的接收和发送顺序

(3)在多个NIC间平衡包的负载

负载平衡驱动程序向上层传输协议提供了一个虚拟的适配器,但实际上它却将包分配了给多个NIC。

2、3  NDIS协议驱动程序

一个网络协议在NDIS驱动程序层次结构中属于最高层驱动程序,而它经常在实现传输层协议的传输驱动程序中被用作最底层的驱动程序,例如TCP/IPIPX/SPX。一个传输协议驱动程序分配包,从应用程序中将数据拷贝到包中,并且通过调用NDIS函数将这些包发送到低层驱动程序中。协议驱动程序也为从下层驱动程序中接收包提供了接口。一个传输协议驱动程序将接收到的数据转换成相应的客户应用数据

在它的下层,协议驱动程序与中层网络驱动程序和微端口NIC驱动程序相连接。协议驱动程序调用NdisXxx函数来发送包,读取和设置由低层驱动程序所维护的信息,以及使用操作系统服务。协议驱动程序也提供了一套入口点(ProtocolXxx函数) NDIS代表下层驱动程序调用这些函数为自己或向上指示接收包、指示下层驱动程序的状态、以及与协议驱动程序进行通信。

对于上层,传输协议驱动程序对高层驱动程序提供了一个私有接口。

 

3、 TDI驱动程序

TDI客户是内核模式的驱动程序,例如Redirector和Server,它通过TDI与传输层相接。TDI简化了TDI的开发传输驱动程序的工作。同时它也通过减少必需编写的传输层相关代码的数量来简化开发客户的工作量。
传输驱动程序提供了仅可被TDI客户方所使用的TDI接口。为了提供更多的接入传输层的方法,Windows 2000为当前较通用的网络接口,Windows Socket和NetBIOS提供了仿真器模块,每个仿真器模块提供了它自己的一套函数,在用户模型中,可以通过标准的调用机制来调用它们。当调用它们时,仿真器模块将自己的函数和相关参数以及程序控制传递给TDI函数,然后通过IDL调用相关的传输驱动程序。
为了提高它的性能,TCP/IP和IPX/SPX的实现也作为TDI传输驱动程序的一部分

 

4、网络驱动程序环境

4.1 无连接环境的网络驱动程序

无连接环境是为无连接介质例如Ethernet和Token Ring所提供的标准的网络驱动程序环境。

 

4.2 面向连接环境下的网络驱动程序

NDIS支持以下几种面向连接的驱动程序:

(1)面向连接的微端口;

(2)面向连接的客户方;

(3)呼叫管理器;

(4)集成的微端口呼叫管理器(MCM);

面向连接的微端口控制着一个或多个网络接口卡(NIC)并且在面向连接协议(面向连接的客户方和呼叫管理器)和NIC硬件之间提供了一个接口;

呼叫管理器是一个NDIS协议,它对面向连接的客户方提供了呼叫的建立和断开服务。呼叫管理器使用面向连接微端口的发送和接收功能来与网络入口,例如网络交换机实体或远程的对等层交换信令消息。一个呼叫管理器支持一个或多个信令协议,例如,ATM论坛所提供的ATM UNI3.1

MCM驱动程序是一个面向连接的微端口,它也对面向连接的客户方提供了呼叫管理服务。虽然一个MCM对客户提供的面向连接的服务与一个呼叫管理器伴随一个面向连接的微端口提供的服务相同,但是呼叫管理器/微端口接口是在驱动程序内部的,因此对于NDIS是不透明的。

多个呼叫管理器和/或MCM可以共存在同一个环境下,并且每个呼叫管理器或MCM可以支持多个信令协议;

一个面向连接的客户方使用呼叫管理器或MCM提供的呼叫建立和断开服务。一个面向连接的客户方同样也使用面向连接的微端口或MCM的发送和接收功能,来发送和接收数据。

面向连接的客户方与一个无连接协议的共同点在于,对于它的上层应用,它们都提供了自己的网络和传输层服务,但是,不同于无连接协议的是,面向连接的客户方对于它的下层,它使用了呼叫管理器和面向连接微端口服务或它使用了MCM服务。

一个面向连接的客户方可以是一个在早期协议和面向连接NDIS之间的一个适配层(它可以是一个中间层驱动程序)。这种适配层的例子如IP/ATM和LAN仿真器(LANE),它们都对下层连接使用了呼叫管理器服务,但对上层非连接协议都隐藏了面向连接特性的接口。鉴于这样的面向连接客户方的上层接口定义已超出了NDIS文档的范围,如果一个客户方正作为一个适配层服务的的话,那么它的上层接口应是由适应面向连接的NDIS的上层协议定义的。

4、3   WAN网络驱动程序的环境

 

]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内核模式驱动程序的网络结构 的相关文章

随机推荐

  • oracle中translate与replace的使用

    1 translate 语法 TRANSLATE char from to 用法 返回将出现在from中的每个字符替换为to中的相应字符以后的字符串 若from比to字符串长 那么在from中比to中多出的字符将会被删除 三个参数中有一个是
  • OpenCV中的图像腐蚀和膨胀操作有哪些?

    在OpenCV中 图像腐蚀 Erosion 和膨胀 Dilation 是常用的图像形态学操作 它们可以用于去除噪声 填充空洞 提取图像中的结构等 下面是几种常见的腐蚀和膨胀操作 腐蚀操作 图像腐蚀可以通过函数cv2 erode 来实现 腐蚀
  • [Linux Audio Driver] 音频POP音问题归纳总结

    1 板级电容 电感发声 情况就是你设备开机之后 啥也没干 然后听到呲啦刺啦的声音 这种情况我遇到过一次 这个是 不合理的结构设计或者走线导致的 硬件实力挖坑 需要改版解决 2 播放声音长时间有杂音 这个锅我们送给硬件 这个是芯片之间有干扰
  • SVN 启动模式

    首先 在服务端进行SVN版本库的相关配置 手动新建版本库目录 mkdir opt svn 利用svn命令创建版本库 svnadmin create opt svn runoob 使用命令svnserve启动服务 svnserve d r 目
  • java tomcat远程调试端口_tomcat开发远程调试端口以及利用eclipse进行远程调试

    一 tomcat开发远程调试端口 方法1 WIN系统 在catalina bat里 SET CATALINA OPTS server Xdebug Xnoagent Djava compiler NONE Xrunjdwp transpor
  • LeetCode2.两数相加

    给你两个 非空 的链表 表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的 并且每个节点只能存储 一位 数字 请你将两个数相加 并以相同形式返回一个表示和的链表 你可以假设除了数字 0 之外 这两个数都不会以 0 开头 示例 1
  • 了解VGG网络结构特点,利用VGG完成图像分类

    学习目标 知道VGG网络结构的特点 能够利用VGG完成图像分类 2014年 牛津大学计算机视觉组 Visual Geometry Group 和Google DeepMind公司的研究员一起研发出了新的深度卷积神经网络 VGGNet 并取得
  • 为什么同样是软件测试员,别人拿3万月薪,你却只能拿3千?你反思了没有?

    有人说软件测试入门门槛低 但是为什么同样是软件测试员 别人拿3万元的月薪 你却只能拿3千月薪 有的人只会抱怨 别人运气好 经验足等等 但是有没有去发现一些根本性的东西 最近我就看到一个有意思的视频 我觉得最能体现出软件测试员薪酬为什么区别这
  • 【机器学习】之Anaconda中使用的命令

    操作之前 点击上图入口 进入Prompt 示例是在base环境下 cls清屏 base C Users bubusa gt cls 1 base环境下的操作 1 列出所有虚拟环境 base C Users bubusa gt conda e
  • 浅拷贝&深拷贝

    什么是深 浅拷贝 他们跟赋值有什么关系 浅拷贝 浅拷贝是创建一个新对象 这个对象有着原始对象属性值的一份精确拷贝 如果属性是基本类型 拷贝的就是基本类型的值 如果属性是引用类型 拷贝的就是内存地址 所以如果其中一个对象改变了这个地址 就会影
  • 算法 堆排序 heapSort

    堆排序 heapSort 堆是一种数据结构 一种叫做完全二叉树的数据结构 堆排序是利用堆数据结构而设计的一种排序算法 堆排序是一种选择排序 其最坏 最好 平均时间复杂度均为O nlogn 同时也是不稳定排序 堆的性质 这里我们用到两种堆 其
  • Error 12154 received logging on to the standby

    环境为 操作系统 AIX 6 1 oracle版本 11 2 0 3 psu5 本编记录了本人一次DG搭建失败的经历 只是一个小的错误 但却导致我排查了半天 记录本次经历用来警醒自己 作为一名dba任何时候我们都要万分仔细 认真 DG搭建的
  • Codeforces 102263C-Check The Text【模拟】 难度:*

    题意 Roze has a special keyboard which consists only of 29 keys 26 alphabetic a z keys which prints the 26 lowercase Latin
  • buck电路_基本斩波电路---BUCK电路

    BUCK电路又称降压斩波电路 其工作原理图如图1所示 该电路有输入直流电源Vin 一个全控器件M1 续流二极管D1 电感L1 负载R1 其主要用于电路的供电电源及带蓄电池负载 拖动直流电机等 在拖动直流电机及蓄电池负载时会出现反电动势 如图
  • 简易版 图书管理系统

    目录 1 Book包 1 1 Book类 1 2 BookList类 2 User包 2 1 User抽象类 2 2 AdminUser类 2 3 NormalUser类 3 Operate包 3 1 MyOperate接口 3 2 Add
  • 【操作系统】

    请解释下局部性原理 通俗易懂的解释 二维数组两维不同遍历的实例 关于CPU三级缓存的介绍 b
  • bes2300 tws配对_tws 耳机春天来了!

    本人负责蓝牙耳机音箱厂家的市场拓展 经常接触国内外各种卖家 专注亚马逊 京东的精品卖家 也有日本 欧美等线下渠道等的B端客户 当然作为行业的业务 也经常接触同行工厂 购买同行的产品或者借用产品用来测试 所以对产品的发展技术趋势及产品的体验感
  • 一文详解Spring事务传播机制

    目录 背景 Spring事务 Transactional注解 使用场景 失效场景 原理 常用参数 注意 事务传播机制 处理嵌套事务流程 主事务为REQUIRED子事务为REQUIRED 主事务为REQUIRED子事务为REQUIRES NE
  • Android JNI 打印日志

    首先要保证Cmake文件中有log模块引用 不然编译不通过 编译一个库 add library native lib 库的名字 SHARED 动态库 so库 native lib cpp 需要编译的C 文件 相当于定义一个变量log lib
  • 内核模式驱动程序的网络结构

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家拍砖 1 Windows 2000 网络结构和OSI模型 Windows 2000网络结构是以国际标准化组织 ISO 制定的七层网络模型为基础的