本文是曲洋原创的第五篇网络知识科普文章,发表于由信息产业部(现工信部)主管的全国唯一以网络管理员为受众的《网管员世界》杂志2004年第3期第97页“进阶驿站”--“知识讲堂”栏目。
以下为杂志发表时状态,经编辑稍作修改。
(图源:《网管员世界》杂志2004年第3期封面、目录页、第97页至第98页)
以下为文章的原生状态。
WINS全称Windows Internet Name Service,即Windows互联网名称服务。它和DNS一样,都是用来将主机名转换成IP地址的。但在互联网解析主机名的是DNS,事实上WINS主要的是用在局域网内缓解网络风暴。
WINS基于计算机的NetBIOS名工作,所以要了解WINS,必须对计算机名、NetBIOS及NetBIOS名有一个初步的认识。
在微软的系统中,任何一台计算机,不论是否联网,都必须定义一个不超过15位的字符作为计算机名,该名在系统安装时指定,如不指定,则由系统随机生成。设定以后,可在我的电脑—属性—计算机选项卡(WIN2000以上)或网上邻居—属性—标识选项卡中(WINME以下)查看并管理;如果该计算机处于网络环境下,则该计算机名还必须在网络中保证唯一。这个计算机名的存在,是实现NetBIOS的前提。
在局域网发展早期,为在个人机上实现网络能力,MS和IBM合作开发了一套网络协议,认为它如同计算机的BIOS一样,将成为最基本的网络访问接口,因此使用了NetBIOS(Network Basic Input/Output System)这个名字。MS就利用NetBIOS接口开发网络服务器及相应的客户软件,后来,打通NetBIOS和网络物理层的各种具体接口的NetBEUI(NetBIOS Extend User Interface)又开发成功,成为NetBIOS的增强版。它直接控制Token Ring(令牌环)和Ethernet(以太网)驱动程序,使之只能运行于局域网,其缺点是不支持路由, 要在大型的或路由式的网络间通信,必须使用基于路由的传输机制(一般是TCP/IP)
加以补充,叫做NetBIOS over TCP/IP(NetBT),意为运
行于TCP/IP基础上的NetBIOS。
WIN2000以下的计算机强制使用NetBIOS名;WIN2000以上的计算机为了在网络中和WIN2000以下的计算机保持通信,保留NetBIOS名。
NetBIOS名的前15位沿用计算机名,最后增加一位字符作为后缀,用于标识某种服务或应用程序,所以对同一个计算机名,可以生成多个NetBIOS名;而同一计算机的多个服务也可以注册到另一个计算机的NetBIOS名上,均由该后缀加以区分。WIN2000中专门提供文件和打印机共享的server服务就是典型的例子,它的后缀是八进制的20。
不难看出,即使没有WINS服务器,只要是基于NetBIOS的主机,它们都能够自己管理自己,其原理如下:
主机A登录网络时,它将向网络发送注册广播6--10次,声明自身的NetBIOS名称,确保网内其他主机收到该消息,如果该名与主机B重名,主机B将发出一个包括它自己NetBIOS名称的广播包,要求主机A停止注册,主机A会发出一个负的名称注册(negative name registration)广播作为响应,主机A注册失败;如无其他主机反对,A成功注册。
与此同时,网络上的其它主机也向A发出一个包括自己NetBIOS名称的广播包,声明自己的存在。这在形式上表现为其它主机的网络邻居窗口在刷新后会出现该主机A的NetBIOS名;而主机A的网络邻居窗口中也出现了其它主机的NetBIOS名,也就是通常所认为的计算机名。
当主机A联系主机B时,A广播一个包含B主机NetBIOS名的地址请求,如果B在线,它将向主机A广播一个包括自己IP地址的正的名称查询(positive name query)消息予以响应,然后A就可以利用这个地址连接到主机B;
当主机A正确关机时,自动发生名称释放操作,这时其它主机可以用主机A的名称登陆网络;但主机A非正常关机时,其它主机的网络邻居窗口中仍然会有该主机名,双击后会出现“找不到网络路径”的错误提示:主机A已经名存实亡。
这种“无组织无纪律”的自我管理,带来的是通信效率的大大下降:每台主机在登陆和重登陆网络的时候,都将向网络发送广播;然后所有主机再向它发送广播;然后主机间要求通信都以广播的方式进行……,每台主机随时都在大呼小叫,其巨大的数据流量将造成网络响应速度直线下降,这是最不能接受的网络问题。
所以,必须有一个“老板”对所有主机的NetBIOS名称和IP地址进行集中统一的管理和维护,NetBIOS客户端通过直接与“老板”进行名称的注册、更新、查询和释放操作,最大程度的减少了广播流量。这个“老板”就是WINS服务器。
在WINS中,NetBIOS名可以被注册为唯一的名称,这时它对应一个IP地址;也可以映射为一个组的名称,这时它对应多个IP地址。所以准确的说,WINS服务应该叫WINS的NetBIOS名称服务,正是它使NetBIOS名称到地址的解析成为可能。
为更深刻的理解WINS,我们还要说明由NetBT规定的WINS名称解析的四种方法(又叫nodes,节点):①nodeB:广播的方法(broadcast);②nodeP:对等的方法(peer-to-peer),直接在WINS服务器中查询;③nodeM:混合的方法(mixed),即联合使用nodeB和nodeP,默认为B;④nodeH:另一种混合的方法(hybrid),和nodeM一样,但默认为nodeP。如果网络中没有WINS服务器,则系统默认使用B节点的方法,如前所述;如果系统中至少有一台WINS服务器,则系统默认使用H节点的方法。
NetBIOS客户机——即WINS客户机向WINS服务器注册、更新、查询和释放的工作流程与DHCP的工作流程异曲同工:都是以租约的形式进行——但在表现形式上更像是老板与员工之间签订用工合同的一幕。仍以客户机A和B为例描述如下:
一、注册
客户机A一诶启动,就向TCP/IP配置中指定的WINS服务器发送一个名称查询请求(请求签订合同),要求注册其NetBIOS名和IP地址,如果WINS在线,它首先检查自己的数据库中是否已有该NetBIOS名,如客户机B与该名同名,则WINS以500毫秒为间隔向B发送三次名称查询请求,用以确定B是否仍然还在上班,如收到响应,则向A发出一个负的名称注册(negative name registration)。A注册失败;如果没有响应,则A注册成功,该WINS服务器会将这一对应关系(重新)记录在自己的数据库中,并向该客户机返回一个注册成功的消息,其中包括一个指定的生存周期TTL(Time to Live)——它的存在表明了WINS客户机只是一个钟点工,此时合同签订成功。
一旦A三次联系WINS服务器都失败的话,意味着WINS服务器宕机或不可用,这时,如果网络中再无其它的WINS服务器存在,则又回到了无组织无纪律的洪荒状态,WINS客户机会按照上述“广播”的方式来工作。
二、更新
默认情况下,WINS服务器数据库更新时间(合同期限)即TTL是六天,如果到时客户机没有发出更新请求(要求续签合同),名称注册即告失效(合同终止),WINS会将该员工从花名册上删除,这就是TTL的作用。
所以一般来说,客户机会在相应的TTL值过去50%也就是三天的时候向服务器发出一次名称刷新请求,说明自己还在任劳任怨的继续上班,当WINS服务器收到该请求后,即向该客户机发出包含了一个新的TTL的名称刷新响应,表示合同已然重签。
三、查询
当A需要联系B的时候,它首先检查缓存,看是否有B的NetBIOS名对应IP地址的记录,如果没有,则向WINS服务器发出该NetBIOS名称的IP查询请求,要求WINS回应其IP地址。如果没有任何WINS服务器响应,或者某个WINS服务器发出了一个“Requested Name Does Not Exist”(请求的名称不存在)消息,客户机即启用广播的方式查找,如果仍未响应,如果有事先的设置,主机A还要尽最后的努力,去查找自己的数据库文件Lmhost,仍然无效的时候,才善罢甘休。
四、释放
如果WINS客户机A停止某个注册的网络服务或正常关机的时候,该A即针对注册的某个服务或者A的NetBIOS名直接向WINS发出一个包括A机IP地址和NetBIOS名称的释放请求(要求解除合同)。WINS收到该请求后,先检查它的数据库,如果WINS找到了一个对应的记录,则向A发送一个正的名称释放(positive name release)消息作为响应,其中包括了被释放的NetBIOS名称和值为的TTL,同时在数据库中将这条记录标记为已经释放,合同正式解除;
如果WINS没有找到对应的记录或者该NetBIOS名被指向了另一个IP地址,那么WINS会向A发出一个负的名称释放(negative name release)消息作为回应。合同无法解除。
如果A非正常关机,是不会发出名称释放消息的,显然,WINS服务器的数据库中就会多出一条“假”记录,当B向WINS发出A的地址请求时,WINS仍然会向B给出已不存在了的A的地址信息,当然B不可能再通过这个地址联系到A,最终会出现超时错。在B的网络邻居窗口中,A的存在仅仅证明了A“曾经来过”。
限于篇辐,WINS与DNS的集成、WINS代理以及多个WINS服务器的管理维护和排故等WINS服务器的高级应用只有以后再谈了。
WINS是老生常谈了,希望本文对老资格的网管朋友能温故知新,对初入道的新网管朋友能有一些帮助。敬请专家指正。
五蕴书院第86篇文章 | 2018年12月4日于成都
朋友临走请点下方大拇指告诉我您来过,谢谢!
领取专属 10元无门槛券
私享最新 技术干货