Windows工作组环境是中小型企业中最常见的网络环境。而网上邻居方式是最常使用的网络共享方式。由于众多windows版本的存在且不同版本对网上邻居的处理稍有不同,导致了在混合网络环境中使用网上邻居常会出现各种问题。因此网上有大量的文章探论各种各样的网上邻居使用故障现象与解决办法。但由于大部分文章仅介绍了故障表现,而引起同一故障表现的原因却很可能不同,因此介绍的这些解决方法常常缺乏通用性。本文之所以称为终极指南在于本文试图从网上邻居的工作原理上解析可能出现的各种访问故障,进而给出建议措施。即使你出现的故障在文中并未提及,也可以根据其工作原理分析故障的生成原因并加以排除。
  网上邻居共享的工作原理
  网上邻居的工作模式是一个典型的客户端/服务器工作模型,现在,回想一下访问网络邻居的过程,首先,点击网络邻居图标,打开网上邻居列表,其次,点击打开目标服务器图标,列出目标服务器上的共享资源,接下来,点击需要的共享资源图标,进行需要的操作(这些操作包括列出内容,增加,修改或删除内容等。
  进一步分析一下这个过程,当点开网上邻居列表时,这个阶断的实质是列出一个网上的可以访问的服务器的名字列表。在点击一台具体的共享服务器时,这时先发生了一个名字解析过程,我们的电脑会尝试解析名字列表中的这个名称,并尝试进行连接。在连接到该服务器后,我们可以根据服务器的安全设置对服务器上的共享资源进行允许的操作。
  下面让我们一步步的来分析这些过程。
  取得网络资源列表
  当我们点击网上邻居图标时,我们是如何获得当前网络上可以访问的服务器列表的呢?在一个有域的windows网络环境下,我们也可以通过活动目录服务来取得这个列表。而在工作组环境中这主要依靠windows的浏览服务。
  关于windows浏览服务,网上有不少文章,这里就不再详细介绍。这里我们需要知道的是,浏览服务为各客户机提供的资源列表并不是实时的,也不一定是全局一致的,它依靠每12分钟一次的轮询来刷新和同步这个列表,因此,这个列表经常与实际情况不一致。下面两张图分别例示了两种情况,在这两种情况下,网络环境的变动分别需要48分钟和72分钟才能反映到全网的全部浏览列表。

这张图里新加入的子网A的服务器需要经过48分钟才会出现在子网C的浏览列表中

在这张图里,子网A中服务器离线的消息在最坏情况下(也即列表刚刚刷新后发生了离线),需要72分钟后才会从子网C的浏览列表中消失。
  基于浏览服务的工作机理导致的浏览列表与实际情况不一致的现象非常常见,这也是很多人提到的使用网上邻居时遇到的一类问题,比如机器已经关了还在列表中,我的机器怎么在列表里找不到。只要你使用浏览服务,就无法根除这个问题。
网上邻居的名称解析
  当我们点击网络邻居列表里的一台机器时,这时首先会发生一个名称解析过程。
  谈起名称解析,我们常会想到DNS,事实上,网上邻居的名称解析也是可以使用DNS系统的。不过前提是你需要架设局域网DNS服务器对局域网的各机器名进行解析。
  如果你没有安装局域网DNS,你也可以使用NETBIOS的名字服务还对机器名进行解析,NETBT(TCP/IP上的NETBIOS)协议也可以将一台NETBIOS机器名解析为IP地址,可以用nbtstat -c命令查看本机缓存的NETBIOS名称和IP地址的映射表。也可以使用nbtstat –r 命令来利用NETNBT广播来将指定NETBIOS名称解析为IP地址。由于广播方式是无法跨子网的,所以当NETBIOS要求解析跨子网的名称时,必需要正确设置WINS服务器来进行跨网络的NETBIOS名称解析。
  除以上方式外,网上邻居还允许通过Lmhost文件来进行名字解析。
  除了基于TCP/IP的NETBT和DNS,由于网上邻居也允许运行NETBEUI和IPX/SPX等其它协议上,因此对机器名的解析不一定非局限为解析成IP地址,比如NETBEUI协议数据包仅包含二层链跑层地址,因此不可路由也无法跨越子网,但在小型网络中使用NETBEUI协议不但可以提高效率,而且它的工作不受防火墙设置的影响,免去了设置防火墙的麻烦。
  当我们在访问网上邻居时遇到找不到服务器的提示而你肯定服务器目前是在线的,在排除了网络物理故障的原因后,你首先应该考虑的是这是否是名称解析的问题,检查一下网上邻居名称解析相关的各种设置是否正确。
  访问服务器
  在对服务器进行了正确的名称解析后,我们开始了实质性的阶段,登录共享服务器。而这个阶段也是最复杂的。我们看一下这个网络访问过程流程图。

图上邻居访问流程图
  一台客户机要访问服务器,在找到目标服务器后,它首先要确定目标服务器上的协议,端口,组件能是否齐备,服务是否启动,在一切都合乎要求后,开始用户的身分验证过程,如果顺利通过身份验证,服务器会检查本地的安全策略与援权,看本次访问是否允许,如果允许,会进一步检查用户希望访问的共享资源的权限设置是否允许用户进行想要的操作,在通过这一系列检查后,客户机才能最终访问到目标资源。
  下面让我们依次解析这些过程:
网络共享服务的协议和端口
  作为网上邻居基础的微软文件和打印服务可以基于多种不同的协议,它们使用不同的端口。
  在较早的WIN98/95系统下面,主要使用NETBT(TCP/IP上的NETBIOS)协议来完成相关功能,使用137,138和139端口,同时完成包括列表维护,名称解析和文件传输等多种功能,而2000后,网络共享服务也可以通过TCP/IP上的SMB直接承载实现,使用445端口。 名称解析也可以通过DNS系统来实现。这样一方面可以省略NETBIOS层,提高工作效率,另一方面免除了NETBIOS名称解析引起的广播,减小了网络负荷。但是如果网络中存在一些老版本的windows系统或者没有局域网DNS服务器,为了名字解析的顺利进行不得不启用NETBT,否则就只能通过IP地址访问网上邻居。
  下图列出了文件共享服务支持的各种网络协议。
  为了提供文件共享服务,服务器上必须安装以下网络协议和服务,它们之间存在着对应关系如下图:
点击放大此图片
  从图中可以看出,网上邻居服务(Computer Browser服务)需要依存两个服务——Workstation(工作站)服务与Server(服务器)服务,Workstation服务主要用于访问其它服务器上的共享资源,它对应网络组件中的windows网络客户端,而Server服务主要提供共享本机资源的功能,对应微软文件和打印机共享组件。
  这些协议和组件的正常安装与设置是网上邻居正常工作的基础。
  关于网上邻居功能有一个需要说明问题就是隐藏共享IPC$的问题。我们访问网上邻居能够看到该服务器上的共享资源列表是因为在安装了微软文件和打印机共享组件后,会创建一个名为IPC$的隐藏共享,连接的计算机通过查看这个隐含共享来取得服务器上的共享资源列表。如果删除了这个共享浏览者就无法取得服务器上的共享资源列表,当然也无法正常访问共享资源了
 用户身份认证
  当客户机发现服务器上的服务与协议都安装正确以后,就开始了用户身份认证过程。也就是确定客户机以什么身份在服务器上进行操作。
  关于网上邻居访问过程的身份认证有以下两个原则:
  首先是客户机优先以当前登录账户的信息来提交认证信息,例如客户机当前的登录用户为test,密码为test,如果这时它访问网上邻居,它用以此为用户名和密码来提交验证信息。
  其次,由服务器决定是否将客户机用户身份映射为guest。
  如果服务器的本地安全策略——安全选项中“网络访问:本地账户的共享和安全模式”设为仅来宾或者服务器启用了简单文件共享,网络访问的本地用户将以来宾身份验证,这时如果guest账户未被禁用,则直接进入下一步本地安全策略验证阶段,如果服务器启用了简单文件共享却没有启用guest账户,就会弹出如下对话框,用户名为灰色无法更改,密码无论输入什么都无效。
  如果服务器上禁用了简单文件共享,或者服务器的本地安全策略——安全选项中的“网络访问:本地账户的共享和安全模式”设为经典,本地账户模式,当客户机连接服务器时,首先以客户机的登录名和密码在服务器上进行验证,如果恰好服务器上存在同名且同密码的账户而且该帐户没有被禁用,客户机将以此用户的身份进入下一本地安全策略的验证阶段,如果服务器上不存在此同名同密码的账户,而服务器上的guest账户未被禁用,客户机将以guest账户的身分直接进入下一阶段的安全策略验证阶段。如果服务器上禁用了guest账户,会弹出要求输入用户名和密码的对话框如下,这时如果提供了服务器上存在的用户名和密码,则会以此用户的身份进入下一阶段安全策略检查过程。
  这里存在一个很常见的误解,在判断guest账户是否启用时,很多用户是查看控制面板里的用户账户(如下图A),在那里看guest账户是否为启用状态。如果显示来宾账户没有启用就认为guest被禁用,而实际判断guest是否被禁用应该是观察计算机管理中的本地用户和组里guest用户的状态,如下图B。而在控制面板中的用户账户中启用guest账户的含义是允许guest从本地登录(出现在登录的欢迎屏幕上)。在用户帐户中禁用guest不会禁用本地用户guest帐户。
   
 图a
 图b
  查看guest 启用状态的最简单方法是用命令net user guest查看,看输出中“帐户启用”一栏的信息。
 本地安全策略审核
  当用户通过了认证,就进入了本地安全策略审核阶段。在本地安全策略中,与网上邻居相关的最重要的三条策略是以下三个:
  一是本地策略——安全选项中“账户:使用空白密码的本地账户只允许进行控制台登录”。
  二是本地策略——用户权利指派中的“拒绝从网络访问这台计算机”
  三是本地策略——用户权利指派中的“从网络访问这台计算机”。
  当用户是以guest账号进入本地安全策略审核中,主要检查第二条与第三条策略(因为guest本身就是无密码的),检查过程如下图:
  当用户以非guest用户身份进入安全策略审核时,三条策略都将检查到,检查过程如下:
  发生在策略审核过程中的登录问题常会产生以下这类错误提示:
  除以上提到的三个最重要影响网络邻居访问的安全策略外,还有以下一些安全策略对网上邻居的访问过程产生影响。
  本地策略——安全选项中的“网络访问:本地账户的共享和安全模式”,这等效于是否启用简单文件共享。
  本地策略——安全选项中的“网络访问:不允许SAN账户和共享的匿名枚举”。这使客户机将无法在不登录的情况下取得服务器上的共享资源列表,这时,要想访问服务器上共享资源除非预先知道想访问的共享资源名称,手动输入资源的完整路径向这种\\server\sharename
  本地策略——安全选项中的“网络安全:LAN Manager身份验证级别“。Windows 2000以上系统可以使用更高的安全级别,但2000以下系统会无法识别发送的安全凭证。出现如下所示的出错提示。
权限检查
  在通过了本地安全策略检查后,服务器还要检查用户想访问的共享文件夹的共享权限与NTFS权限是否允许当前登录账户访问。检查过程如下图:
  这二者分别在文件夹属性的共享和安全标签页中设置。当权限检查顺利通过后,用户才能正常访问目标共享资源。如果在网上邻居访问中可以列出对方机器上的共享目录列表,但进入目录时遇到拒绝访问提示,一般都是在权限检查这一步骡遇到了问题。
  在winxp系统中,如果使用的是简单文件共享,在目录属性页中是没有用于设置NTFS权限的“安全”标签页的。NTFS权限都采用默认设置。而如果禁用了简单文件共享,在文件夹的属性页中会多出“安全”标签,在此可以对目录的NTFS权限进行定制(如下图)。
  Winxp下的一个常见问题是用户一段时间禁用了简单文件共享并对共享目录的NTFS权限进行了设置,然后又恢复了简单文件共享。这时虽然再也看不到安全标签并设置NTFS权限,但已经设置的NTFS权限是依然存在的。如果此时共享目录的NTFS权限设置禁止guest访问,即使其它设置完全正确,目标文件夹也无法访问,而且由于在简单文件共享模式下看不到共享目录的NTFS权限状态,常让一些初级用户对故障原因莫名所以。
  网上邻居共享的故障排查案例
  理解了网上邻居访问过程的工作原理,如果在使用网上邻居功能时出现故障,就可以分析问题原因找到解决办法。下面我们来看几个案例.
  故障现象:
  两台winxp机器,用户只建立了administrator用户,都没有设置密码,以\\IP地址形式访问时不提示用户名和密码就显示拒绝登录.两台机都未使用简单文件共享.
  故障分析:
  不提示用户名和密码,说明已经通过了用户认证阶段.因为未使用简单文件共享.登录时是以客户机的登录帐户进行认证的,也就是以administrator的身份登录,但由于服务器的administrator无密码,根据默认安全策略无密码帐户只允许进行控制台登录,因此收到拒绝登录的提示.
  故障解决:
  启用guest帐户,为两机启用简单文件共享,然后无需密码即可访问.(注意,在启用简单文件共享前先要检查需要共享的目录的NTFS权限是否允许guest访问.
  故障现象:
  服务器采用简单文件共享,当以\\ipadress\C$形式访问服务器上的C盘时,不要求输入用户名和密码就直接提示权限不够.
  故障分析:
  服务器上启用了简单文件共享,所有访问用户都被映射为guest,而guest对C$这个共享是无共享访问权的,因此提示权限不足.
  故障解决:
  在服务器上禁用简单文件共享,使用net use 命令的/user选项指定访问时使用的有权限的登录用户和密码(例如administrator).
  从以上两例中可以看出解决网上邻居访问故障时的一些思路.在实际故障排查过程中,网络故障的提示信息是我们判断问题所在阶段的一个重要提示,前面图例中的一些错误提示框分别会产生在网络访问过程的不同阶段,根据这些提示我们就可以大致确定问题的范围并做出针对性的调整来解决问题.