标题: NetBios协议编程
xfc211
LU天使
Rank: 4



UID 790
精华 39
积分 519
帖子 882
活跃指数 -11
LU金币 1905 个
LU金条 0 个
阅读权限 80
注册 2003-10-20
 
发表于 2003-11-12 17:13  资料  个人空间  短消息  加为好友 
摘要:随着计算机网络的飞速发展,各种网络协议应运而生。Windowst和Win95的用户越来越多。基于微软产品的网络协议主要以NetBios为主,本文就PC机网络Windows平台为例介绍NetBios协议编程。

关键词:Windows,NetBios协议,LAN

 

1. 概述:

NetBios是PC机网络中用得最为广泛的网络协议之一,大多数的局域网(LAN)产品,如Microsoft LAN Manager,Novell NetWare和Banqan Vines都支持NetBios。因此,将NetBios作为网络协议的优点是:基于NetBios网络应用程序并不需修改便能在其它各种网络环境下运行,用户将享受到极大的灵活性,既使改用了其它网络也能继续使用原先的应用程序,避免了重复投入。本文就NetBios协议及Windows下NetBios的编程作些探讨。

 

2.NetBios原则:

NetBios(NetWork Basic Input Output System,即网络基本输入输出系统)规格说明最初是由IBM定义的,现已成为网络应用程序的事实标准。但是,术语“NetBios”现仍用来代表下面三个概念:

·网络通信开放系统互连(OSI)模型中的会话层

·用来在会话层和更高层之间传递数据和命令的协议

·由特定的程序设计接口组成的协议的实现

 

NetBios提供了会话层

NetBios提供了OSI模型的会话层接口(有关OSI模型的详细介绍,参见IBM局域网技术参考手册)。OSI是由OSI(International Standards Organization,国际标准化组织)提出的参考模型。该模型按层次抽象出了网络软件和硬件,它建立在两个简单的概念上。第一个概念是同层通信,即每一层都假定它正同远程机器上的对应层进行通信。也就是说,每一层都不知道远程机器上其他层的情形,它只管同远程机器上对应层按照标准的或协商好的协议进行通信。第二个概念是网络中的每一层为其上一层提供服务。每一层都提供了一系列上一层的接口,但隐藏了实现细节。一台机器上的所有层加在一起,便成了一个栈。

同层通信是通过数据封装实现的。发送数据时,第一台机器上栈中的每一层(服务请求者)都将要发送的数据组织成一帧,并将其传给低一层(服务提供者),帧中含有只有第二台远程机器上对应层才明白的头信息。第二台机器上的对应层接收到一帧后,将读取其中含有的头信息并进行解释,再据此进行相应的控制。最后,对应层将从帧中去掉头信息,还可能将包中的其余内容传送给上一层,如图所示:


 

每一层都可为上一层提供连接式服务或非连接式服务。连接式服务类似于打电话的两个人都不知道居于其间的电话网的电话连接,提供给他们使用的是“虚连接”,信息就在虚连接上来回传递,并且秩序井然,全无差错。也就是说明,连接式服务提供了发送方和接收方之间的虚电路。

而非连接式服务则类似于邮政服务所采用的方法。在这种方法下,每一封信都是独立地送达接收方,彼此之间没有关系。事实上,在同一时刻发出的寄往同一个收信人的两封信,其传递路线可能截然不同。非连接式服务提供了“数据表”(datagram)服务。每一个数据表包在网络中的传递方式都是独立的,不受下一包或上一包的影响。

下面摘要列出OSI模型每一层的功能,具体如下:

·物理层负责通过物理通信介质,如微波、双绞线或同轴电缆等,传送数据。网络的拓扑结构也是物理层的一部分。在物理层上传送数据可能会发生差错,差错检测和修正服务由较高层提供。

·数据链路层在物理层上传送数据,并通过差错控制方法达到传送无差错的目的。

·网络层负责决定完整的网络传送路线,通信双方要么是同一LAN中的两个通信站,要么是不同网络中的两个通信站。

·传输层为会话层提供了“一端到另一端”或“源到目标”式的数据传输信道,隐去了网络本身的细节。它能将一个数据包分成多个包,以适应网络层的限制。它还能将在同一物理信道上传输的多个数据流组合起来。

·会话层为两个通信处理(位于表示层上),提供了“会话能力”。它首先通过传输层服务连接到远程处理上,然后再为上一层管理会话。因此,尽管传输层可能只提供非连接式服务,但会话层能为上一层提供连接式服务。简而言之,NetBios提供的就是会话层服务。

·表示层主要与数据的表达与变换有关,其作用是使数据能在不同平台上来回传送(例如,在Digital VAX系统和IBM System/360间来回传送)。

·应用层含有的是诸如FTP或Telenet之类的应用程序,这些应用程序要使用其他层提供的服务。

OSI模型勾勒出了复杂网络的框架,它能用来连接任何两台或更多台计算机。大多数个人机和UNIX工作站都彼此相连,构成了一个个局域网。但是,目前的大多数局域网都采用了修改后的OSI模型。对于OSI模型的最底两层,它们采用的是ANSI/IEEE 802-1995标准,甚至是更为简单的802标准。该标准先是被ISO采纳,后又批准作为国际标准(ISO 8802:1989)使用。图比较了802标准和OSI模型的最底两层。(ANSI代表美国国家标准化学会,IEEE代表电子电气工程师学会)

802标准实际上是一个标准集,其中每一个标准都详细描述了通用局域网的一个特定部分。综合介绍802标准的部分称为802.1,它包括了所有802标准。802.2标准称为逻辑链路控制(LLC)标准,它为在两个网络中的物理站之间建立“逻辑”链路而定义了低层协议。网络拓扑结构由介质访问控制(MAC)层定义,具体可定义成CSMA/CD,Token Bus或Token Ring,这三者在802标准中分别称为802.3,802.4和802.5。Ethernet是一种很流行的CSMA/CD拓扑结构,它兼容于802.3标准。对应于802.X标准ISO已经相应发布了8802.X标准。虽然802标准没有定义数据链路层以上的各层,但是,事实上存在着一个标准,该标准就是NetBios,它定义了一个协议,并提供了会话层服务。

 

NetBios协议

我们已经说过,NetBios提供了会话层服务,它按对应层能理解的特定协议同远程机器上对应层进行通信。因此,NetBios还指定了一系列协议命令和网络层协议,以允许两台远程机器进行通信。我们将这些协议的实现称为NetBios驱动程序。NetBios驱动程序可以是能够按照指定的NetBios协议同另一远程NetBios驱动程序进行通信的任一程序,处理或设备驱动程序等。下面将要介绍,NetBios驱动程序还提供了NetBios接口。

NetBios协议由一系列协议命令组成,每一条协议命令都对应于要在网络上传送的一帧。如图所示,每一个NetBios帧都要封装在LLC帧中,而LLC帧又要封装在MAC帧中。每一条NetBios驱动程序命令都将导致驱动程序向一个或多个已知或未知的接收方NetBios驱动程序发出这样的一个或多个NetBios包。

 

NetBios接口

前面已介绍过,NetBios层提供的是会话层服务,其实现称为NetBios驱动程序。但是,如果只有这些驱动程序或NetBios层本身,并不能实现通信。若想实现通信,NetBios层的客户机应当访问NetBios提供的服务具体访问可经由程序设计接口完成。

NetBios提供了一系列标准的程序设计接口,应用程序可以利用这些接口在局域网间进行通信。大多数局域网软件商(例如Microsoft,IBM和Novell)都提供具有这些接口的NetBios驱动程序。因为这些接口事实上已成了标准,所以,将基于NetBios的应用程序从一个局域网软件环境不加修改或稍加修改地移至另一个局域网软件环境中运行是可行的。再说一遍,支持这些接口是NetBios驱动程序的义务,由NetBios驱动程序负责将每一个NetBios接口调用转换成相应的一个或多个NetBios的协议包。

下面按照它们所提供的服务分类介绍一下NetBios接口。说明一下,这里所说的实体是指,利用NetBios接口同其他实体(包括本身)进行通信的任何处理,或关联着NetBios名的任何处理。NetBios名是个16安节域,多余部分用空格(20H)填充。

 

命令服务

NetBios为在网络上增加、删除、查找已命名NetBios实体提供了相应的接口。任何NetBios实体都可通过NetBios Add Name(增加名)接口使自己同一个NetBios名关联起来,该名在整个网络中具有唯一性。比如说,注册进入网络的每一个用户通常都有一个唯一的NetBios名,以便彼此之间能够区分开来。同时,一个实体可以登记成一个组名的一部分,多个实体可以将它们自己同这个组名相关联。例如,某一公司财务科的所有会计可以共享一个组名(或称别名),如“ACCOUNTS”,其后,发往该组名的消息将同时发往所有会计。当然,每一个会计还可有一个唯一的名(如注册ID或用户ID),以便发送和接收其个人消息。

 

会话服务

NetBios为创建、破坏或使用设置在任二个NetBios实体之间的会话提供了一系列接口。若想使用会话管理工具,NetBios实体首先应当通过Add Name接口将自己同一个唯一名关联起来。在两个实体间设置了会话后,他们可以使用各自喜好的Send和Receive接口发送和接收数据缓冲区,缓冲区最大可达128KB-2字节=131070字节。大多数NetBios应用程序都利用这些服务来发送和接收数据包。

 

数据表服务

NetBios提供了一系列接口,来发送和接收称为数据表(datagram)的数据包。并不能保证数据表一定能成功地发送和接收,NetBios只是简单地尽其最大的能力发送和接收实体所提供的数据表。数据表最大可有64KB-1字节=65535字节长。可发送给一个实体,也可以广播方式了送给网络中所有实体。

 

杂务服务

为获取安装在结点上的网络适配器卡的状态和动态复位适配器提供了相应的接口,它还为取消实体先前发出的命令提供了相应的接口。

顶部
zdygk
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
极品果壳大将军


LU爱心使者  
UID 114
精华 17
积分 1269
帖子 2408
活跃指数 107
LU金币 1031 个
LU金条 16619 个
阅读权限 200
注册 2003-9-24
 
发表于 2003-11-12 22:02  资料  个人空间  主页 短消息  加为好友 
还没有贴完吧?能不能贴出来URL呢?应该有图的。





Major :  ETL AIX+JAVA+DB2
Hobby: shell+os-developer

DB2 is the Best Pure RDBMS; Oracle is an aspirant
顶部
dfman
LU新生
Rank: 1



UID 1186
精华 0
积分 4
帖子 7
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2003-10-30
 
发表于 2003-11-17 17:50  资料  个人空间  短消息  加为好友 
这是一本书,讲windows网络编程的。

顶部
zdygk
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
极品果壳大将军


LU爱心使者  
UID 114
精华 17
积分 1269
帖子 2408
活跃指数 107
LU金币 1031 个
LU金条 16619 个
阅读权限 200
注册 2003-9-24
 
发表于 2003-11-17 22:06  资料  个人空间  主页 短消息  加为好友 
itpub那本?知道了。





Major :  ETL AIX+JAVA+DB2
Hobby: shell+os-developer

DB2 is the Best Pure RDBMS; Oracle is an aspirant
顶部
只爱陌生人
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14



UID 414
精华 2
积分 546
帖子 1052
活跃指数 2
LU金币 5766 个
LU金条 50 个
阅读权限 200
注册 2003-10-10
 
发表于 2003-11-17 22:57  资料  个人空间  短消息  加为好友 
蝈蝈看书不少啊
现在偏向什么方向啊





记得不要回头,往前走,让幸福的尾巴一直跟着你。
顶部
zdygk
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
极品果壳大将军


LU爱心使者  
UID 114
精华 17
积分 1269
帖子 2408
活跃指数 107
LU金币 1031 个
LU金条 16619 个
阅读权限 200
注册 2003-9-24
 
发表于 2003-11-18 09:10  资料  个人空间  主页 短消息  加为好友 
灌水~~~~~~~~~~~~~~~~~~ laugh.gif





Major :  ETL AIX+JAVA+DB2
Hobby: shell+os-developer

DB2 is the Best Pure RDBMS; Oracle is an aspirant
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
只爱陌生人
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14



UID 414
精华 2
积分 546
帖子 1052
活跃指数 2
LU金币 5766 个
LU金条 50 个
阅读权限 200
注册 2003-10-10
 
发表于 2003-11-18 09:18  资料  个人空间  短消息  加为好友 
晕~~!
泡mm呢





记得不要回头,往前走,让幸福的尾巴一直跟着你。
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
 



当前时区 GMT+8, 现在时间是 2008-11-23 06:42
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.055492 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver