this is a extra element for clear the floated element
用于核心模式驱动程序的网络体系结构
  • 12/31
  • 2008
网络技巧 | Windows 1746 次查看
  2.1 Windows 2000网络体系结构和OSI模型

  Microsoft Windows 2000网络体系结构是依据是国际标准组织(ISO)开发的

  7层网络模型。ISO开放系统互联(OSI)参考模型于1978年被引进,用来描述

  网络是一个一系列的协议层,每个协议层上都有其特定的功能。每一协议层为

  上一层提供特定的服务,来保护各个协议层的服务如何实现的具体问题。一个

  设计合理的处于两个相邻层的界面定义了下一个协议层为上一个协议层提供何

  种服务及如何实现这些服务的内容。

  OSI 参考模型

  Windows 2000下的网络驱动程序实现网络体系结构中由下而上的4个协议层。

  物理层

  这是OSI模式中最低的一层。这一层包括通过一个物理媒介接收和转发无结构

  的原始比特流。如电子/光学,机械和功能接口通过这个物理媒介。物理层将

  信号传输到所有的更高层。在Windows 2000下,物理层有网络接口卡(NIC)

  来实现。它的接收器,通过的介质由NIC附带。由于网络由串行端口组成,物

  理层也可以包括低层网络软件定义如何将串行比特流分解成数据包。

  数据链路层

  OSI定义的这层又被IEEE分为两层:LLC 和 MAC。LLC层提供将数据帧从一个节

  点无错误传输到另一个节点。LLC层建立并终止逻辑链路,控制帧传输,帧排

  序,确认帧和再次传输非确认帧。LLC层利用帧确认和再次传输来通过链来向

  上一层提供最终的无错误的传输。MAC层管理存取网络媒介,检查帧错误,并

  管理接收帧地址确认。在Windows 2000网络体系结构中,LLC子层是由传输驱

  动程序实现的,而MAC子层是由网络接口卡(NIC)来实现。NIC由一个被称为

  NIC驱动器的软件驱动器设备来控制。Windows 2000装有可用于多种常用NIC的

  NIC驱动器。

  网络层

  该层控制子网的运行。它决定了数据将要传送的路径,其根据如下:

  网络条件

  服务优先级

  其他因素,包括路径,流量控制,帧分解和重组,逻辑至物理地址映射,及审

  记

  传输层

  该层确保信息传输无误,并且是按顺序的,没有任何减少或重复。它将上层协

  议从考虑在它们之间及同层之间的数据传输中解脱出来。在协议栈里一个最小

  的传输层要求包括一个可以提供最终循环能力的可靠的网络或逻辑链控制层。

  如,由于Windows 2000 NetBEUI 传输驱动器包括一个适用于OSI的LLC层,它的

  传输层功能是最小的。如果协议栈不包括一个LLC层,并且如果网络层不可靠,

  不能支持独立的从

  数据源传送到终点的数据包(如TCP/IP的 IP 层或NWLink’s IPX 层),传输

  层应包括帧排序和确认,及非确认帧的再次传输。

  在Windows 2000网络体系结构中,逻辑控制,网络和传输层是由我们所熟知的

  传输驱动器(transport drivers)软件驱动器来实现的。有时这种驱动器也

  指协议,协议驱动器,或协议模组。Windows 2000装有TCP/IP, IPX/SPX,

  NetBEUI和语音传输驱动器。

  2.2 NDIS 驱动器

  网络驱动器接口规范(NDIS)库从网络驱动器中抽象了网络硬件。NDIS也在分

  层的网络驱动器中规定了一个标准接口,从而抽象了低层次的硬件来提供给高

  层次网络上的网络管理,如网络传输。NDIS也维护用于网络驱动器的状态信息

  和参数,包括函数的指针,句柄,链接的参数块和其他的一些系统变量。

  根据2。2数据显示,NDIS支持包括下列几种网络驱动器形式:

  小端口驱动器

  中间驱动器

  协议驱动器

  2.2.1 NDIS小端口驱动程序

  一个NDIS小端口驱动程序(也称为一个小端口NIC驱动程序)有两种基本功能:

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

  b.与高级驱动程序接口,例如和中间驱动程序和传输协议驱动程序

  一个小端口NIC驱动程序通过NDIS库和它的NIC及高层驱动程序相互通讯。NDIS库

  导出一个完全的函数集合(NdisXXX函数),来装入小端口需要调用的操作系统函

  数。然后,小端口必须导出一套MiniportXxx函数的实体指针,可供NDIS自己使用

  或代替高层驱动程序访问小端口。

  用发送和接收操作举例说明了小端口NIC驱动程序与NDIS和高层驱动程序之间的交

  互:

  a.当一个传输驱动程序需传输一个数据包时,它调用一个由NDIS库导出的

  NdisXxx函数。然后NDIS通过调用适当的NdisXxx函数将这个数据包传至小端

  口。接着小端口通过调用适当的NdisXxx函数将数据包传至NIC来传输。

  b.当一个NIC接到一个数据包时, 它可以发布一个硬件中断让由NDIS或NIC的小

  端口来进行处理。NDIS通过调用适当的MiniportXxx函数来通知NIC的小端口。

  小端口对来自NIC的数据建立传输,然后通过调用适当的NdisXxx函数标识接

  收到的数据来绑定到高层驱动程序上。

  对于无连接环境和面向连接的环境,NDIS都支持小端口驱动程序。

  无连接小端口控制NIC用于无连接网络媒介,如Ethernet, FDDI 和Token Ring.无

  连接小端口可进一步被分为如下几种:

  a.串行驱动程序,依赖NDIS来连续调用他们的MiniportXxx函数和管理他们的发送

  队列。

  b.非连续驱动程序,其操作的连续是通过自己的MiniportXxx函数对内部所有到达

  的发送的包排队来实现的。注意当驱动程序的临界区(是指一段时间内仅仅能

  够允许单个线程执行的代码)保持得很小的话,这个方式更可能让全双工执行

  的更好。

  面向连接的小端口控制NIC用于面向连接的网络媒体,如ATM, 和ISDN。面向连接的

  小端口通常是非连续的-他们的连续是通过自己的Miniport函数对内部所有到达的

  发送的包排队来实现的。

  一个NDIS小端口驱动程序的下端也可以是有一个非NDIS的。(参见图2。3)

  通过它的非NDIS下端,一个小端口使用总线的类接口,如Universal Serial Bus

  (USB)(通用串行总线)或IEEE1394(火线)来控制一个总线上的设备。小端口和外

  设的通讯是通过发送输入/输出(I/O)请求包(IRPs)或者是直接访问附加在总线

  上的远程设备。在它的上端,小端口导出一个标准NDIS小端口的接口,这个接口可使

  小端口与上面的NDIS设备相互通讯。

  NDIS也支持小端口的广域网(WAN)扩展来管理WAN NICs. 想了解更多的WAN网络环境

  信息,请参见2。4。3部分。

  2.2.2 NDIS 中间驱动程序

  正如图2。4所表示的那样,中间驱动程序是那种典型的处于小端口驱动程序和传输协

  议驱动程序之间的驱动程序。

  由于它处于驱动程序层级的中间位置,所以中间驱动程序必须和上面的协议驱动程序

  和下面的小端口驱动程序都通讯:

  在它的下端,一个中间驱动程序导出协议实体指针(ProtocolXxx函数),让NDIS

  调用来完成与底层小端口的通讯请求。对于一个下层小端口驱动程序来说,一个中

  间驱动程序就像一个协议驱动程序一样。在他的上端,一个中间驱动程序导出小端

  口实体指针(MiniportXxx函数),让NDIS调用来和一个或多个上面的协议驱动程

  序进行通讯。对于一个上面的协议驱动程序,一个中间驱动程序就像一个小端口驱

  动程序

  虽然它给它的上端导出一个MiniportXxx函数子集,一个中间驱动程序事实上并不能

  管理一个物理NIC。替代的,它提供一个或多个虚拟适配卡,让上端的协议驱动程序

  可以绑定。对于一个协议驱动程序,一个通过中间驱动程序提供的虚拟适配卡就像

  一个物理NIC一样。当一个协议驱动程序向虚拟适配卡发送数据包或请求时,中间驱

  动程序传播这些数据包和请求给下层小端口。当下层小端口表示接收到数据包或响

  应这个协议的请求信息,或表明状态,中间驱动程序传播同样的数据包,回复和状

  态给绑定在这个虚拟适配卡上的协议驱动程序。

  中间驱动程序通常以下几种方式使用:

  在不同的网络媒介中起翻译的作用

  如,处于Ethernet 和Token Ring传输层和一个ATM小端口中的中间驱动程序的功能是

  将Ethernet和Token Ring数据包映射给ATM数据包,反之亦然。

  过滤数据包

  一个数据包调度程序就是中间驱动程序用来过滤数据包的例子。一个数据包调度程序

  阅读由传输层传输的每个要发送数据包及由小端口标识的接收到的数据包中的优先信

  息。然后数据包调度程序就根据它的优先顺序输出或接收每一个数据包。

  在多个NIC中平衡数据包传送

  一个负载平衡驱动程序在传输协议之上表现为一个虚拟适配卡。但实际上是通过在多

  个NIC上分布的发送包。

  2.2.3 NDIS 协议驱动程序

  一个在NDIS驱动程序层级中处于最高级的网络协议经常在一个传输驱动程序中被用来

  做最低层的驱动程序来实现一个传输协议栈,如TCP/IP或IPX/SPX栈。一个传输协议驱

  动程序分配,拷贝来自发送应用程序申请发送的数据包,一个协议驱动程序同时也提

  供一个协议接口来接受从下一个到达驱动程序中到达的包,一个传输协议驱动程序转

  移接受到的数据给适当的客户端应用程序。

  在它的下端,是一个与中间网络驱动程序及小端口NIC驱动程序连接的协议驱动程序的

  接口。协议驱动程序调用NdisXxx函数来发送数据包,阅读并设置由低级驱动程序维护

  的信息,并使用系统服务。协议驱动程序也导出一套