现在的位置: 首页 > 综合 > 正文

NetBIOS 下的文件共享机制

2012年01月21日 ⁄ 综合 ⁄ 共 7830字 ⁄ 字号 评论关闭
文章目录
Technorati 标签: ,,,,,

 

IBM 的 NetBIOS

在个人计算机和局域网发展的早期,为了在个人计算机上实现网络能力,Microsoft和IBM合作开发了一套协议NetBIOS,这是一套用于网络通讯的调用接口,开发者IBM认为这套协议将如同它们设计的计算机BIOS一样成为最基本的网络访问接口,因此使用了NetBIOS这个名字。而Microsoft就使用NetBIOS接口开发网络服务器及相应的客户软件。

由于NetBIOS事实上是一种与TCP/IP独立发展的标准,虽然它可以使用TCP/IP作为传输协议,但是由于概念上的不同,它并没有利用TCP/IP提供的全部能力,而是使用自己的方式来完成类似的工作。其中最大的区别就在于名字解析方式上,NetBIOS具备自己独立的名字解析概念和能力,因此它使用的名字解析方式就与TCP/IP 中标准解析方式 ── DNS不同。在必须经过NetBIOS名字解析获得了一台命名相应的IP地址之后,NetBIOS 会话就可以建立在普通TCP连接的基础上了。因此在NetBIOS中,名字解析是NetBIOS会话与普通TCP 连接最大的不同之处。

 

NetBIOS 名称解析

 

NetBIOS名字解析方式

NetBIOS名字解析与DNS名字解析的最大不同在于NetBIOS是动态的,计算机需要首先注册自己的名字,然后才能解析到该名字。动态解析虽然带来的很大的方便性,但却复杂和低效的多,因此只能用于小范围的局域网上。

每个NetBIOS的名字可以多达16个字符,第16个字符用来标识输入名字时使用的程序类型。当NetBIOS 的计算机进行通信时,它必须基于NetBIOS名字,而不能基于IP地址。一个NetBIOS服务程序必须首先注册自己的NetBIOS名字,而一个应用程序则需要查询所需要的NetBIOS名字。例如每台Windows计算机在启动之后初始化网络时就使用所配置的计算机名字来初始化其使用的NetBIOS名字。

从NetBIOS名字查找相应的节点地址(TCP/IP协议中为IP地址)有几种不同的查找方式。

  1. 本地广播
    在本地网络上发送广播,通过广播某设备的NetBIOS名字,查找其对应的IP地址。广播方式也能用于注册自己的NetBIOS名字,例如一台计算机可以通过广播本机的名字,向其他计算机宣告自己使用了这个NetBIOS名字。
  2. 缓冲
    每个支持NetBIOS的计算机中,维护一个NetBIOS名字和相应IP地址的列表,这些对应的名字都有一定的生存期,以便能及时更新。
  3. NetBIOS名字服务器
    使用一个名字服务器来提供名字与IP之间的解析任务,这个NetBIOS 名字服务器被称为NBNS(NetBIOS Name Server),Miscrosoft实现的NBNS名字服务器为WINS(Windows Internet Name Service)。NetBIOS计算机首先要向NBN S登记自己的NetBIOS名字,完成名字的注册过程。
  4. 预定义文件lmhosts
    Microsoft Windows能通过查找存放在本地文件lmhos ts中的数据,来识别网络上NetBIOS名字和IP的关系,这个方式不是NetBIOS名字识别的标准,但它是Microsoft 的实现方式,因此是一种事实标准。
  5. 通过DNS和hosts文件解析
    DNS服务器和本地hosts文件中存放的数据是用于标准TCP/IP 协议中名字和IP之间转换使用的方式,但使用其他方式查找不出对应的节点地址时,Microsft Windows中通常也能通过标准的TCP/IP名字解析方式,进行名字和IP的转换。同样这也不是NetBIOS的标准,而是Micorsoft 的扩展。

从这五种NetBIOS识别方式,以及其中的不同的名字注册方式出发,进行不同的组合方式,就构成不同的名字识别策略。在NetBIOS标准中,将使用不同名字识别策略的模式称为不同的NetBIOS节点类型。

  • B-node:通过广播方式来进行注册和进行识别NetBIOS名字。对于IP协议上的Net BIOS,就需要基于UDP进行广播,在小网络上这种方式工作得很好,但当网络增大时,就会被使用路由器将大网络分割为几个小网。在一般情况下路由器不转发广播数据,广播包仅发送到本地网络。虽然可以配置路由器进行b-node广播转发,但是这将使UDP广播产生大量的无用网络数据,且名字注册和解析的难度也增加了。因此对于较大的网络,这种方式不可取。
  • P-node(peer-to-peer):对等方式能为识别名字提供非常有效的方法,它使用 NetBIOS名字服务器进行名字的注册登记和名字识别。因此对于每个NetBIOS计算机,必须指定同样的NBNS 服务器的IP地址。这样在NBNS服务器停机或更改了设置(如IP地址等情况)的情况下,名字解析不能完成,就不能进行NetBIOS通信。当然NetBIOS计算机可以配置为使用多个NBNS服务器,以便在其中一个出现问题时使用备份的服务器。
  • M-node(Mixed):为了正确解析NetBIOS名字,最好综合使用广播和名字服务器的方式,这样的名字识别是一个复合的过程。M-node首先通过B-node广播方式进行名字识别过程,当广播方式失败之后,再使用P-node方式进行查询。
  • H-Node(Hybrid):H-node模式也是一种复合模式,它与M-node不同的地方是查找的顺序不同。H-node先查找NBNS名字服务器,然后再使用广播方式进行查询。

Windows中实际使用的名字识别方式是对标准H-node方式的扩展,Windows系列的计算机将首先检查缓存中的内容,然后再查看WINS服务器,之后进行广播,然后将查找lmhosts文件,以及通过hosts和DNS 进行查找。实际进行NetBIOS识别是一个复杂的过程,主要就是由于NetBIOS是一个动态的名字解析方式,每一台计算机都必须注册自身。

image

图例:NetBIOS 主机(Windows XP)的 WINS 设置对话框

 

NetBIOS名字识别的过程

与DNS不同,NetBIOS名字使用动态方式进行管理。DNS数据是静态的,增加和删除DNS名字需要管理员手工更改配置文件。但NetBIOS要求计算机在网络上自动注册其名字,计算机停机之后占用的名字会被释放,这个过程不需要管理员干预。因为它需要额外的网络数据以完成名字登记等过程,使得它不适合象Internet这样的大型网络。NetBIOS名字识别需要三个步骤:

  • 名字注册:在NetBIOS启动时,计算机向整个网络声明占用了一个NetBIOS名字,如果已经有其他计算机占用了这个名字,这个计算机就会收到错误信息。注册是通过向网络广播声明信息或向NetBIOS名字服务器登记的方式来实现的。
  • 名字解析:通过广播或查询NetBIOS名字服务器来解析一个NetBIOS名字。此外还可以通过lmhosts 文件和DNS辅助解析名字。
  • 名字删除:在系统关机或提供的工作站服务结束时,会删除其占用的NetBIOS名。

通过NetBIOS名字和共享的目录名,就能够定位Windows计算机上的资源。Microsoft使用U NC的形式来确定一个网络资源的位置,一个UNC以双反斜线开始,接下来是提供资源计算机的NetBIOS名字,然后是该台计算机上提供资源的共享名,接下来就是下面的目录和文件名。如://ntserver/share/files ,因此使用一个资源的命令为:

C:/> net use f: //ntserver/share
C:/> f:
F:/>

上面的net use命令将ntserver上的share资源映射为F:盘。

 

名字服务器的工作原理

由于b-node广播会在网络上产生大量的信息流,尤其是在网络是由多个子网构成的时候,而使用路由器本来就是要隔离广播信息,可是为了进行名字解析,就不得不转发b-node广播信息包,这就达不到缩减无用网络流量的目的。

使用名字服务器进行解析就能避免这个问题,客户通过对名字服务器进行查询而非广播,信息流就不必传播到各个子网上,就能减少广播数据,减轻网络的负担节省带宽,并且能有效的提高名字解析的速度及准确性。

实际存在的Windows网络甚至很少利用名字服务器进行名字解析,这就使得这些网络名字解析存在很大问题,常常会出现不同计算机的网络邻居列表不同,根本原因就是广播方式是没有保证的,必须转向名字服务器方式才能解决名字解析问题。

普通NetBIOS计算机和NBNS服务器进行通信有四个不同的通信过程:

  • 名字注册:每台NetBIOS计算机启动时,都在名字服务器上注册。这样就保持了数据库的自动更新,并具备动态更新的特性。名字服务器将返回确认信息,以及这个名字的生存期TTL。如果客户要求的名字已经被占用了,服务器就查询占用这个名字的客户是否还在网络上,以判断这个名字是否可以再次被使用。这种情况主要发生在Windows计算机死机后重新登记的过程中,因为此时在计算机死机之前,它在名字服务器中登记的名字还存在,如果名字服务器简单的拒绝提供名字,那么这个计算机就无法再次获得自己的名字。只有在真正发生冲突的情况下,客户的名字注册才会失败。
  • 名字更新:由于每个名字都存在一个生存期TTL,那么当经历了这个TTL一半的时间,客户会向服务器进行更新请求,刷新服务器上的TTL设置。
  • 名字释放:客户停机时会与服务器通信释放其占用的NetBIOS名字,其名字TTL超时也会使得服务器释放这个名字。
  • 名字识别:客户可以向NBNS服务器发送查询名字的请求,进行名字解析。

有些情况下,客户没有设置支持名字服务器,或者使用的客户软件还不支持名字服务器进行解析,可以通过设置一个 WINS代理,由它来在广播数据和查询名字服务器之间进行转换,它可以帮助客户注册并回应客户的广播查询。

 

NetBEUI

NetBEUI,即NetBios Enhanced User Interface,或NetBios增强用户接口。它是NetBIOS协议的增强版本,曾被许多操作系统采用,例如Windows for Workgroup、Win 9x系列、Windows NT等。NETBEUI是为IBM开发的非路由协议,用于携带NETBIOS通信。

NETBEUI协议在许多情形下很有用,是WINDOWS98之前的操作系统的缺省协议。总之NetBEUI协议是一种短小精悍、通信效率高的广播型协议,安装后不需要进行设置,特别适合于在“网络邻居”传送数据。所以建议除了TCP/IP协议之外,局域网的计算机最好也安上NetBEUI协议。

NETBEUI缺乏路由和网络层寻址功能,既是其最大的优点,也是其最大的缺点。因为它不需要附加的网络地址和网络层头尾,所以很快并很有效且适用于只有单个网络或整个环境都桥接起来的小工作组环境。

因为不支持路由,所以NETBEUI永远不会成为企业网络的主要协议。NETBEUI帧中唯一的地址是数据链路层媒体访问控制(MAC)地址,该地址标识了网卡但没有标识网络。路由器靠网络地址将帧转发到最终目的地,而NETBEUI帧完全缺乏该信息。

网桥负责按照数据链路层地址在网络之间转发通信,但是有很多缺点。因为所有的广播通信都必须转发到每个网络中,所以网桥的扩展性不好。NETBEUI特别包括了广播通信的记数并依赖它解决命名冲突。一般而言,桥接NETBEUI网络很少超过100台主机。

近年来依赖于第二层交换器的网络变得更为普遍。完全的转换环境降低了网络的利用率,尽管广播仍然转发到网络中的每台主机。事实上,联合使用100-BASE-T Ethernet,允许转换NetBIOS网络扩展到350台主机,才能避免广播通信成为严重的问题。

 

SMB/CIFS 协议

在NetBIOS出现之后,Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block)协议。这个协议被Microsoft用于它们Lan Manager和Windows NT服务器系统中,而Windows系统均包括这个协议的客户软件,因而这个协议在局域网系统中影响很大。

随着Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为Internet上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技术文档的SMB协议进行整理,重新命名为 CIFS(Common Internet File System),并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。

因此,为了让Windows和Unix计算机相集成,最好的办法即是在Unix中安装支持SMB/CIFS协议的软件,这样Windows客户就不需要更改设置,就能如同使用Windows NT服务器一样,使用Unix计算机上的资源了。(Kincorn 按:事实上Microsoft获得了成功,在开源社区很快就出现了基于 SMB/CIFS 协议的 Samba 套件。)

与其他标准的TCP/IP协议不同,SMB协议是一种复杂的协议,因为随着Windows计算机的开发,越来越多的功能被加入到协议中去了,很难区分哪些概念和功能应该属于Windows操作系统本身,哪些概念应该属于SMB 协议。其他网络协议由于是先有协议,实现相关的软件,因此结构上就清晰简洁一些,而SMB协议一直是与Microsoft 的操作系统混在一起进行开发的,因此协议中就包含了大量的Windows系统中的概念。

1. 浏览

在SMB协议中,计算机为了访问网络资源,就需要了解网络上存在的资源列表(例如在Windows下使用网络邻居查看可以访问的计算机),这个机制就被称为浏览(Browsing)。虽然SMB协议中经常使用广播的方式,但如果每次都使用广播的方式了解当前的网络资源(包括提供服务的计算机和各个计算机上的服务资源),就需要消耗大量的网络资源和浪费较长的查找时间,因此最好在网络中维护一个网络资源的列表,以方便查找网络资源。只有必要的时候,才重新查找资源,例如使用Windows下的查找计算机功能。

但没有必要每个计算机都维护整个资源列表,维护网络中当前资源列表的任务由网络上的几个特殊计算机完成的,这些计算机被称为Browser,这些Browser通过记录广播数据或查询名字服务器来记录网络上的各种资源。

Browser并不是事先指定的计算机,而是在普通计算机之间通过自动进行的推举产生的。不同的计算机可以按照其提供服务的能力,设置在推举时具备的不同权重。为了保证一个Browser停机时网络浏览仍然正常,网络中常常存在多个Browser,一个为主Browser(Master Browser),其他的为备份Browser。

2. 工作组和域

工作组和域这两个概念在进行浏览时具备同样的用处,都是用于区分并维护同一组浏览数据的多个计算机。事实上他们的不同在于认证方式上,工作组中每台计算机都基本上是独立的,独立对客户访问进行认证,而域中将存在一个(或几个)域控制器,保存对整个域中都有效的认证信息,包括用户的认证信息以及域内成员计算机的认证信息。浏览数据的时候,并不需要认证信息,Microsoft将工作组扩展为域,只是为了形成一种分级的目录结构,将原有的浏览和目录服务相结合,以扩大Mircrosoft网络服务范围的一种策略。

工作组和域都可以跨越多个子网,因此网络中就存在两种Browser,一种为Domain Master Browser ,用于维护整个工作组或域内的浏览数据,另一种为Local Master Browser,用于维护本子网内的浏览数据,它和Domain Master Browser通信以获得所有的可浏览数据。划分这两种Browser 主要是由于浏览数据依赖于本地网广播来获得资源列表,不同子网之间只能通过浏览器之间的交流能力,才能互相交换资源列表。

但是,为了浏览多个子网的资源,必须使用NBNS名字服务器的解析方式,没有NBNS的帮助,计算机将不能获得子网外计算机的NetBIOS名字。Local Master Browser也需要查询NetBIOS名字服务器以获得Domain Master Browser的名字,以相互交换网络资源信息。

由于域控制器在域内的特殊性,因此域控制器倾向于被用做Browser,主域控制器应该被用作Domain Master Browser,他们在推举时设置的权重较大。

3. 认证方式

在Windows 9x系统中,习惯上使用共享级认证的方式互相共享资源,主要原因是在这些Windows系统上不能提供真正的多用户能力。一个共享级认证的资源只有一个口令与其相联系,而没有用户数据。这个想法是适合于一小组人员相互共享很少的文件资源的情况下,一旦需要共享的资源变多,需要进行的限制复杂化,那么针对每个共享资源都设置一个口令的做法就不再合适了。

因此对于大型网络来讲,更适合的方式是用户级的认证方式,区分并认证每个访问的用户,并通过对不同用户分配权限的方式共享资源。对于工作组方式的计算机,认证用户是通过本机完成的,而域中的计算机能通过域控制器进行认证。当 Windows计算机通过域控制器的认证时,它可以根据设置执行域控制器上的相应用户的登录脚本并桌面环境描述文件。

4. 共享资源

每个SMB服务器能对外提供文件或打印服务,每个共享资源需要被给予一个共享名,这个名字将显示在这个服务器的资源列表中。然而,如果一个资源的名字的最后一个字母为$,则这个名字就为隐藏名字,不能直接表现在浏览列表中,而只能通过直接访问这个名字来进行访问。

在SMB协议中,为了获得服务器提供的资源列表,必须使用一个隐藏的资源名字IPC$来访问服务器,否则客户无法获得系统资源的列表。

 

Samba —— 开源版本的SMB/CIFS

Samba是在Linux和UNIX系统上实现SMB/CIFS协议的一个自由软件,由服务器及客户端程序构成。

Samba是许多服务以及协议的实现,其包括TCP/IP上的NetBIOS(NBT)、SMB、CIFS(SMB的增强版本)、 DCE/RPC或者更具体来说MSRPC(网络邻居协议套件)、一种 WINS服务器(也被称作NetBIOS Name Server(NBNS))、NT 域协议套件(包括NT Domain Logons、Secure Accounts Manager(SAM)数据库、Local Security Authority(LSA)服务、NT-style打印服务(SPOOLSS)、NTLM以及近来出现的包括一种改进的Kerberos协议与改进的轻型目录访问协议(LDAP)在内的 Active Directory Logon 服务)。以上这些服务以及协议经常被错误地归类为NetBIOS或者SMB。Samba也能够用于共享打印机。

Samba能够为选定的Linux/Unix目录(包括所有子目录)建立网络共享。该功能使得Windows用户可以像访问普通Windows下的文件夹那样来通过网络访问这些Unix目录。

 

附录

本文摘自网络,引用列表如下:

  • 《NetBIOS与SMB/CIFS协议》,作者:王波
  • 百度百科_Samba

抱歉!评论已关闭.