说到“网上邻居”,相信很多人都很熟悉。操作系统安装完毕后,桌面上仅有的几个图标中就包含了“网上邻居”。
但是,要说起“网上邻居”的工作机制,可能大家就不太清楚了。
要说“网上邻居”的工作机制,需要联系一下生活中的例子:比如我,要拜访一个远方的朋友——A,我要去他的家里,那么应该怎么样做?答案是先找到A的家,然后再确定看看A让不让我进他的家里。不要认为这是笑话,“网上邻居”的工作机制就是这样的。
在一个局域网中,只要双击桌面的“网上邻居”,就能看到所在网络中的所有用户,这一切似乎都顺理成章。可你有否想过:Windows怎么知道这些电脑叫什么名字、在什么地方?它是如何获得它们的位置的?
Windows 2000开始,通过“网上邻居”进行的访问实际上是通过browser service(浏览服务)来进行的,下面就浏览服务的几个关键地方向大家讲解一下。
一、浏览列表
浏览列表是浏览服务的关键部分。通过这个列表,基于Windows的电脑才能发现处于网络上的电脑和服务资源,浏览列表像一个地址簿,它告诉你的电脑在哪里有资源。你的电脑通过这个列表中的信息将电脑名称解析成IP地址,提供给用户来进行访问。
那么,浏览列表是从哪里来的呢?正确答案是――浏览列表是通过广播查询浏览服务器,由浏览服务器提供的。
很多时候网络中的计算机并不能正确更新浏览列表。当一台计算机正常关机时,它会向网络发出广播宣告,使浏览主控服务器及时将它从浏览列表中删除;而非正常关机后,浏览列表里仍会把该条目保持很长一段时间,这可能造成我们仍能在网络邻居里看到它而访问不了。大家可能会奇怪,我们的网络中哪来的浏览服务器?
二、浏览服务器
浏览服务器是通过选举选出来的。选举的主要条件是操作系统,实验中发现windows 2000 professional 的优先级是比windows  xp高的。当XP先启动时它自己是浏览服务器,但当2000也启动时,2000就会发出选举请求,并最终在选举中把浏览服务器的身份抢过来。其他的条件我们就不再作探究了,反正结果就是选出主浏览服务器和备份浏览服务器。一个工作组中主浏览服务器只有一个,备份浏览服务器可以有多个,担任主浏览服务器的计算机可以同时担任备份浏览服务器。
当一个台电脑启动的时候,如果它的打印和文件共享功能是打开的,它就会在网络中发出广播包登记它自己,主浏览服务器收到广播后会把相关信息加入浏览列表中,并每隔一段周期进行验证,于是我们就会看到这个新启动的电脑了。
初次进行时,这个周期是1分钟、2分钟、4分钟和8分钟,最后到12分钟,而之后每12分钟客户机都会发一个通知,通知主浏览服务器器说我还在呢。如果经过三个周期(36分钟),主浏览器都没有听到我还在呢的通知,那么它就会把这个客户机的名字从浏览列表中删除掉,网上邻居中就再也不会有这个用户了。
如果网络较大,所有的事情都让主浏览服务器干岂不是会较大影响这台计算机性能,所以我们查询的浏览列表并不是从主浏览服务器那里来的,而是从备份服务器那里来的。主浏览服务器会把定期把浏览列表发送到备份浏览服务器以让浏览列表得到更新。
总之,网上邻居访问方法的过程是:客户机先广播(UDP)查询备份浏览服务器列表,主浏览服务器告之,要注意告知的只是计算机名。客户机用广播(UDP)查询对计算机名的IP地址,对同一个计算机名广播三次然后等待回答,无回答再广播下一个备份浏览服务器的计算机名(如果还有下一个的话)。成功获得IP后,客户机将建立一条到备份浏览服务器139端口的TCP连接,然后获得这个工作组中的其他计算机的名字。当你打开某台计算机时,客户机会广播(UDP)查询这台计算机的IP,如果得不到回答,连接将是错误的;如果得到回答,那么就进入连接的建立阶段了。
上面的这些过程使用的是netbios协议。
三、NETBIOS协议
Netbois(网络基本输入/输出系统)最初由IBM,Sytek作为API开发,使用户软件能使用局域网的资源。自从诞生,Netbois成为许多其他网络应用程序的基础。严格意义上,Netbios是接入网络服务的接口标准。
NBT(netbios over TCP/IP)就是建立在TCP/IP传送协议之上的NETBIOS接口,我们先将它与Nbf进行一番对比。Nbf指的是NETBIOS帧协议,以NetBEUI为基础,这可是真正的架构在链路层之上的协议,不过也因为它是在LLC(逻辑链路控制层)层上,所以无法路由。只有借助一些可路由协议(如IPIPX)才能实现跨广播域浏览。因为TCP/IP发展最为迅速,最为普及,NBT也才受到大家如此的关注,现在所有的windows系统都使用NBTNBT提供的服务可以分成三类:名称服务(UDP137端口)、数据报服务(UDP138端口)和会话服务(TCP139端口)。现在所有的windows系统都是默认支持NBT协议,至于NetBEUI就没有什么用了(好像XP系统默认已经不安装了),网上邻居访问不了也同它没有关系,不要再混为一谈。NBT才是网上邻居所用到的协议(系统默认)
1、名称服务(UDP137端口)主要用于广播解决本子网的NETBIOS名和IP地址转换的关系。因为NBT是建立在TCP/IP之上,而建立TCP/IP通讯是必须知晓双方IP地址的。但因为使用的是UDP广播,所以名称服务无法跨越路由器。
2、数据报服务(UDP138端口)提供了无连接(UDP)和面向广播的通信方式。它主要用于从主浏览服务器那里广播查询到备份浏览服务器列表。因为它使用了UDP广播,因而在跨越路由器时也会遇到与名称服务相同的问题。
3、面向连接TCP协议的会话服务(TCP139端口)用于向备份浏览服务器查询得到一个工作组的计算机列表,也可建立98系统下面网上邻居的数据传送通道。
 
说完了原理,下面来说下常见的问题以及解决方法:
Windows网上邻居互访的基本条件:
1) 双方计算机打开,且设置了网络共享资源;
2) 双方的计算机添加了 "Microsoft 网络文件和打印共享" 服务;
3) 双方都正确设置了网内IP地址,且必须在同一个网段中;
4) 双方的计算机中都关闭了防火墙,或者防火墙策略中没有阻止网上邻居访问的策略。
如果您的网上邻居有问题,请参看以下步骤:
1、网线。双机互连不使用HUB或交换机,用交叉线连接两机;如果使用HUB或者交换机,均用直连线连接至HUB或交换机,保证交换机、网卡状态灯正常。
2IP协议。WIN98及以后的机器在安装时会默认安装TCP/IP协议,WIN95需要另外安装。在网上邻居->属性 WIN9X/Me)或者网上邻居->属性->本地连接->属性(WIN2K/XP)里可以查看是否安装了TCP/IP协议。
3IP地址。在TCP/IP属性里设置IP地址、子网掩码和网关,如果有需要可以设置DNSWINS服务器地址。IP地址推荐设置:192.168.X.X,子网掩码:255.255.255.0。如果你的局域网中有DHCP服务器,选择自动获取地址即可。
验证方法:在DOS提示符下使用ping x.x.x.x(对方IP地址),如返回如下信息,说明IP设置成功:
Reply from x.x.x.x(对方IP地址):bytes=32 time<1ms TTL=128
4NetBIOS over TCP/IP。网上邻居的浏览和通讯要使用NetBIOS协议,该协议是无法被路由器转发的,因此WIN2K及以后的操作系统均提供将NetBIOS协议 封装在TCP/IP中的功能。在Win9X/Me系统中,打开网上邻居->属性可以参看是否安装了NetBIOS协议,在Win2K/XP中,打开 TCP/IP属性->高级->WINS>NetBIOS设置,选择启用TCP/IP上的NetBIOS”
验证NetBIOS名称解析:使用ping XXXX(对方机器名),如果返回如1.3中的信息,说明NetBIOS协议解析正常。
5HOST文件。如果在4中无法正确解析机器名,可以修改host文件,在WINDOWS目录中搜索HOST关键字,找到后,使用记事本打开host(有的系统为host.sam),在末尾加入如下内容:
x.x.x.x(对方的IP地址)使用Tab键跳到下一制表列XXXX(对方的机器名)存盘退出,注意,如果原文件带有.sam扩展名,要去掉扩展名,才能生效。使用与4中同样的方法验证。
6.启用打印与文件共享。在网上邻居和本地连接属性里可以看到是否安装了打印机与文件共享。
验证:如果在网上邻居中看不到自己的机器,说明你没有安装打印机与文件共享。
7、启用GUEST用户:WIN2K/XP在工作组模式下要使用Guest用户来允许网络访问,因此要启用Guest用户。打开控制 面板->用户帐户或者在管理工具->计算机管理->本地用户和组中打开Guest帐户,如果使用域管理模式,可以忽略这一步。
8、启用计算机浏览服务。WIN2K/XP要确保计算机浏览服务正常启动。打开计算机管理->服务和应用程序->服务,确保“Computer Browser”没有被停止或禁用。
9、防火墙:确保WIN XP自带的防火墙没有开启,打开本地连接属性->高级,关掉Internet连接防火墙。如果使用了第 三方的防火墙产品,参考其使用手册,确保防火墙没有禁止以下端口的通讯:UDP137UDP138TCP139TCP445(仅WIN2K 及以后的操作系统)。
10、设置共享文件夹和打印机。