公司的局域网有些机器开机时出现“网络上有重名”的问题,能ping通内网其他机器,连接外网也是正常的,无法修改计算机名。我的虚拟机中也出现了这个问题。
解决办法:
1. 在此XP计算机上打开网络连接属性,然后打开网卡的属性->TCP/IP属性->高级。
2. 在”WINS”选项卡下,将不必要的WINS地址移除。
3. 取消启用LMHOSTS查找的选项。
4. 将NetBIOS设置设为禁用。(NetBIOS为网上邻居需用,若禁用,则网上邻居工作组查看不到任何计算机)
NetBIOS名
1.1 定义计算机名(NetBIOS名)
NetBIOS是80年代末为了利用IBMPc构建局域网而出现的一种MS-DOS程序的高级语言接口。为了利用网络硬件和软件将这些计算机连接在一起组成局域网,微软和其它供应商利用NetBIOS接口来设计它们的网络组件和程序。NetBIOS接口利用最多为16个字符的名称来标识每一个网络资源。
在一个网络中NetBIOS名是唯一的。在计算机启动、服务被激活、用户登录到网络时,NetBIOS名将被动态的注册到数据库中。NetBIOS可以以独立名称的形式注册,也可以以组名称的形式注册。以单机名注册时要有一个IP地址与其相对应,如以组名称注册时会有多个IP地址与其对应。
在Windows2000发布前的所有基于MS-DOS和Windows的操作系统都需要使用NetBIOS名称接口以便网络可以正常工作。伴随着Windows2000的发布,网络中的计算机不再需要NetBIOS名称接口的支持。如在Windows2000和一些UNIX版本的网络中它们只要求客户机支持DNS使用就可以了,不再需要NetBIOS名。但为了与以前版本的网络操作系统结合使用,微软在Windows2000中仍然支持NetBIOS名,以便与以前版本的操作系统协同使用,微软通过两方面实现对NetBIOS名的支持:<BR> 所有使用Windows2000的客户机在默认情况下都支持利用客户端的WINS服务注册和解析NetBIOS名。
Windows2000服务器继续提供一个高效的WINS服务器,用它来管理网络中的NetBIOS名。定义NetBIOS名称
NetBIOS名称包含16字节。前15个字节是由用户指定的,用它来表示:<BR>§网络上的单个用户或计算机<BR>§网络上的一组用户或计算机
在NetBIOS名中的第16个字符作为名称的后缀,用于识别名称及显示注册名称的信息。NetBIOS名可以被设置为独立名称或组名称。
在使用独立名称时,是将网络信息发送给一台计算机,而使用组名称是将网络信息同时发送给多台计算机。
在WindowsNT早期版本中,所有的网络服务都是利用NetBIOS名注册的。而在Windows2000中,登录网络及其它的网络服务都是在
dNS中进行注册的。
1.2 NetBIOS名的解析
NetBIOS名的解析就是将计算机的NetBIOS名成功的与IP地址进行映射的过程。从上面用户已经知道NetBIOS名是用来识别网络上NetBIOS资源由16个字符组成的地址。让用户通过下面这个例子了解NetBIOS名是如何解析的。
一台Windows2000的计算机(CORPSERVER)中运行的文件与打印共享服务的NetBIOS名的解析过程。当计算机启动时文件与打印共享服务利用计算机名在网络上注册一个独立NetBIOS名。这个NetBIOS名前15位字符是计算机名,第16位字符为0x20。如果计算机名不够15个字符,那么利用空格补齐。(即:CORPSERVER[20])。当用户试图与这台计算机的共享文件夹建立通信时必须指明它的文件与打印共享的NetBIOS名。在建立文件与打印共享连接前,首先要建立TCP连接,为了建立TCP连接首先要将NetBIOS名(即:CORPSERVER[20])解析成IP地址。WINS客户机主要利用广播、LMHOSTS文件、WINS服务器三种方式的组合解决NetBIOS名解析的问题,根据组合方式的不同分成了四种NetBIOSnode模式,见下表:
Node模式
描述
B-node用户利用广播NetBIOS名查询的方法实现名称的注册和解析;在广播失败后,查询Lmhosts文件,寻找相应的地址
P-node(peer-peer)
利用点对点的方式直接向WINS服务器查询相应NetBIOS名的IP地址。M-node(mixed)
M-node是把B-node和P-node组合在一起。默认情况下使用广播的方式,如果失败,再向WINS服务器进行查询。H-node(hybrid)
H-node是把B-node和P-node组合在一起。默认情况下向WINS服务器进行查询,如果失败,再使用广播的方式。如果两种方法都失败,则查询Lmhosts文件,寻找相应的地址。运行Windows2000的计算机默认使用B-node模式,当为它们设置了WINS服务器后,改用H-node模式。Windows2000也能使用本地数据库文件Lmhosts解析NetBIOS名。此文件存放在:SystemRoot/System32/Drivers/Etc文件夹中。
用户一定要为基于活动目录的Windows2000计算机设置一个WINS服务器的IP地址,以便它们可以与无法使用活动目录的WindowsNT、Windows2000,Windows95、Windows98计算机进行通信。
LMHOSTS查询
LMHOSTS查询的用处是用来进行NETBIOS名静态解析的。将NETBIOS名和IP地址对应起来,功能类似于DNS,只不过DNS是将域名/主机名和IP对应。
LMHOSTS 文件是个纯文本文件,微软提供了一个示例程序 LMHOSTS.SAM,位于 C:/WinNT/System32/Drivers/Etc 目录下。如果我们需要启用 LMHOSTS 文件查询(至于什么时候会用到这种解析方式,我们在下面会讲到),则应该将其改名为 LMHOSTS,当然推荐的方法是制作副本(即另存为 LMHOSTS),这样可免除将原文件失手改错而不得不从安装光盘里解压还原出来的麻烦。下面是LMHOSTS 文件的部分内容:
#
# The following example illustrates all of these extensions:
#
# 102.54.94.97 rhino #PRE #DOM:networking #net group's DC
# 102.54.94.102 "appname /0x14" #special app server
# 102.54.94.123 popular #PRE #source server
# 102.54.94.117 localsrv #PRE #needed for the include
#
# #BEGIN_ALTERNATE
# #INCLUDE //localsrv/public/lmhosts
# #INCLUDE //rhino/public/lmhosts
# #END_ALTERNATE
#
# end of this file.
由上面的示例我们可以看出,LMHOSTS 文件跟我们在前面已经接触过的 HOSTS 文件的格式一样,当然其规则也一样,比如:
#字符是用来注释的;
IP 地址必须放在一行的第一栏,地址和主机名之间必须有空格;
计算机名称最长为 16 个字符,但是只能输入 15 个。
但是与 HOSTS 不同的是,LMHOSTS 文件中可以指定执行某种特殊功能的特定的命令。它们也是用 # 标记的,但如果看到有下面的特殊字符串,则表明其为命令字:
#PRE——这个命令放在 IP 地址和名称后面,表示当系统启动时,先将这个地址预先载入(Preload)到 Cache(内存高速缓存)中。查询时,系统先从 Cache 中开始,如果失败,再利用广播,再失败,才到本 LMHOSTS 文件中顺序读取。
#DOM:domain_name——这个命令放在计算机 NetBIOS 名字之后,表明它是一个域控制器(Domain Controller),这里 domani_name 是域名,表明该控制器属于哪一个域。
#INCLUDE ——这个命令表明将 filename 所指向的另一个 LMHOSTS 文件加入到本文件中,系统从该文件中读取 IP 地址和 NetBIOS 名字。Heatch 记得当年应付等级考试啃 C 时就遇到过相同的格式,当然在两年前风行一时的 config.sys 多重启动配置时也有相似的例子[Include],即使现在我们用 DreamWaver 做网页不是也还是有 Server-Side Include 吗,说这么多只是想证明它的好处——集中管理 LMHOSTS 文件,即可以将所有用户共享的 LMHOSTS 文件放到服务器上,每个用户再利用 #INCLUDE 命令把它添加到自己的 LMHOSTS 文件中。
#BEGIN_ALTERNATE 和 #END_ALTERNATE 命令必须配套使用,它们的作用是可以在一个 LMHOSTS 文件中指定多个 #INCLUDE 命令,即是说,如果我们有两个以上的域控制器,那么我们就可以 INCLUDE 其上的的 LMHOSTS 文件,一旦某个控制器“牺牲”,可立即用别的域控制器来替代。
/0xnn——这里的 /0xnn 命令是用来在 LMHOSTS 文件中指定包含非打印字符(Non-Printable)的 NetBIOS 名字,它们必须用引号括起来。正如前面的《关于 WINS(二)》所讲,这些非打印字符只用于特殊的设备名称,并且只能放在计算机名称后面第16个字符的位置(我的计算机名称没有15个字符那么长啊——按空格键嘛),如示例中的102.54.94.102 "appname /0x14"
关于 Preload 的特别说明:
1、一个 LMHOSTS 文件中最多只允许 Preload 100 个 IP 地址和计算机名称;
2、#INCLUDE 命令所指向的文件中的所有项都必须加上 #PRE 命令;
3、修改注册表增加预载数目:主键 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Netbt/Parameters,新建字符串值 MaxPreLoads,输入自己想要的数目。
LMHOSTS 文件的应用场合是没有 WINS 服务器的网络环境,引入 LMHOSTS 文件的目的是用来解决广播方式无法跨越路由器的局限的,LMHOSTS 文件与广播方式相辅相行实现网段内外的全通信。这里我们再来看一下它们的的工作进程:
1、系统启动时将 LMHOSTS 文件中被设为#PRE的地址和机器名预载到内存中;
2、客户端发出查询请求时,先在 Cache 中检查是否已存在目的 IP 地址;
3、找到了自不用说,如果在 Cache 中没有找到,系统改用广播方式再次查找;
4、这次找到了也自不用说,如果广播查询还是没有找到,就得用到 LMHOSTS 文件了;
5、找到啦,好!把它也添加到 Cache 中保存起来;
那么 LMHOSTS 文件的跨域操作又是如何实现的呢?还记得三天前的第一讲吗?我们说到了一个 #DOM:Domain_Name 命令。假定我们这里有两个域:Lanhome01和Lanhome02,其 IP 地址分别为 192.168.0.1 和 192.168.1.10,计算机名分别为 Heatch01 和 Heatch02,现在有一台域 Lanhome01 的工作站 cxy01 想要登录到域 Lanhome02,但我们在网络上没有运行 WINS 服务。如果仅通过广播方式,cxy01无法被 Lanhome02 域控制器审核并验证身份。这里只需在 LMHOSTS 文件添加如下一行即可:
192.168.1.10 Heatch02 #PRE #DOM:Lanhome02