64 FreeBSD连载:NetBIOS名字解析

NetBIOS与SMB/CIFS协议在个人计算机和局域网发展的早期,为了在个人计算机上实现网络能力,Microsoft和IBM合作开发了一套协议NetBIOS,这是一套用于网络通讯的调用接口,开发者IBM认为这套协议将如同它们设计的计算机BIOS一样成为最基本的网络访问接口,因此使用了NetBIOS这个名字 。而Microsoft就使用NetBIOS接口开发网络服务器及相应的客户软件 。
然后IBM在Token Ring和Ethernet上直接实现了NetBIOS驱动,实现了位于NetBIOS和物理网络层之间的各种具体接口,这些程序遵循的标准被称为NetBEUI 。NetBEUI直接控制Token Ring和Ethernet驱动程序,因此它只能运行在局域网上 。但是NetBIOS本身并没有对下层使用的协议进行限制,因此它除了可以在NetBEUI支持下运行之外,也可以在其他协议支持下运行 。其他的网络开发者在另外的一些协议的基础上也实现了NetBIOS接口,例如TCP/IP,IPX以及Decnet等 。其中NetBIOS overIP由于使用TCP/IP协议,因而在低层与Unix计算机相容,成为Unix和个人计算机系统通信的基础 。
Windows系列计算机并不一定使用IP作它的网络传输协议,它也能使用IPX或NetBEUI作传输协议,但是FreeBSD不支持IPX或NetBEUI上的NetBIOS,必须为Windows客户配置IP协议,才能与FreeBSD相互共享资源 。
NetBIOS名字解析
由于NetBIOS事实上是一种与TCP/IP独立发展的标准,虽然它可以使用TCP/IP作为传输协议,但是由于概念上的不同,它并没有利用TCP/IP提供的全部能力,而是使用自己的方式来完成类似的工作 。其中最大的区别就在于名字解析方式上,NetBIOS具备自己独立的名字解析概念和能力,因此它使用的名字解析方式就与TCP/IP中标准解析方式 ── DNS不同 。在必须经过NetBIOS名字解析获得了一台命名相应的IP地址之后,NetBIOS会话就可以建立在普通TCP连接的基础上了 。因此在NetBIOS中,名字解析是NetBIOS会话与普通TCP连接最大的不同之处 。
NetBIOS名字解析与DNS名字解析的最大不同在于NetBIOS是动态的,计算机需要首先注册自己的名字,然后才能解析到该名字 。动态解析虽然带来的很大的方便性,但却复杂和低效的多,因此只能用于小范围的局域网上 。
每个NetBIOS的名字可以多达16个字符,第16个字符用来标识输入名字时使用的程序类型 。当NetBIOS的计算机进行通信时,它必须基于NetBIOS名字,而不能基于IP地址 。一个NetBIOS服务程序必须首先注册自己的NetBIOS名字,而一个应用程序则需要查询所需要的NetBIOS名字 。例如每台Windows计算机在启动之后初始化网络时就使用所配置的计算机名字来初始化其使用的NetBIOS名字 。
NetBIOS名字解析方式
【64 FreeBSD连载:NetBIOS名字解析】从NetBIOS名字查找相应的节点地址(TCP/IP协议中为IP地址)有几种不同的查找方式 。
本地广播: 在本地网络上发送广播,通过广播某设备的NetBIOS名字,查找其对应的IP地址 。广播方式也能用于注册自己的NetBIOS名字,例如一台计算机可以通过广播本机的名字,向其他计算机宣告自己使用了这个NetBIOS名字 。
缓冲: 每个支持NetBIOS的计算机中,维护一个NetBIOS名字和相应IP地址的列表,这些对应的名字都有一定的生存期,以便能及时更新 。
NetBIOS名字服务器:使用一个名字服务器来提供名字与IP之间的解析任务,这个NetBIOS名字服务器被称为NBNS(NetBIOS Name Server),Miscrosoft实现的NBNS名字服务器为WINS(Windows Internet Name Service) 。NetBIOS计算机首先要向NBNS登记自己的NetBIOS名字,完成名字的注册过程 。
预定义文件lmhosts:Microsoft Windows能通过查找存放在本地文件lmhosts中的数据,来识别网络上NetBIOS名字和IP的关系,这个方式不是NetBIOS名字识别的标准,但它是Microsoft的实现方式,因此是一种事实标准 。

推荐阅读