NETBIOS是什么?

在这部分里,我首先将对NETBIOS作一些基础性的介绍,然后主要针对LANA编号, NETBIOS名字表,NBT这三方面对NETBIOS的特性进行讲解,使大家对NETBIOS接口通讯的原理有所了解,并掌握使用NETBIOS名字表来识别网上邻居浏览故障及其排除的方法。其中可能要借助一些网络命令,如net,nbtstat等,若有不会使用的同学请自行查阅windows帮助文档(最好看NT下的,98的有点渣渣),这里就不作解释了。

熟悉网络编程的同学都知道,在Windows下有两套重要的网络API,WINSOCK和 NETBIOS。平时我们用IE浏览网页,用FOXMAIL收发邮件以及用OICQ聊天用的都是 WINSOCK API,但还有一部分网络应用需要用到传统网络接口NETBIOS,浏览网上邻居和共享文件就是其中的典型。虽然微软已经在其最新的WINSOCK API里加入了对AF_NETBIOS地址族的访问,并打算从它的win2000中使对NETBIOS API的支持变成可选项,但NETBIOS的真正消亡还有待时日。这里我不想翻开NETBIOS厚重的历史去评判它的优劣来浪费大家的时间。存在即是真理,我们切入正题好了。 NETBIOS API的最大优点就是使得编程接口“与协议无关”—应用程序可通过TCP/IP,NetBEUI以及IPX/SPX来运行。

举个例子来说,如果你在网络属性里同时添加了这三种协议,那当你通过网上邻居浏览某台机子的资源时能确定用的是哪种协议在和它进行通信吗?不过由于这种“与协议无关”性是通过对传输协议本身进行改造,在相应协议上添加NETBIOS接口实现的,所以也就产生了一些局限性:

一是并非所有的协议都支持NETBIOS,我们知道的就只有上面提到的那三种协议实施了NETBIOS接口(也许在它们前面加个Microsoft标识更恰当些);

二就是我在前面提过的LANA编号的问题了,LANA号的提法在多宿主机环境下可能更准确些,对于我们一般只安装有一块网卡的机子来说大家就把它简单理解成一种通讯协议的对称性就可以了。

举个例子,A只安装了TCP/IP,B只安装了NetBEUI,虽然他们都在协议上绑定了NETBIOS接口,但彼此在网络邻居里是看不到的。这也提醒我们要想在网络邻居里看到最多的机子,就要把三个协议全部安装。为了后文叙述的方便,我们把启用了NETBIOS的三种协议分别用一个名字来表示:NetBT/NBT(TCP/IP)、Nbf(NetBEUI)、NwlnkNb(IPX/SPX),它们各对应一个 LANA号,只有相同的LANA号之间才能建立通信连接。

接下来要说的就是最为关键的NETBIOS名字的问题了。对于BSD系统,每台机器都有一个主机名,从而也引出了DNS的概念,这也可以说是UNIX和TCP/IP紧密结合的产物。而Windows可没有跟某种协议有近亲关系,在它眼里只有机器名(即NETBIOS名)才是最关键的。

在win32环境中,针对每个可用的LANA编号,每个进程都会为其维持一张NETBIOS名字表。我们可以用nbtstat -n命令获得本机与NBT相关的名字表(你要是连TCP/IP都没安,可别来问我为什么不能用)。NETBIOS 名字分两种类型:唯一名(UNIQUE)和组名(GROUP)。唯一名很好理解,就是说在同一子网上要独一为二(注意我这里没有用广播域,这在我的第三部分里我会结合以前的一些讨论详作说明);而组名的作用是可以实现多播数据通讯。结构上也由两部分组成:字符串和Scope ID。这里的字符串就是我们给自己的计算机、工作组起的名字,而且对所能使用的字符及其长度都有限制,大家自己去查书,我就不在这里浪费时间了,需要说明的是一些同学为了“隐藏”自己,把自己的机器名起的象个IP一样,如0.0.0.0(真不知是那位高人教大家的,呵呵)其实字符“."是不允许做机器名的,从这个角度讲win98真是太渣渣了(误导群众,怪不得老死机,该!)而NT在这方面做的就好多了。我主要讲解的是Scope ID域,它占用NETBIOS名的最后一个字节,最大的作用莫过于可以标识不同的Microsoft 网络服务了,因为它是NETBIOS名的一部分,因此UNIQUE name允许两台computername 相同,但scope ID不同的计算机在同一子网上存在。我不打算摘抄大段的NETBIOS 标识符给大家,这里就以我机子上的一个NETBIOS名字表为例给大家讲解一下常用的NETBIOS标识符类型:

C:>nbtstat -n NetBIOS Remote Machine Name Table Name Type Status ---------------------------------------------
CJT <00> UNIQUE Registered
CJT<00>代表工作站服务,每一台上网的计算机必须首先注册的唯一标识符,这也是进行网络邻居浏览的唯一必要条件。在同一子网上的其它机子可以用ping CJT得到我的IP,注意这可跟DNS没有关系,是通过广播查询CJT<00>得到的,因为TCP/IP和NETBIOS有绑定。

MINEGROUP <00> GROUP Registered

这条没什么可说的,但凡把工作组名设成MINEGROUP的机子都会注册这一项,从而同一子网上的某些机子间建立一种特定的逻辑关联,使对于MINEGROUP<00>进行的通讯只被这些机子接收,这里大家可以考虑不在MINEGROUP的机子对这些报文的处理过程。虽说这一项是名字表里最不重要的一项,但大多数同学无法浏览网上邻居的故障却都和它有关哦!等会儿我会说明。还有大家可以想想,要是你的工作组名和别人的机器名起的一样会出现什么事情呢?

CJT <03> UNIQUE Registered CJT<03>代表消息服务,就是那个在win2000下突然弹出个窗口来说“某某某侵犯版权” 的东东。其实这是个挺好的服务,可以让我们用win9X下的WINPOPUP和winNT下的NET SEND 进行简单的消息传送。不过在NT下,CJT<03>只代表消息的接收端,要发送消息,还需注册一个CJT<01>,这也是NT第一次用net send发消息要等很久的原因,因为CJT<01>只在你用到net send时才会去注册;而9X下只用一个CJT<03>就把收发全搞定了。不过那个 WINPOPUP好象不能给自己发消息耶,真不知微软在搞啥子。

CJT <20> UNIQUE Registered 与CJT<00>相对照,CJT<20>代表服务器服务,我前面已经说过,凡是提供文件及打印机共享服务的机子就叫做SERVER,它会在入网时进行浏览器宣告,这也是一台机子可通过网上邻居“被”访问的唯一必要条件。

MINEGROUP <1E> GROUP Registered 还记得我前面说过的那个浏览器选举吗?我把<1E>标志称为候选者,这样当MINEGROUP组里的当前浏览主控服务器当机后,所有拥有<1E>标志的机子都有资格参加竞选。至于这个标志是怎么来的,记住一句话:SERVER完全同意作为默认的候选浏览主控服务器。关于这句话的理解,我后面将有一道题帮助大家认识它。

XIXI <03> UNIQUE Registered 咦?又一个<03>,这个XIXI是啥子东西?其实XIXI就是CJT的用户名了,就是那个登录提示框里的东西。使我们除了通过对方的机器名以外还可以通过他的用户名给对方发消息。不过要是和别人的名字发生了重复怎么办?会报冲突吗?不会。因为这个XIXI<03>是我们在按了回车车键以后才进行注册的。写到这里,不禁对以前那个ESC键的问题有所领悟,

原来所谓的登录网络就是干了这么一件事,那如果…如果…,企不是…呵呵,搞个测

试先。

MINEGROUP <1D> UNIQUE Registered 这个<1D>想来大家都已经猜到了,就是表明CJT是MINEGROUP里的浏览主控服务器了,当 “领导”的感觉总是这么爽。嘻嘻

MSBROWSE.<01> GROUP Registered 见过这个怪东西的人肯定不少,但真正知道它用途的恐怕不多。这是一个组名,由整个子网上的所有浏览主控服务器构成,这样当MINEGROUP里的机子想要浏览其他组的资源时,CJT就凭借这个标识为大家查找那个组的浏览主控服务器,从而使我们能获得该组的浏览列表。 基本的一些标识符类型就介绍完了,只要掌握了这些,解决常见的浏览器故障已是绰

绰有余了,通过后面的一道习题大家可以实践掌握这种方法。对于还想进一步了解更多标识符类型的同学可以使用net start命令获知其它的微软服务,大多数服务都有一种标识符与其相对应。

MAC Address = 00-88-CC-23-15-54 前面POPO曾说过,使用nbtstat -A IP可以获知远程主机的MAC,至于原理,就是我们在这里最后要说的NBT了。现在大家已经知道,NBT就是建立在TCP/IP传送协议之上的NETBIOS接口,我们先将它与Nbf进行一番对比。Nbf指的是NETBIOS帧协议,以NetBEUI为基础,这可是真正的架构在链路层之上的协议哦,不过也因为它是在LLC上面,所以无法路由。只有借助一些可路由协议(如IP或IPX)才能实现跨广播域浏览因为TCP/IP发展最为迅速,最为普及,NBT也才受到大家如此的关注。

NBT提供的服务可以分成三类:名称服务(UDP137)、数据报服务(UDP138)和会话服务(TCP139)。 1)名称服务主要用于广播解决本子网的NETBIOS名和IP地址转换的关系,比如我前面那个 ping CJT的例子。因为NBT是建立在TCP/IP之上,而建立TCP/IP通讯是必须知晓双方 IP 地址的,这跟Nbf直接用MAC地址通讯很不一样。但也因为使用的是UDP广播,所以名称 服务无法跨越路由器。(这里我们只针对b-节点,不对WINS加以介绍) 2)数据报服务提供了无连接和面向广播的通信方式。它主要用于浏览列表通知,我前面也说过我们桌面上的那个网上邻居就是它构建的,此外我们用NET SEND *命令给计算机组发消息时也是靠它的UDP广播(多播)能力。但也正因为它使用了UDP传输层协议,因而在跨越路由器时也会遇到与名称服务相同的问题。 3)使用面向连接TCP协议的会话服务才是我们的救星,因为它可以跨越路由器。网络中产 生的NETBIOS通信主要也是因为会话服务的使用,而文件和打印机共享服务则构成了会话 服务通信的主体。

你可能感兴趣的:(学习笔记)