找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 11048|回复: 11

科普:关于Windows的网络架构--NDIS

 火... [复制链接]

23

主题

117

回帖

1

精华

银牌会员

积分
400
发表于 2010-9-16 13:20:29 | 显示全部楼层 |阅读模式
本帖最后由 Tesla.Angela 于 2010-9-17 11:58 编辑

鉴于那个什么“腾X”的一些关于网络的幼稚问题,决定写下这篇文章。


    主题:Windows系统的网络架构
    关键词:NDIS,端口驱动,协议驱动,中间层驱动,TDI,SOCKET

    首先讲一下windows的基本网络结构:
    物理网卡--端口驱动---中间层驱动(我在本论坛发了有例子)---协议驱动(TCP/IP,NETBIOS等等)---TDI(传输层接口)--SOCKET(应用层)

   这是基本结构图,下面我先讲一下网卡的历史。
   Windows在最初设计时,由于历史原因没有考虑过网络通信的问题,所以在Ntoskrnl.exe以及hal.dll这两个内核文件里面都没有网络相关的内容。这就导致,所有生产网卡的厂商都必须提供从直接操作物理网卡的端口驱动到与网卡没啥关系的协议驱动(如TCP/IP),再到应用层接口(如SOCKET),这样的话,不仅网卡厂商的工作量巨大,而且各网卡生产商甚至同一个生产商的产品,兼容性严重不足,而且,在这种情况下,作为一个网络程序的开发人员的话,你可能在RealTek网卡基础上开发的QQ程序拿到别人使用NE2000的网卡的机器上就上不了网。

     正是由于这个原因,MS后来联合intel和3COM以及还有其它几家什么渣渣公司的,制定了一个网络标准,英文叫Network Driver Interface Specifiction,翻译为中文就是网络驱动接口标准,也就是我在回答那个叫什么“腾X”的人时反复提到的NDIS。这个标准下,MS给windows系统提供了一个NDIS.sys的文件,这个其实是一个内核模式下的动态链接库。同样,在这个标准下,规定所有网卡生产商在提供驱动时,必须由这个驱动向外导出几个固定的函数,实际就是NDIS.sys规定了一套接口,网卡生产商自己的驱动去调用这些接口。对于协议驱动来说,也是一样的,协议驱动也必须按照一定的规则去调用Ndsi.sys提供的标准接口,使得写协议驱动的人不用管具体的网卡是什么。而对windows来说,MS自己提供了上面的常用协议驱动以及传输层接口和应用层接口(ws2_32.dll)。这么做了之后,生产网卡的人的工作量就小了很多,不用管上层如何去调用它的网卡;写协议驱动的人也不用管它的下层网卡究竟是什么样,比如下层可能是真实的物理网卡,也可能是猫,还可能根本就什么都没有,或者是虚拟出来网卡,这些对写协议驱动的人来说都无关紧要,它只要按照NDIS标准写好接口就可以了。

这样以后,整个网络通信架构就得到了统一,解决了兼容性问题。现在的MS的系统,还有其它几乎所有系统,以及全世界所有生产网卡的厂商,都遵循整个标准。

再来说说虚拟网卡:刚才提到,协议驱动是不管它的下层具体是什么的,只要下层提供的接口是NDIS标准的,那么就会被认为是一个网卡。虚拟网卡的原理就是这个道理。你可以写一个驱动,提供标准的NDIS接口就是了,然后你可以实际上不操作任何物理网卡,当上层协议驱动需要数据或者需要发送数据时,你可以随你的爱好,任意构造数据提交给协议驱动就是了,或者你甚至可以从其他真实的物理网卡获取数据后再返回(这个过程中数据完全由你控制,想要丢弃,修改,加密,伪造等等操作都随你的便)。

接着说说何为IMD:其实,如果你写一个驱动,在这个驱动内部同时提供端口驱动和协议驱动所必须的,由NDIS规定的接口,那这个驱动就是IMD驱动了,又叫中间层驱动。这个驱动对系统来说,既认为它是一个网卡,也认为它是一个协议。而所有的物理网卡的端口驱动会向本机内安装的所有协议驱动提供它接收到的任何数据;反过来,所有协议驱动也会向系统中的所有网卡的端口驱动(不管这个网卡是否存在,只要是端口驱动)提供协议驱动下发的数据。这就导致一个结果,IMD驱动会获得所有进出网卡的数据。所以,IMD驱动通常被防火墙程序或者VPN,VLAN,网桥等软件使用。

       先说到这里!



【最后修改:Tesla.Angela;修改内容:删除一些让别的网友感到不适的话;修改原因:让本帖更加和谐】

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-9-16 18:19:23 | 显示全部楼层
原来如此,大致的结构算是明白了一些了。。。。。。。
我就是嗷嗷叫的老马了......

3

主题

38

回帖

0

精华

初来乍到

积分
14
发表于 2010-9-16 23:46:33 | 显示全部楼层
好吧,我服你了。
不过,不要老说别人幼稚,你又好得了多少呢?世上没人有资格是能说自己和别人不是幼稚的……
就到此为止吧……

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-9-17 11:56:14 | 显示全部楼层
本帖最后由 Tesla.Angela 于 2010-9-17 12:03 编辑

首先膜拜楼主,让我懂得了NDIS是什么东东。
======
不过楼主还是和气一点嘛,大家都是来这交流的,而不来这吵架的。
我现在之所以不在任何别的论坛参与任何讨论,就是因为觉得别的论坛经常出现所谓的“高手”讽刺菜鸟的场景,令我非常不舒服。
我去年也是您这个样子,自己多懂点别人不懂的东西就很自以为是,后来这种态度和别人发生了激烈的冲突,从此我痛改前非,不再发任何话中带刺的帖子。如果别人说我如何如何(无论是讽刺还是诬陷),我也一笑了之,不与他们计较。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-9-17 12:05:48 | 显示全部楼层
不过话说我现在上网少了,估计也没有人关注我了,更不会有人说我如何如何了。。。

3

主题

38

回帖

0

精华

初来乍到

积分
14
发表于 2010-9-17 12:46:53 | 显示全部楼层
呵呵 = =

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-9-17 18:24:20 | 显示全部楼层
对于我这样的新人来说确实是要少点打击多点支持与鼓励
我就是嗷嗷叫的老马了......

头像被屏蔽

27

主题

136

回帖

2

精华

铂金会员

积分
2257
发表于 2010-9-17 22:04:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-9-18 01:43:26 | 显示全部楼层
回复 9# naylon


不是隐居山林,是觉得在网上哇哇喳喳的,不如陪GF睡觉。。。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-9-21 18:43:32 | 显示全部楼层
回复 11# naylon

何必在网上较真呢?何况跟你对抗的家伙是不是人都不能确定,以前看过一个用VB写的聊天机器人。。。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-9-21 18:44:18 | 显示全部楼层
回复 11# naylon


    我的意思是说,能写个聊天机器人,自然能写个吵架机器人。。。

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-9-21 20:45:37 | 显示全部楼层
哈哈哈哈哈哈哈哈
我就是嗷嗷叫的老马了......

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表