用于核心模式驱动程序的网络体系结构的详细介绍
用于核心模式驱动程序的网络体系结构的详细介绍
本帖版权归原作者,其它网站转载须注明出处,传统媒体转载须事先与原作者和e龙西祠胡同[http://www.xici.net]联系。 |
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函数来发送
数据包,阅读并设置由低级驱动程序维护 的信息,并使用系统服务。协议驱动程序也导
出一套实体指针(ProtocolXxx函数), 可供NDIS自己使用或代替低层驱动程序标
记收到的数据包,显示低层驱动程序的状态, 并和其它协议驱动程序相互通讯。 在它
的上端口,一个传输协议驱动程序有一个私有的的用于与在协议栈中的高层驱动程
序通讯的接口。
补充日期: 2001-02-16 12:24:57
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函数),让ND
IS 调用来完成与底层小端口的通讯请求。对于一个下层小端口驱动程序来说,一个中 间
驱动程序就像一个协议驱动程序一样。在他的上端,一个中间驱动程序导出小端 口实体指
针(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函数来发送数据包,阅读并设置由低
级驱动程序维护 的信息,并使用系统服务。协议驱动程序也导出一套实体指针(ProtocolXxx函数),
可供NDIS自己使用或代替低层驱动程序标记收到的数据包,显示低层驱动程序的状态,
并和其它协议驱动程序相互通讯。 在它的上端口,一个传输协议驱动程序有一个私有的的用于
与在协议栈中的高层驱动程 序通讯的接口。
回应人: .abu. 发表日期: 2001-02-16 13:08:47
2.2NDIS驱动器
网络驱动器接口规范(NDIS)库从网络驱动器中抽象了网络硬件。NDIS也在分层
的网络驱动器中规定了一个标准接口,从而抽象了低层次的硬件来提供给高层次
网络上的网络管理,如网络传输。NDIS也维护用于网络驱动器的状态信息和参数
,包括函数的指针,句柄,链接的参数块和其他的一些系统变量。
根据2。2数据显示,NDIS支持包括下列几种网络驱动器形式:
小端口驱动器
中间驱动器
协议驱动器
2.2.1NDIS小端口驱动程序
一个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和TokenRing.无
连接小端口可进一步被分为如下几种:
a.串行驱动程序,依赖NDIS来连续调用他们的MiniportXxx函数和管理他们的发送
队列。
b.非连续驱动程序,其操作的连续是通过自己的MiniportXxx函数对内部所有到达
的发送的包排队来实现的。注意当驱动程序的临界区(是指一段时间内仅仅能
够允许单个线程执行的代码)保持得很小的话,这个方式更可能让全双工执行
的更好。
面向连接的小端口控制NIC用于面向连接的网络媒体,如ATM,和ISDN。面向连接的
小端口通常是非连续的-他们的连续是通过自己的Miniport函数对内部所有到达的
发送的包排队来实现的。
一个NDIS小端口驱动程序的下端也可以是有一个非NDIS的。(参见数据2。3)
通过它的非NDIS下端,一个小端口使用总线的类接口,如UniversalSerialBus
(USB)(通用串行总线)或IEEE1394(火线)来控制一个总线上的设备。小端口和外
设的通讯是通过发送输入/输出(I/O)请求包(IRPs)或者是直接访问附加在总线
上的远程设备。在它的上端,小端口导出一个标准NDIS小端口的接口,这个接口可使
小端口与上面的NDIS设备相互通讯。
NDIS也支持小端口的广域网(WAN)扩展来管理WANNICs.想了解更多的WAN网络环境
信息,请参见2。4。3部分。
2.2.2NDIS中间驱动程序
正如图2。4所表示的那样,中间驱动程序是那种典型的处于小端口驱动程序和传输协
议驱动程序之间的驱动程序。
由于它处于驱动程序层级的中间位置,所以中间驱动程序必须和上面的协议驱动程序
和下面的小端口驱动程序都通讯:
在它的下端,一个中间驱动程序导出协议实体指针(ProtocolXxx函数),让NDIS
调用来完成与底层小端口的通讯请求。对于一个下层小端口驱动程序来说,一个中
间驱动程序就像一个协议驱动程序一样。在他的上端,一个中间驱动程序导出小端
口实体指针(MiniportXxx函数),让NDIS调用来和一个或多个上面的协议驱动程