来源(久久网络-网络学堂-网络编程)

From: http://www.99net.net/study/system/11795449.htm

利用WINS实现包含多个子网的NT域

--------------------------------------------------------------------------------

2003-4-10 13:53:47 杨鹏

有一些网络知识的人都知道,微软的TCP/IP实际上是通过NetBIOS实现的,这就使得Windows操作系统在网络应用上存在一定的局限。例如,NetBIOS使用广播(Broadcast)进行通信,而普通的广播是无法通过路由器的,也就是说,两个子网没法通过NetBIOS联络。为了解决这个问题,微软使用了一种称为Windows Internet Name Service的服务,来对网络中的计算机进行NetBIOS名字和IP地址的解释。

当一个配置了WINS服务器的计算机(这被称之为WINS有效的)启动时,它会根据WINS服务器地址发送一个叫做名字注册请求的WINS信息,这个请求包含了它自身的NetBIOS名字和IP地址。当WINS服务器收到这个信息,就会在WINS数据库中检查是否已有该名字,如果该名字已存在,WINS服务器就向注册该名字的计算机发送一个查询,如果收到响应,WINS服务器就会发送一个信息给要求注册这个名字的计算机,告诉他已有人注册。如果数据库中没有这个名字的记录或已注册的主机没有响应,WINS服务器就发送一个肯定的响应及TTL给该客户机,那么,这个名字就注册成功了。

说了这么多,WINS到底有什么作用呢?我们可以利用它来实现一个包含多个子网的NT域。我想,这大概是WINS最有用的功能了。

前面已经说过了,NetBIOS的名字是无法跨越子网的,这样,我们在网上邻居中就看不到在同一域、同一工作组中的其他子网的机器,而且,如果NT的主域控制器在子网A,那么子网B中的计算机将无法登录到NT域。下面就以一个例子来说明:

两个子网A:192.168.0.0/24和B:192.168.1.0/24,域和工作组都设为TEST,路由器IP为192.168.0.1和192.168.1.1,主域控制器和WINS服务器都在子网A中。两个子网通过一台Linux路由器连接,路由器上的规则为所有的包都可以通过(实际上只需要与NetBIOS有关的几个端口的包能正常通过就行了)。在没有设置WINS的情况下,子网B中的计算机无法浏览到子网A中的机器,也不能登录到域中。这时,把两个子网中所有机器的WINS服务器地址都设为同一个,假设是:192.168.0.3,然后(很重要的一点),要给每台机器添加到另一个子网的路由,例如,192.168.0.5这台机器(Windows)要执行:route add 192.168.1.0 mask 255.255.255.0 192.168.0.1,以此类推,重新启动后(注意要先启动WINS服务器)子网B中的机器就能够正常登录到TEST域了,而且在网上邻居中也能正常浏览所有的机器。

在实践中有这样一个问题,如果可能的话,最好是把路由器用作WINS服务器,因为它能直接连接到各个子网。如果不行的话,要注意为WINS服务器添加相应的路由,这时解析的速度可能会稍慢,不过登录域没有任何问题。

Link: http://www.asm32.net/article_details.aspx?id=836