WINDOWS网络编程.pdf





《WINDOWS网络编程.pdf》由会员分享,可在线阅读,更多相关《WINDOWS网络编程.pdf(486页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载本书第一部分讲述的是传统的网络接口 N e t B I O S、重定向器以及通过重定向器进行的各类网络通信。尽管本书大部分内容均围绕 Wi n s o c k编程这一主题展开,但是,A P I比起Wi n s o c k来,仍然具有某些独到之处。其中,第 1章探讨的是N e t B I O S接口,它和Wi n s o c k类似,也是一种与协议无关的网络A P I。N e t B I O S提供了异步调用,同时兼容于较老的操作系统,如 O S/2和D O S等等。第2章讨论了重定向器的问题,它是接下去的两个新主题邮槽(第3章)和命名管道(第4章)的基础。重定向器提供了与传输无关的文件输入
2、输出方式。邮槽是一种简单的接口,可在 Wi n d o w s机器之间实现广播和单向数据通信。最后,命名管道可建立一种双向信道,这种信道提供了对Wi n d o w s安全通信的支持。第1章 NetBIOS“网络基本输入输出系统”(Network Basic Input/Output System,NetBIOS)是一种标准的应用程序编程接口(A P I),1 9 8 3年由S y t e k公司专为I B M开发成功。N e t B I O S为网络通信定义了一种编程接口,但却没有详细定义物理性的“帧”如何在网上传输。1 9 8 5年,I B M创制了N e t B I O S扩展用户接口(
3、NetBIOS Extended User Interface,NetBEUI),它同N e t B I O S接口集成在一起,终于构成了一套完整的协议。由于 N e t B I O S接口变得愈来愈流行,所以各大厂商也开始在其他如T C P/I P和I P X/S P X的协议上实施N e t B I O S编程接口。到目前为止,全球已有许多平台和应用程序需要依赖于N e t B I O S,其中包括Windows NT、Windows 2000、Windows 95和Windows 98的许多组件。注意Windows CE并不支持NetBIOS API,只是用TCP/IP作为其传送协议,并
4、同时支持NetBIOS的名字与名字解析。Win32 NetBIOS接口向后兼容于早期的应用程序。本章要讨论的是 N e t B I O S编程基础。首先向大家介绍的是N e t B I O S的一些基本知识,从N e t B I O S的名字及L A N A编号开始,接着,我们围绕N e t B I O S提供的基本服务展开讨论,比如面向会话和“无连接”通信等等。在每一节,都展示了一个简单的客户机和服务器示例。在本章最后,我们陈列了程序员需留意的一系列陷阱以及易犯的错误。在本书的附录 A中,大家可找到一份命令索引,其中对每个 N e t B I O S命令都进行了总结,包括必要的参数,以及对其
5、行为的简单说明。OSI 网络模型“开放系统互连”(O S I)模型从一个很高的层次对网络系统进行了描述。O S I模型总共包含了七层。从最顶部的“应用层”开始,一直到最底部的“物理层”,这七个层完整阐述了最基本的网络概念。图1-1展示的正是O S I模型的样子。第一部分传统网络API图1-1 OSI网络模型对应O S I模型,N e t B I O S主要在会话和传输层发挥作用。1.1 Microsoft NetBIOS如前所述,NetBIOS API实施方案适用于为数众多的网络协议,使得编程接口“与协议无关”。换言之,假如根据 N e t B I O S规范设计了一个应用程序,它就能在 T
6、C P/I P、N e t B I O S甚至I P X/S P X上运行。这是一项非常有用的特性,因为对一个设计得当的 N e t B I O S应用程序来说,它几乎能在任何机器上运行,无论机器连接的物理网络是什么。然而,我们也必须留意几个方面的问题。要想使两个 N e t B I O S应用(程序)通过网络进行正常通信,那么对它们各自运行的机器来说,至少必须安装一种两者通用的协议。举个例子来说,假定小张的机器只安装了T C P/I P,而小马的机器只安装了N e t B E U I,那么对小张机器上的N e t B I O S应用来说,便无法同小马机器上的应用进行通信。除此以外,只有部分协
7、议实施了 N e t B I O S接口。Microsoft TCP/IP和N e t B E U I在默认情况下已提供了一个 N e t B I O S接口;然而,I P X/S P X却并非如此。为此,微软专门提供了一个I P X/S P X版本,在其中实现了该接口。在设计网络时,这个问题必须注意。安装协议时,具有N e t B I O S能力的I P X/S P X协议通常会自动提醒你注意这方面的问题。例如,Windows 2000提供的协议本身就叫作“NWLink IPX/SPX/NetBIOS兼容传送协议”。而在Windows 95和Windows 98中,请留意I P X/S P
8、X协议属性对话框,其中有一个特殊的复选框,名为“希望在I P X/S P X上启用N e t B I O S”。另外要注意的一个重要问题是 N e t B E U I并非是一种“可路由”协议。假定在客户机和服务器之间存在一个路由器,那么这种协议在两部机器上的应用便无法沟通。收到数据包后,路由器便会将其“无情地”地抛弃。T C P/I P和I P X/S P X则不同,它们均属“可路由”协议,不会出现这方面的问题。要注意的是,假如你需要在很大程度上依靠 N e t B I O S,那么在配置网络时,至少应安装一种可路由的传送协议。要想深入了解各种协议的特征以及相应的注意事项,请参阅第6章。1.1
9、.1 LANA编号从编程角度思考,大家或许会觉得奇怪,传送协议与 N e t B I O S如何对应起来呢?答案便在于L A N适配器(LAN adapter,LANA)编号,它是我们理解 N e t B I O S的关键。在最初的N e t B I O S实施方案中,每张物理网卡都会分配到一个独一无二的值:即L A N A编号。但到Wi n 3 2下,这种做法便显得有些问题。因为对一个工作站来说,它完全可能同时安装了多种网络协议,也可能安装了多张网卡。2计计第一部分附传统网络API下载应用层层描述为用户提供相应的界面,以便使用提供的连网功能完成数据的格式化控制两个主机间的通信链路(开放、操作
10、和关闭)提供数据传输服务(可靠或不可靠)在两个主机之间提供一套定址/寻址机制,同时负责数据包的路由选择控制两个主机间的物理通信链路:同时还要负责对数据进行整形,以便在物理媒体上传输物理媒体负责以一系列电子信号的形式,传出数据表示层会话层传输层网络层数据链路层物理层每个L A N A编号对应于网卡及传输协议的唯一组合。例如,假定某工作站安装了两张网卡,以及两种具有N e t B I O S能力的传输协议(如 T C P/I P和N e t B E U I),那么总共就有四个 L A N A编号。下面是一种对应关系的例子:0.T C P/I P网卡11.N e t B E U I网卡12.T C
11、P/I P网卡23.N e t B E U I网卡2通常,L A N A编号的范围在0到9之间,除LANA 0之外,操作系统并不按某种固定的顺序来分配这些编号。那么,LANA 0有什么特殊含义呢?LANA 0代表的是“默认”L A N A!N e t B I O S问世早期,许多应用都采用硬编码的形式,只依赖LANA 0进行工作。在那时,大多数操作系统也只支持一个L A N A编号。考虑到向后兼容的目的,我们可将LANA 0人工分配给一种特定的协议。在Windows 95和Windows 98中,通过选择控制面板中的“网络”图标,可访问一种网络协议的“属性”对话框。在“网络”对话框中选择“配置
12、”选项卡,再从网络组件列表中选择一种网络协议,按下“属性”按钮即可。对具有 N e t B I O S能力的每一种协议来说,其属性对话框的“高级”选项卡都有一个“设成默认的通信协议”复选框。若选中这个复选框,会重新安排协议的绑定,使默认协议能够分配到 LANA 0。注意在任何时候,只能有一种协议才能选中这个复选框。由于Windows 95和Windows 98具有所谓的“即插即用”功能,所以我们没有其他办法可对协议的编号顺序进行更改。Windows NT 4则允许用户在设置 N e t B I O S时拥有更大的灵活性。在“网络”对话框的“服务”选项卡中,可从“网络服务”列表框内选择 N e
13、t B I O S接口,然后点按“属性”按钮。随后便会出现“N e t B I O S配置”对话框,在这里可针对每一对网卡传输协议的组合,分配各自的L A N A编号。在这个对话框中,每张网卡都以其驱动程序的名字加以标识;但协议名称却显得有些暧昧。在图 1-2中,我们展示了N e t B I O S配置对话框的样子。单击其中的“E d i t”(编辑)按钮,便可为每种协议单独分配 L A N A编号。Windows 2000也允许我们单独分配L A N A编号。在控制面板中,双击“网络和拨号连接”图标。随后,从“高级”菜单中选择“高级设置”,然后在高级设置对话框中选择“L A N A编号”选项
14、卡。图1-2 NetBIOS配置对话框。这是一部多宿主机器,安装了两张网卡和三种传输协议:TCP/IP(NetBT)、NetBEUI(Nbf)以及IPX/SPX(NwlnkNb)第1章计NetBIOS计计3下载要想设计出一个“健壮”的 N e t B I O S应用,必然需要让自己的代码能对任意 L A N A编号上的连接进行控制。例如,假定小马编写了一个 N e t B I O S服务器应用,对LANA 2上的客户机进行监听。在小马的机器(即服务器)上,LANA 2正好对应于T C P/I P。后来,小张需要编写一个客户端应用,同小马的服务器通信,所以他决定让自己的程序通过工作站的 LANA
15、 2建立连接。然而,小张工作站上的 LANA 2对应于N e t B E U I。这样一来,两个应用相互间均无法通信尽管两者都安装了 T C P/I P和N e t B E U I。为纠正协议的这种差异,小马的服务器应用程序必须对小马工作站上每个可能的 L A N A编号上的客户机连接进行“监听”。类似地,小张的客户机应用程序需要针对本机每个可能的 L A N A编号,尝试在其上面的连接。只有这样,小马和小张才能保证自己的应用尽最大可能成功通信。当然,尽管我们需要在代码中对任何L A N A编号上的连接进行控制,但并不表示能够百分之百地成功。假如两台机器根本就没有安装一种共通的协议,那么无论如
16、何都是不能成功的!1.1.2 NetBIOS名字现在,我们知道了L A N A编号是什么,接着再来讨论 N e t B I O S名字(名称)的问题。对一个进程(或“应用”、“应用程序”)来说,它会注册自己希望与其通信的每个 L A N A编号。一个N e t B I O S名字长度为1 6个字符,其中第 1 6个字符是为特殊用途保留的。在名字表内添加一个名字时,应将名字缓冲区初始化成空白。在 Wi n 3 2环境中,针对每个可用的L A N A编号,每个进程都会为其维持一张 N e t B I O S名字表。若为LANA 0增添一个名字,意味着你的应用程序只能在LANA 0上同客户机建立连接
17、。对每个 L A N A来说,能够添加的名字的最大数量是 2 5 4,编号从1到2 5 4(0和2 5 5由系统保留)。然而,每种操作系统都设置了一个低于 2 5 4的最大默认值。重设每个L A N A编号时,我们可对此默认值进行修改。另外,N e t B I O S名字共有两种类型:唯一名字和组名。“唯一名字”意味着它是独一无二的:网络上不能再有其他任何进程来注册这个名字。如果一台机器已注册了某名字,那么在你注册该名字时,便会收到一条“重复名字”出错提示。大家或许已经知道,微软网络中的机器名采用的便是N e t B I O S名字。机器启动时,会将自己的名字注册到本地的“Wi n d o w
18、 s互联网命名服务器”(W I N S)。如果事前已有另一台机器注册了同样的名字,W I N S服务器便会报错。W I N S服务器维护着已注册的所有 N e t B I O S名字的一个列表。除此以外,随名字一道,还可保存协议特有的一些信息。比如在 T C P/I P网络中,W I N S同时维护着N e t B I O S名字以及注册那个名字的I P地址(亦即相应的机器)。假如配置网络时未为其分配一个W I N S服务器,那么如何检查名字是否重复呢?这时便要采用在整个网络内“发广播”的形式。当一名发送者向全网络发出一条特殊的广播消息时,如果没有其他机器回应这条消息,便允许发送者使用该名字。
19、而在另一方面,“组名”的作用是将数据同时发给多个接收者;或者相反,接收发给多个接收者的数据。组名并非一定要“独一无二”,它主要用于多播(多点发送)数据通信。在N e t B I O S名字中,第1 6个字符用于区分不同的微软网络服务。各种网络服务和组名需要用一个W I N S服务器完成注册。要么由配置了 W I N S功能的计算机进行名字的直接注册,要么由那些尚未配置W I N S功能的计算机,通过在本地子网内进行广播注册。N b t s t a t命令是一个非常有用的工具,可用它获取与本地(或远程)计算机上注册的N e t B I O S名字有关的信息。在表1-1展示的例子中,N b t s
20、 t a t-n命令可针对用户“D a v e m a c”,生成这个已注册的N e t B I O S名字的列表。D a v e m a c登录进入的那部计算机已被配置成一个主域控制器,而且运行的是4计计第一部分附传统网络API下载Windows NT Server操作系统,且已安装了I n t e r n e t信息服务器(I I S)。表1-1 NetBIOS名字表名字第1 6个字节名字类型服务D AV E M A C 1唯一工作站服务名D AV E M A C 1唯一服务器服务名D AV E M A C D成组域名D AV E M A C D成组域控制器名D AV E M A C D唯
21、一主控浏览器名D AV E M A C 1唯一发信者名I n e t S e r v i c e s成组I n t e r n e t信息服务器组名I S D AV E M A C 1唯一I n t e r n e t信息服务器唯一名D AV E M A C 1+唯一网络监视器名字只有在安装了T C P/I P协议的前提下,才会安装 N b t s t a t命令。该工具亦可用来查询远程机器的名字表,方法是在远程机器的名字后面,接上一个-a参数;或在远程机器的I P地址后,接上一个-A参数。在表1-2中,我们总结了各种不同的 M i c r o s o f t网络服务为唯一N e t B I
22、O S计算机名追加的默认第1 6个字节值。表1-2 唯一名字标识符第1 6个字节含义工作站服务名。通常,它对应于N e t B I O S计算机名收发消息时采用的信使服务名。W I N S服务器会将这个名字注册成W I N S客户机上的信使服务,并通常追加到计算机名后面,以及当前登录到计算机的用户名的后面域主控浏览器名。这个名字用于标识主域控制器,并指出用什么客户机和其他浏览器同域主控浏览器取得联系远程访问服务(R A S)服务器服务网络动态数据交换(N e t D D E)服务用于为文件共享提供“共享点”的服务器服务名R A S客户机网络监视器代理网络监视器工具表1-3则列出了在常用的一系列
23、N e t B I O S组名后,追加的默认第1 6个字节字符。如此多的标识符很易使人产生混淆,很难真正记住。所以,请考虑把它作为一个“速查表”或“索引”使用。大家或许不应在自己的 N e t B I O S名字中使用它们。为防止偶然同你的N e t B I O S名字发生冲突,最好避免使用唯一名字标识符。对于组名,恐怕更要引起高度注意假如你的名字同一个已有的组名相同,那么不会产生任何错误提示。若发生这种情况,结果就是会收到原本发给其他人的数据。表1-3 组名标识符第1 6个字节含义一个域组名,在这个组内包含了已注册域名的一系列计算机的特定地址。由域控制器来注册这个名字。W I N S将它当作
24、一个域组看待:组内每个成员必须单独更新自己的名字。域组最多只能包容 2 5个名字。若复制的一个静态 1 C名字同另一个W I N S服务器上的某个动态1 C名字发生冲突,便会增加成员的一个“联合”,同时将记录标定为“静态”。假如记录是静态的,组内成员便不必定时刷新自己的 I P地址第1章计NetBIOS计计5下载(续)第1 6个字节含义指定一个主控浏览器的名字,客户机通过它访问主控浏览器。在一个子网上,只能有一个主控浏览器。W I N S服务器会对域名注册作出“正”(肯定)响应,但却不会将域名保存在自己的数据库中。假如一台计算机向 W I N S服务器送出一个域名查询,则W I N S服务器会
25、返回一个“负”(否定)响应。若送出域名查询的那台计算机已被配置成 h节点或m节点,便会随之广播那个查询,以解析出正确的名字。客户机解析名字的方法是由节点的类型决定的。如客户机配置成 b节点解析,便会送出广播包,以便广告并解析出 N e t B I O S名字。p节点解析采用与W I N S服务器的点到点通信方式。而 m节点属于b及p节点的一种混合形式:首先使用的是 b节点;如有必要,再接着使用 p节点。最后一种解析方式是 h节点,亦称“混合模式”。它无论如何都会先尝试使用 p节点注册和解析,然后只有在解析失败的前提下,才会换用b节点。Wi n d o w s操作系统默认为h节点一个普通组名。浏
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- WINDOWS 网络 编程

限制150内