div class=MsoNormal style="margin: 0cm 0cm 0pt; text-indent: 21pt; mso-char-indent-count: 2.0">
大家都知道,为了便于用户与网络中的其它用户共享资源,微软的Windows系统在安装、配置好基本的网卡、网络协议和服务后,都会在桌面上自动生成一个“网上邻居”快捷方式。用户如果要查看网络上另一计算机的共享资源,只需在“网上邻居”上一步步进行简单的双击操作,即可找到并打开相应主机上的共享文件。但就是这样一个看似非常简单的过程,其中就涉及到许多服务程序或协议的复杂工作,其中就包括:名称注册、名称解析、TCP/IP协议、NETBIOS协议、WINS和DNS等。在整个微软Windows名称解析过程中,Windows 2000以前的版本与以后的版所采取的方式是不同的(早期版本主要是通过WINS服务解析的,而windows 2000及以后版本主要是通过DNS服务进行解析的),为了清楚地说明各种解析原理,所以把整个Windows系统的名称解析原理分两篇来介绍。本篇仅介绍早期的Windows 95/98系统所采取的WINS名称解析原理。下面我们对这样一个过程的工作原理进行介绍,首先要认识的是与“网上邻居”工作原理息息相关的NETBIOS。
一、NETBIOS基础
NetBIOS接口最先是由SytecInc.(目前的Hughes LAN Systems)在1983年为国际商业机器公司(IBM)开发的,NetBIOS在一开始就从来没有考虑升级到用于大型网络。
微软公司80年代后期开始把NETBIOS作为一种高级编程接口用于引入的将IBM PC联网的MS-DOS程序。为了基于为那些计算机提供的联网硬件和软件来建立LAN,微软公司和其他供应商对使用NetBIOS接口设计联网系统组件和程序进行了标准化。该接口使用长度限制在16个字符的名称来标识每个网络资源。
NetBIOS名称空间是单层的,这意味着在一个网络内只能使用一次该名称。这些名称是在计算机启动、服务开始或用户登录时动态注册的。NetBIOS名称可以注册为唯一名称或组名。唯一名称有一个与名称相关联的地址。组名有多个映射到名称上的地址。
在Windows 2000之前,所有基于MS-DOS和Windows的操作系统都需要NetBIOS命名接口来支持网络功能。在Windows 2000发布之后,计算机的网络连接就不再需要对NetBIOS命名接口的支持了。例如,使用Windows 2000和其他不需要NetBIOS名称的操作系统(如某些版本的UNIX),可以建立并运行一个由支持使用“域名系统(DNS)”的主机和程序组成的环境。但是,多数网络仍然需要将要求NetBIOS网络名称的老的操作系统与运行Windows 2000的计算机集成在一起。由于这个原因, Windows 2000继续为NetBIOS名称提供默认支持,以方便与需要它们的老的操作系统的交互操作。这种支持主要是以两种方式提供的:
•默认情况下,所有使用TCP/IP的Windows 2000计算机,都默认对注册和解析NetBIOS名称提供客户端支持。这种支持是通过TCP/IP上的NetBIOS(NetBT)来提供的,而且需要时可以手动禁用。
•Windows 2000 Server通过Windows网际名称服务(WINS)继续提供服务器端支持。WINS可以用来有效地管理基于NetBT的网络。
一个NetBIOS名称包含16个字节,每个名称的前15个字节是用户指定的,它分别用于表示:
•标识与网络上单个用户或计算机相关联的某个资源的唯一名称。
•标识与网络上的一组用户或计算机相关联的某个资源的组名。
每个NetBIOS名称中的第16个字符被NetBIOS客户用作名称后辍,用来标识该名称,并表明用该名称在网络上注册的资源的有关信息。每个NetBIOS名称都配置成一个唯一的(专有的)名称或组(非专有的)名。唯一的名称通常用来向计算机上的特定进程发送网络通讯。组名用来同时向多台计算机发送信息。
在较早版本的Windows NT中,所有网络服务都只使用NetBIOS名称注册,而对于Windows 2000,Netlogon服务及其他可能的网络服务都将在DNS中注册。而且以前的网络命令行应用程序(如各种net命令)也使用NetBIOS名称来访问这些服务。其他基于NetBIOS的计算机(如Windows for Workgroups、LAN Manager和LAN Manager for UNIX主机)也使用NetBIOS名称。
NetBIOS定义了两个组件:
•会话层接口
该NetBIOS接口是一个应用程序可以使用的标准API。这些应用程序将网络输入、输出和控制指令提交给下层网络协议软件,以便通过网络进行传输。您可以在支持NetBIOS接口的任意协议软件上,运行所有使用NetBIOSAPI进行网络通讯的应用程序。
•会话管理和数据传输协议
这里使用的协议可以是用来执行NetBIOS接口命令集的实际传输和通讯的任何网络连接协议及其相关软件。TCP/IP和NetBEUI协议软件就是两个例子,大多数较早版本的Windows操作系统都有这两个协议。
要实现在“网上邻居”上进行正常计算机及文件浏览,首先需要客户机把自己的名字在网上注册,然后通过特定的名称解析方法把所注册的名称与对应的IP地址进行对应,有了这两步,Windows系统才可以通过浏览服务在网上邻居上进行浏览。本篇要介绍的是微软的Windows 2000以前版本(包括Windows 95/98/NT 4.0/Me等)的名称注册和名称解析原理。首先来了解一下在这些系统中的名称注册方法。
二、名称注册
在Windows 2000以前的Windows系统版本中,名称注册就是客户端计算机请求在网络上使用NetBIOS名称的过程。该请求可以是请求对一个唯一(专有)名称,也可以是请求一个组(共享)名,NetBIOS应用程序还可以注册一个或多个名称。图1所示是WINS客户(HOST-C)直接向它配置的WINS服务器WINS-A发送一个“名称注册请求”过程图。
图1
通过向HOST-C发送肯定或否定的名称注册答复,WINS-A可以接受或拒绝名称注册请求。WINS-A的操作取决于以下几个因素:
(1) WINS-A上的服务器数据库中是否已经有该名称
(2). 该请求是请求唯一名称还是组名项
如果数据库中不存在该名称,那么它就会作为一个新注册被接受,并进行以下两步:
•使用新的版本ID输入HOST-C的名称,并给一个时间戳,标志WINS服务器的所有者ID。
时间戳的计算依据是将WINS服务器上设置的“更新间隔”值(默认为6天)加到服务器的当前日期和时间上。
将给HOST-C发回一个肯定的注册响应,其中包含的有效时间(TTL)值等于WINS-A上记录该名称的时间戳。
名称注册又分“相同IP地址的名称”和“不同IP地址的注册名称”两类,下面分别予以介绍。
如果名称HOST-C已经输入到数据库中,而且名称IP地址与请求的相同,则所采取的操作取决于现有名称的状态和所有权。
•如果该项标志为“活动”,并且该项为服务器WINS-A所有,那么该服务器就会更新该记录的时间戳,并给客户返回一个肯定的响应。
2. 不同IP地址的注册名称
如果WINS数据库中已经有该名称,但IP地址不同,则WINS服务器会避免重复的名称。如果该数据库项处于被释放或逻辑删除状态,则WINS服务器可以分配该名称。
但是,如果该项处于活动状态,具有该名称的节点就会被质询,以确定它是否仍在网络中。这种情况下,WINS服务器(WINS-A)可以执行一个名称质询,并采取以下步骤:
•WINS-A向请求客户(HOST-C)发送一个等待认可(WACK)响应,指定TTL域中的某个时间,在该时间内客户应该等待响应。
•然后,WINS-A将向当前在服务器数据库中注册该名称的节点发送一个名称查询请求。
•如果该节点仍然存在,将给WINS-A返回一个肯定的响应。
•接下来,WINS-A会向请求客户(HOST-C)发送一个否定的名称注册响应,拒绝该名称注册。
•如果WINS-A发送的第一个质询没有收到肯定的响应,则随后会进行两次名称查询。
如果三次尝试都没有响应,则质询过程完成,并向请求客户(HOST-C)返回一个肯定的注册响应,而且服务器中更新的名称将用于新的客户注册
【注意】:
•与启用WINS的客户不同,非WINS客户(如NetBTb节点客户)不能直接与WINS服务器联系,非WINS客户必须先注册,然后通过发送和答复本地网内的广播名称查询,不断地保护其注册名称。
•NetBIOS名称是通过“Windows网际名称服务(WINS)”来注册的,并且在计算机正常关机时通常要释放该名称。如果计算机不是正常关机,或者计算机在关机时不能与WINS服务器联系,则可以使用nbtstat命令在WINS中刷新该计算机的本地名称。这对于在网络中不同位置之间移动的可移动或便携式计算机很有用。
3. 更新名称
WINS客户需要通过WINS服务器定期更新其NetBIOS名称注册。WINS服务器处理名称更新请求与新名称注册类似。当客户第一次通过WINS服务器注册时,WINS服务器将返回带有“生存时间(TTL)”值的消息,该消息表明客户注册何时到期或需要更新。如果到时还不更新,则名称注册将在WINS服务器上到期,最终,系统会将名称项从WINS数据库中删除。然而,静态WINS名称项不会到期,因此,不需要在WINS服务器数据库中更新。
WINS数据库中项的默认“更新间隔”为六天。因为在过了50%的TTL时间值时,WINS客户将尝试更新注册,所以大多数WINS客户每隔三天更新一次。在此时间间隔结束之前必须刷新名称,否则系统会将其释放。WINS客户通过将名称刷新请求发送到WINS服务器来刷新其名称,如图2所示。
图2
客户(HOST-C)负责在“更新间隔”到期之前刷新自己的名称。如果WINS服务器(WINS-A)没有响应刷新请求,客户(HOST-C)可以增加名称刷新频率。
【要点】:
•在大多数情况下,默认值就是相应的“更新间隔”。无论何时使用多个WINS服务器,都应该为所有服务器复制伙伴设置相同的“更新间隔”。
•调整
“
更新间隔
”
不当会影响系统和网络的性能。
本文转自王达博客51CTO博客,原文链接http://blog.51cto.com/winda/11234如需转载请自行联系原作者
茶乡浪子