1.1.3 NetBIOS编程(www.cppentry.com)基础(3)
③ 名字删除:系统关机或提供的工作站服务结束时,会删除其占用的NetBIOS名。
通过NetBIOS名字和共享的目录名,就能够定位Windows计算机上的资源。Microsoft使用UNC的形式来确定一个网络资源的位置,一个UNC以双反斜线开始,接下来是提供资源计算机的NetBIOS名字,然后是该台计算机上提供资源的共享名,接下来就是下面的目录和文件名。如\\ntserver\share\files。
因此使用一个资源的命令格式如下所示:
- C:\> net use f: \\ntserver\share
- C:\> f:
- F:\>
(3) 名字服务器的工作原理
由于B-node广播会在网络上产生大量的信息流,尤其是在网络是由多个子网构成的时候,而使用路由器本来就是要隔离广播信息,可是为了进行名字解析,就不得不转发B-node广播信息包,这就达不到缩减无用网络流量的目的。
使用名字服务器进行解析就能避免这个问题,客户通过对名字服务器进行查询而非广播,信息流就不必传播到各个子网上,就能减少广播数据,减轻网络的负担,节省带宽,并且能有效地提高名字解析的速度及准确性。
实际存在的Windows网络甚至很少利用名字服务器进行名字解析,这就使得这些网络名字解析存在很大问题,常常会出现不同计算机的网络邻居列表不同,根本原因就是广播方式是没有保证的,必须转向名字服务器方式才能解决名字解析问题。
当普通NetBIOS计算机和NBNS服务器进行通信时,有如下4个不同的通信过程。
名字注册:每台NetBIOS计算机启动时,都在名字服务器上注册。这样就保持了数据库的自动更新,并具备动态更新的特性。名字服务器将返回确认信息,以及这个名字的生存期TTL。如果客户要求的名字已经被占用了,服务器就查询占用这个名字的客户是否还在网络上,以判断这个名字是否可以再次被使用。这种情况主要发生在Windows计算机死机后重新登记的过程中,因为此时在计算机死机之前,它在名字服务器中登记的名字还存在,如果名字服务器简单地拒绝提供 名字,那么这个计算机就无法再次获得自己的名字。只有在真正发生冲突的情况下,客户的名字注册才会失败。
名字更新:由于每个名字都存在一个生存期TTL,那么当经历了这个TTL一半的时候,客户会向服务器进行更新请求,刷新服务器上的TTL设置。
名字释放:客户停机时会与服务器通信释放其占用的NetBIOS名字,其名字TTL超时也会使得服务器释放这个名字。
名字识别:客户可以向NBNS服务器发送查询名字的请求,进行名字解析。
在某些情况下,客户没有设置支持名字服务器,或者使用的客户软件还不支持名字服务器进行解析,可以通过设置一个 WINS代理,由它来在广播数据和查询名字服务器之间进行转换,它可以帮助客户注册并回应客户的广播查询。
4. 何谓NetBEUI
NetBEUI是网络操作系统使用的NetBIOS协议的加强版本。它规范了在NetBIOS中未标准化的传输帧,还加了额外的功能。传输层驱动器经常被Microsoft LAN Manager(微软局域网管理器)使用。
NetBEUI执行OSI LLC2协议。NetBEUI是原始的PC网络协议和IBM为LanManager(局域网管理器)服务器设计的接口。本协议稍后被微软采用,作为它们的网络产品的标准。它规定了高层软件通过NetBIOS帧协议发送、接收信息的方法。本协议运行在标准802.2数据链协议层上。
5. NetBIOS范围
NetBIOS范围ID为建立在TCP/IP(叫做NBT)模块上的NetBIOS提供额外的命名服务。NetBIOS范围ID的主要目的是隔离单个网络上的NetBIOS通信和那些有相同NetBIOS范围ID的节点。NetBIOS范围ID是附加在NetBIOS名称上的字符串。两个主机上的 NetBIOS范围ID必须匹配,否则两主机无法通信。NetBIOS范围ID允许计算机使用相同的计算机名,不同的范围ID。范围ID是NetBIOS名称的一部分,使名称唯一。
6. NetBIOS控制块
NetBIOS控制块(NCB)是所有NetBIOS应用程序访问NetBIOS服务时都要用到的一个程序设计结构,并且是唯一的一个。设备驱动程序也使用类似的结构。NetBIOS控制块的定义结构如下:
- typedef struct _NCB {
- BYTE ncb_command;
- BYTE ncb_retcode;
- BYTE ncb_lsn;
- BYTE ncb_num;
- DWORD ncb_buffer;
- WORD ncb_length;
- BYTE ncb_callName[16];
- BYTE ncb_name[16];
- BYTE ncb_rto;
- BYTE ncb_sto;
- BYTE ncb_post;
- BYTE ncb_lana_num;
- BYTE ncb_cmd_cplt;
- BYTE ncb_reserved[14];
- } NCB, *PNCB;
有关上述结构中各个参数的具体说明,请读者朋友们参考相关资料,本书在此将不再详细讲解。