全部博文(434)
分类: WINDOWS
2011-02-14 10:06:41
如下图所示,是 NetBios名称的相关信息。XP是本级的名字,后面Status状态为Registered。就表示这个主机名已经在网络上进行了注册,后续其他的主 机不能够使用这个主机名字了。而Type处显示的是Unique(唯一),就表示这个主机名字在网络上是唯一的。如此的话网络设备就可以把这个唯一的主机 名与一个唯一的IP地址对应。
这个把主机名跟IP地址对应的过程就叫做名称解析。在同一个网段内,用户通过主机名来访问网络上的主机是没有问题的。但是跨网段的话,利用这种方式就会有一定的困难。如客户段是微软操作系统的话,则在进行这个主机名解析的时候,采用的是b-node的方式根据主机名来查找其他计算机的IP地址,这是一种广播信息的方式。但是默认情况下大部分的路由器都会隔离广播信息,即不会将广播信息发送到其他网段内,以提高网络性能。所有用户主机如果与他要访问的主机不在同一个网段的话,就可能无法把主机名转换为IP地址,用户就无法通过主机名来访问另一个网段的主机。遇到这种情况的话,该如何处理呢?
一、LMHOSTS文件的用途
如果客户段无法从网络设备中得到某个主机名对应的IP地址的话,则此时客户端往往还不会这么轻易放弃。他们会去查询本机内的LMHOSTS文件,看看这 文件中是否有主机名对应的IP地址。LMHOSTS文件是一个纯文本文件,可以利用记事本等工具来编辑这个文件。网络管理员需要注意的是,与此类似的还有 一个骄傲作HOSTS的文件。其作用跟LMHOSTS文件类似,但是仍然有比较大的差别。光从访问顺序来分析就有很大的不同。通常情况下在域名解析的时 候,客户端往往是先查看HOSTS文件,看看有没有对应的纪录。如果没有的话则再通过网络上的DNS等域名解析设备进行解析。可见LMHOSTS文件是客 户端进行主机名解析的最后一招。如果这一招也不行的话,那么客户端就会显示找不到这台网络主机。
二、LMHOSTS文件的编写规则
LMHOSTS文件其实就是一个IP地址与NETBIOS主机名字之间的一个对应关系,所以其内容比较简单。但是由于这是一个网络参数的配置文件,为此在格式上会有比较严格的要求。下面几条规则的话,网络管理员需要牢记。
一是IP地址与主机名的话有顺序关系,不能够前后颠倒。通常情况下,计算机的IP地址应该放置在第一列。第二列才是主机名称。如果弄乱这个顺序的话,如第一列写为主机名,第二列写为IP地址,则客户端将无法识别这个文件。
二是需要注意如果在计算机中包含特殊符号的处理。在计算机名字定义的时候,往往没有严格的要求。如可以使用大写字母、小写字母,甚至利用空格符号来定义 计算机名字。如XP xp这个名字也是很法的。但是对于这些含有空格的主机名字,在LMHOSTS文件中需要进行特殊的处理。通常情况下,如果主机名字中含有空格,则需要利用 双引号把这个主机名字包含起来,既“XP xp”。注意这里面有多少个空格一个都不能少。很显然这么处理会比较麻烦。为此在给电脑起名字的时候,最好不要使用特殊字符,也不要采用空格等等。
三、LMHOSTS文件在网络中的应用
笔者认为,LMHOSTS文件是HOSTS文件与DNS服务器的一个很好的补充。通常情况下,如果在局域网中没有部署WINS服务器,或者存在多网段的话,则采用LMHOSTS文件无疑是一个不错的选择。
为什么这么说呢?其实笔者只要举一个例子就可以说明这个问题。如现在有个客户端需要访问笔者这台主机名字为XP的电脑。那么客户端会如何处理呢?
1、由于用户不知道主机名字为XP电脑的IP地址,只知道主机名字。为此用户会输入主机名。然后客户端操作系统会负责对这个名字进行解析。当客户端需要 把某个主机名字解析为IP地址的话,则其首先会检查NetBios名称缓存内是否已经存在这个IP地址与主机名字的对应关系。如果存在的话,则直接采用这 个纪录信息;如果不存在的话,则会改用广播方式。
2、若通过广播方式仍然找不到主机名字与IP地址的对应关系的话,则就会查询LMHOSTS文件。如果找到了,就会采用这条纪录,并把这条纪录信息保存到NetBios的缓存中,以方便下次使用。如果仍然找不到对应的纪录的话,那么最后客户端就会提示错误信息。
从上面的分析中可以看出,如果企业网络环境中存在着多网段的情况时,通过广播的方式进行主机名称解析行不通。此时LMHOSTS文件无疑是解决这个主机名解析问题的比较好的手段。网络管理员只需要把主机的名称与IP地址的对应关系在这个文件中定义即可。
四、LMHOSTS文件的使用要点
1、让一些常用的对应关系在系统启动时就写入NETBIOS缓存。从上面的分析中,网络管理员可以发现在客户端启动的时候,会在内存中划分一个小区域用 来保存NETBIOS信息。这个区域就叫做NETBIOS缓存。通常情况下,客户端在进行主机名解析的时候,往往会先从NETBIOS缓存中去查找信息。 如果有相关纪录的话就会直接采用。而不用进行后续的尝试。为此对于一些常用的对应关系,那么把他们的纪录在系统启动的时候就加入到这个缓存中,无疑可以提 高主机名解析的速度,提高网络访问的效率。如网络管理员在网络中部署了一台文件服务器,名字叫做Share。为了其安全起 见,把这个服务器放置在另外一个网段中。为了提高文件服务器的访问速度,应该让这个主机名与IP地址的对应关系在客户端启动的时候,就自动加入到 NETBIOS缓存中。如此的话,可以明显提高客户段访问服务器的效率。虽然通过第一次访问后,客户段也会把这个信息纪录到NETBIOS缓存中,但是客 户段下次重新启动后,这个信息就会从缓存中清除。故下次访问时,又需要经历一个主机名解析的过程。为此笔者在日常管理中,往往把这些文件服务器、打印服务器等 常用的主机名字与IP地址的对应关系,加入到LMHOSTS文件中,并让其在客户端启动的时候,就自动加入到缓存中。要实现这个目的,其实很简单。只需要 在对应的纪录后面,加入#PRE即可。客户端在启动的时候,发现LMHOSTS文件中有带#PRE的纪录,就会直接把其加入到NETBIOS的缓存中。
2、实现LMHOSTS容错功能。如果客户端的这个文件被意外删除或者不明原因的损坏时,客户段就无法正常访问这个文件。此时该如何处理呢?为此网络管 理员就会想到能否为这个文件提供一些容错的功能。当客户端上的这个文件损坏时,客户端操作系统能够很快的从另外一个文件中获取所需要的信息。在微软操作系 统下的LMHOSTS文件,其实已经提供了类似的容错功能。如在这个文件中,可以加入#INCLUDE关键字,后面跟上路径已经文件名字,即可以为其提供 容错功能。如果本机中的LMHOSTS文件无法访问或者找不到对应纪录的话,则客户端会去访问这个文件。其实这个关键字的作用是系统会自动去读取这个路径 指定文件中的信息,并把这些信息加入到本机的LMHOSTS文件中。在使用这个容错措施的时候需要注意,#符号必须加上。一般来说#符号后面的内容表示注 释,没有实际的意义。但是如果#符号后面加上了一些特殊的关键字,则对于操作系统来说就会有特殊的含义。如上面提到的#PRE,就是指示操作系统在启动的 时候,需要将这一行纪录信息加入到NETBIOS缓存中。另外这个备用的LMHOSTS文件可以在本机上的其他位置,也可以在网络上的其它主机中。同时网 络管理员还可以部署多个备用的LMHOSTS文件。不过话又说回来,LMHOSTS文件在于精而不在于多。出于容错的需要,一般指定一个备用的 LMHOSTS文件即可。
LMHOSTS 文件是个纯文本文件,微软提供了一个示例程序 LMHOSTS.SAM,
位于 C:\WinNT\System32\Drivers\Etc 目录下。如果我们需要启用 LMHOSTS 文件查询(至于什么时候会用到这种解析方式,我们在下面会讲到),则应该将其改名为 LMHOSTS,当然推荐的方法是制作副本(即另存为 LMHOSTS),这样可免除将原文件失手改错而不得不从安装光盘里解压还原出来的麻烦。下面是“蓝网实验室”NT服务器中 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 个(为什么?回去看看《关于 WINS(二)》吧^_^)。
但是与 HOSTS 不同的是,LMHOSTS 文件中可以指定执行某种特殊功能的特定的命令。它们也是用 # 标记的,但如果看到有下面的特殊字符串,则表明其为命令字:
#PRE——这个命令放在 IP 地址和名称后面,表示当系统启动时,先将这个地址预先载入(Preload)到 Cache(内存高速缓存)中。查询时,系统先从 Cache 中开始,如果失败,再利用广播,再失败,才到本 LMHOSTS 文件中顺序读取。
#DOM:domain_name——这个命令放在计算机 NetBIOS 名字之后,表明它是一个域控制器(Domain Controller),这里 domani_name 是域名,表明该控制器属于哪一个域。
#INCLUDE
#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 地址和计算机名称(我偏要输入 101 个怎么着!——怎么着?多的一个忽略不计!);
2、#INCLUDE 命令所指向的文件中的所有项都必须加上 #PRE 命令(我偏不加又怎么着!——怎么着?忽略不计);
3、修改注册表增加预载数目:主键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netbt\Parameters,新建字符串值 MaxPreLoads,输入自己想要的数目。