NetBIOS、Samba、CIFS概念及相关

NetBIOS 下的文件共享机制:

http://blog.youkuaiyun.com/flyoxs/article/details/5960910

 

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

SMB、CIFS和NETBios协议概念:

http://www.2cto.com/net/201207/140121.html

 

一、SMB协议
SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445。
服务器信息块(SMB)协议是一种IBM协议,用于在计算机间共享文件、打印机、串口等。SMB 协议可以用在因特网的TCP/IP协议之上,也可以用在其它网络协议如IPX和NetBEUI 之上。
  SMB 一种客户机/服务器、请求/响应协议。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机、邮件槽(mailslot)、命名管道(named pipe)等资源。
 
  在 TCP/IP 环境下,客户机通过 NetBIOS over TCP/IP(或 NetBEUI/TCP 或 SPX/IPX)连接服务器。一旦连接成功,客户机可发送 SMB 命令到服务器上,从而客户机能够访问共享目录、打开文件、读写文件,以及一切在文件系统上能做的所有事情。
  从 Windows 95 开始,Microsoft Windows 操作系统(operating system)都包括了客户机和服务器 SMB 协议支持。Microsoft 为 Internet 提供了 SMB 的开源版本,即通用 Internet 文件系统 (CIFS)。与现有 Internet 应用程序如文件传输协议(FTP)相比, CIFS 灵活性更大。对于 UNIX 系统,可使用一种称为 Samba 的共享软件。
 
二、CIFS(Common Internet File System) 协议   www.2cto.com 
CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机的服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议现在是局域网上用于服务器文件访问和打印的协议。象SMB协议一样,CIFS在高层运行,而不象TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
 
三、NETBios协议
Netbios (网络基本输入/输出系统)最初由 IBM,Sytek 作为API开发,使用户软件能使用局域网的资源。自从诞生,Netbios成为许多其他网络应用程序的基础。严格意义上,Netbios 是接入网络服务的接口标准。
  Netbios 原来是作为THE网络控制器为 IBM 局域网设计的,是通过特定硬件用来和网络操作系统 连接的软件层。Netbios经扩展,允许程序使用Netbios接口来操作IBM令牌环结构。Netbios 已被公认为工业标准,通常参照 Netbios-compatible LANs。
  它提供给网络程序一套方法,相互通讯及传输数据。基本上,Netbios 允许程序和网络会话。它的目的是把程序和任何类型的硬件属性分开。它也使软件开发员可以免除以下负担:开发网络错误修复,低层信息寻址和路由。使用Netbios接口,可以为软件开发员做许多工作。
 
  Netbios使程序和局域网操作能力之间的接口标准化。有它们可以将程序细化到为OSI模型的哪一层所写,使程序能移植到其他网络上。在Netbios局域网环境下,计算机通过名字被系统知道。网络中每台计算机都有通过不同方法编的永久性名称。这些名称将在下面做进一步讨论。
  通过使用Netbios的数据报或广播方式,在Netbios局域网上的pc机建立会话彼此联络。会话允许更多的信息被传送,探测错误,和纠正。通信是在一对一的基础上的。数据报或广播方式允许一台计算机和多台其他的计算机同时通信,但信息大小受限。使用数据报或广播方式没有探测错误和纠正。然而,数据报通信可以不必建立一个会话。   www.2cto.com 
 
  在这种环境下所有的通信以一种称为“网络控制块“的格式提交给NetBIOS。内存中这些块的分配依赖于用户程序。这些“网络控制块“分配到域中,分别为输入/输出保留。
  在当今的环境中,NetBIOS是使用很普遍的协议。以太网,令牌环,IBM PC网都支持NetBIOS。在它原始版本中,它仅作为程序和网络适配器的接口。从那以后,传输类功能加入NetBIOS,使它功能日益增多。
  在NetBIOS里,面向连接(tcp)和无连接(udp)通信均支持。它支持广播和复播,支持三个分开的服务:命名,会话,数据报。

 

//

应用SMB/CIFS协议:

http://blog.youkuaiyun.com/fanwenbo/article/details/5790184

 

第一节 本文的目的
   Microsoft公开了CIFS协议的所有细节,这使得我们可以了解这个协议并且编写基于这个协议的应用程序。 SMB/CIFS协议在Windows系统中的被广泛的应用,这要求我们对这个协议应该有所了解,下面文字就我的一点实际经验与大家进行交流,如果有错误的地方,真诚的希望得到大家的指正,我的Email:ilsy@whitecell.org
第二节 什么是SMB/CIFS协议?
   CIFS(Common Internet File System)是开放的跨平台的,其实现是基于SMB(Server Message Block)协议的,使用户可以使用这个协议方便的向支持SMB协议的网络服务器请求文件和打印服务。
   在不同的操作系统上,都有相应的SMB协议的实现,包括我们知道的Samba、Windows的不同版本等,而应用CIFS协议都可以与其通讯,CIFS是一个开放的SMB版本。可以从http://msdn.microsoft.com/downloads /default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/902 /msdncompositedoc.xml下载CIFS详细的说明文档或者看最新的Platform SDK文档。
  
   在所有的SMB数据报中都会包含下面的数据头:
   typedef unsigned char UCHAR;                // 8  unsigned bits
   typedef unsigned short USHORT;              // 16 unsigned bits
   typedef unsigned long ULONG;                // 32 unsigned bits
   typedef struct {
       ULONG LowPart;
       LONG HighPart;
   } LARGE_INTEGER;                            // 64 bits of data
   //  结构根据不同的SMB请求会有不同的变化
   typedef struct  {
       UCHAR Protocol[4];                      // 协议的名字'SMB', 前面放一个0xFF
       UCHAR Command;                          // 请求的命令类型
       union {
           struct {
               UCHAR ErrorClass;               // Error class
               UCHAR Reserved;                 // Reserved for future use
               USHORT Error;                   // Error code
           } DosError;
           ULONG Status;                       // 32- bit 错误代码
       } Status;
       UCHAR Flags;                            // 标记
       USHORT Flags2;                          // 扩展标记
       union {
           USHORT Pad[6];                      // Ensure section is 12 bytes long
           struct {
               USHORT PidHigh;                 // High part of PID
               UCHAR SecuritySignature[8];     // reserved for security
         } Extra;
       };
       USHORT Tid;                             // Tree 标识, 用来识别资源
       USHORT Pid;                             // Caller's process id
       USHORT Uid;                             // 用来识别用户
       USHORT Mid;                             // multiplex id
       UCHAR  WordCount;                       // Count of parameter words
       USHORT ParameterWords[ WordCount ];     // The parameter words
       USHORT ByteCount;                       // Count of bytes
       UCHAR  Buffer[ ByteCount ];             // The bytes
   } SMB_HEADER;
  
   而每一个SMB数据报都会包含这样的一个NetBIOS会话头:
  
   //  NBT_HEADER 结构
   typedef struct  {
        struct  {
                u_char  packetType;            // 数据报类型,在使用SMB数据报时,这个字段的值是0x00
                u_char  packetFlags;           // 这个字段总是为0x00
                u_short packetLen;             // 在SMB数据报中,为SMB数据报的总长度,但不包含这个结构的长度
                } s;
   } NBT_HEADER;
  
   实际上,一个SMB数据报是这样构成的: NBT Header + SMB Header + SMB Command Header + SMB Data
第三节 建立一个空会话
   SMB可以运行在TCP/IP等协议之上,如在我们常用的系统Windows系列操作系统上,如果要在TCP/IP上使用SMB协议,那么,你需要支持NetBIOS名字的传输。NETBIOS名字用来在网络上鉴别一台提供SMB服务计算机,使用SMB协议前,首先应该用NetBIOS名字去鉴别一台提供SMB服务的计算机。
   我们可以用下面的代码去取得一台计算机的NetBios名字:
  
   #include
   #include
   #include
   #define xmalloc(s)   (char *)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, (s)) //  分配内存
   #define xfree(p)     (char *)HeapFree (GetProcessHeap(),0, (p))                //  释放内存
   //  NBT_NAME_HEADER 结构
   typedef struct  {
 USHORT ID;
 USHORT Flags;
 USHORT Questions;
 USHORT Answer;
 USHORT Authority;
 USHORT Additional;
   }NBT_NAME_HEADER;
   //  NBT_NAME_ANSWER 结构
   typedef struct  {
 char   Name_[34];
 USHORT Type;
        USHORT Class;
 ULONG  TTL;
 USHORT DataLen;
 UCHAR  Number;
 char   Name[16];
   }NBT_NAME_ANSWER;
   //  NetBIOS 名字查询字符串
   unsigned char NetBiosQuery[] =
      "/x20/x43/x4B/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41"
      "/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41/x41"
      "/x41/x00/x00/x21/x00/x01";
   int GET_NetBiosName(char * IpAddress, char * szNetBiosName, int timeout)
   {
      SOCKET             csock;
      NBT_NAME_HEADER    NbtNameHeader;
      NBT_NAME_ANSWER    NbtNameAnswer;
      struct sockaddr_in dest, from;
      int                fromlen = sizeof(from);
      int                iRet,iTimeout;
      char *             SendBuf;
      csock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
      if(csock == SOCKET_ERROR)return NULL;
      //  建立UDP端口,查询一台计算机的NetBIOS名字要通过UDP的137端口查询
     
      iTimeout = timeout;
      iRet = setsockopt(csock,SOL_SOCKET,SO_SNDTIMEO,(char*)&iTimeout,sizeof(iTimeout));
      if(csock == SOCKET_ERROR)
      {
            closesocket(csock);
            return 1;
      }
      iTimeout = timeout;
      iRet = setsockopt(csock,SOL_SOCKET,SO_RCVTIMEO,(char*)&iTimeout,sizeof(iTimeout));
      if(csock == SOCKET_ERROR)
      {
            closesocket(csock);
            return 1;
      }
      //  建立超时
     
      dest.sin_family      = AF_INET;
      dest.sin_port        = htons(137);
      dest.sin_addr.s_addr = inet_addr(IpAddress);
      //  填充sockaddr_in结构
      
      memset(&NbtNameHeader, 0, sizeof(NBT_NAME_HEADER));
      NbtNameHeader.ID         = htons(0x01F8);
      NbtNameHeader.Flags      = htons(0x0010);
      NbtNameHeader.Questions  = htons(0x0001);
      NbtNameHeader.Answer     = 0;
      NbtNameHeader.Additional = 0;
      NbtNameHeader.Authority  = 0;
      //  填充NBT_NAME_HEADER结构
      
      SendBuf = xmalloc(sizeof(NBT_NAME_HEADER) + sizeof(NetBiosQuery));
      if(!SendBuf)
      {
            closesocket(csock);
            return 1;
      }
      memcpy(SendBuf, &NbtNameHeader, sizeof(NBT_NAME_HEADER));
      memcpy(SendBuf+sizeof(NBT_NAME_HEADER), NetBiosQuery, sizeof(NetBiosQuery));
      //  建立发送缓冲区,复制NBT_NAME_HEADER结构和NetBiosQuery到发送缓冲区
     
      iRet = sendto(csock, SendBuf, sizeof(NBT_NAME_HEADER) + sizeof(NetBiosQuery)-1, 0, (const sockaddr *)&dest, sizeof(dest));
      if(iRet <= 0)
      {
            closesocket(csock);
            xfree(SendBuf);
            return 1;
      }
      //  发送数据
     
      memset(&from, 0, sizeof(from));
      memset(&NbtNameAnswer, 0, sizeof(NBT_NAME_ANSWER));
      xfree(SendBuf);
      SendBuf = xmalloc(1024);
      if(!SendBuf)
      {
            closesocket(csock);
            return 1;
      }
      iRet = recvfrom(csock, SendBuf, 1024, 0, (sockaddr *)&from, &fromlen);
      if(iRet < (sizeof(NBT_NAME_ANSWER) + sizeof(NBT_NAME_HEADER)))
      {
            closesocket(csock);
            xfree(SendBuf);
            return 1;
      }
      //  接收数据
     
      memcpy(&NbtNameAnswer, SendBuf + sizeof(NBT_NAME_HEADER), sizeof(NBT_NAME_ANSWER));
      //  复制接收的数据到NBT_NAME_ANSWER结构
      strncpy(szNetBiosName, NbtNameAnswer.Name, sizeof(NbtNameAnswer.Name));
      //  复制接受到的NetBIOS名字到变量szNetBiosName
     
      closesocket(csock);
      xfree(SendBuf);
      return 0;
   }
  
 与一台计算机建立空连接一般需要下面这些步骤:
  
   1 - 客户端发送已经编码的服务器的NetBIOS名字,如果服务端确认,发送经确认NetBIOS数据
报给客户端,客户端在确认NetBIOS名字后才能继续用SMB协议与服务端交互。
       NetBIOS 名字在Windows系统下总是大写的,长度为16字节,它编码后为32字节,是这样编码的:
       例如名字PPSP,不足16字节后面会补充空格,16进制为0x50 0x50 0x53 0x50 0x20 0x20...,系统
   把每一个字节分为4位一组,变换后成为 0x5 0x0 0x5 0x0 0x5 0x3 0x5 0x0 0x2 0x0 0x2 0x0...,然后
   把每一组数据都加上 ACSII码'A'的值(0x41),最后,NetBIOS名字被编码为32字节。实际中的编码后的缓冲区向下面这样: 
   00000030                                   46 41 46 41 46       ...D.FAFAF
   00000040  44 46 41 43 41 43 41 43 41 43 41 43 41 43 41 43 DFACACACACACACAC
   00000050  41 43 41 43 41 43 41 43 41 43 41 00 20 46 45 45 ACACACACACA..FEE
   00000060  46 46 44 46 45 43 41 43 41 43 41 43 41 43 41 43 FFDFECACACACACAC
   00000070  41 43 41 43 41 43 41 43 41 43 41 41 41 00       ACACACACACAAA.

 

///

NetBIOS与SMB/CIFS协议-FreeBSD 技术文摘:

http://www.chinabyte.com/biz/cbfwq/415/2694915.shtml

 

  在个人计算机和局域网发展的早期,为了在个人计算机上实现网络能力,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 over IP由于使用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名字解析方式

  从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计算机首先要向NBN S登记自己的NetBIOS名字,完成名字的注册过程。

  预定义文件lmhosts:Microsoft Windows能通过查找存放在本地文件lmhos ts中的数据,来识别网络上NetBIOS名字和IP的关系,这个方式不是NetBIOS名字识别的标准,但它是Microsoft 的实现方式,因此是一种事实标准。

  通过DNS和hosts文件解析:DNS服务器和本地hosts文件中存放的数据是用于标准TCP/IP 协议中名字和IP之间转换使用的方式,但使用其他方式查找不出对应的节点地址时,Microsft Window s中通常也能通过标准的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是一个动态的名字解析方式,每一台计算机都必须注册自身。

  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\shareC:\> f:F:\>

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

  名字服务器的工作原理

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

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

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

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

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

  名字更新:由于每个名字都存在一个生存期TTL,那么当经历了这个TTL一半的时间,客户会向服务器进行更新请求,刷新服务器上的TTL设置。

  名字释放:客户停机时会与服务器通信释放其占用的NetBIOS名字,其名字TTL超时也会使得服务器释放这个名字。

  名字识别:客户可以向NBNS服务器发送查询名字的请求,进行名字解析。

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

 

 

///

SMB、CIFS协议:

http://wenku.baidu.com/view/44580d72f242336c1eb95e74.html

///

 

IPX:互联网分组交换协议:

http://baike.baidu.com/view/32700.htm

 

IPX:互联网分组交换协议 ,(IPX:Internetwork Packet Exchange protocol)是一个专用的协议簇,它主要由Novell NetWare操作系统使用。IPX是IPX协议簇中的第三层协议。

目录

IPX的协议构成IPX:第三层协议
SPX:顺序包交换协议
IPX编址IPX协议在以太网上的封装
IPX服务通告
协议结构
IPX协议设置
IPX防水等级等级标准
防水实验
展开IPX的协议构成 IPX:第三层协议
SPX:顺序包交换协议
IPX编址 IPX协议在以太网上的封装
IPX服务通告
协议结构
IPX协议设置
IPX防水等级 等级标准
防水实验
展开编辑本段IPX的协议构成IPX:第三层协议
  用来对通过互联网络的数据包进行路由选择和转发,它指定一个无连接的数据包,相当于TCP/IP协议簇中的IP协议;
SPX:顺序包交换协议
  顺序包交换(Sequenced Packet Exchange)协议。是IPX协议簇中的第四层的面向连接的协议,相当于TCP/IP协议簇中的TCP协议:NCP:NetWare核心协议(NetWare Core Protocol),提供从客户到服务器的连接和应用;SAP:服务通告协议 (Service Advertising Protocol),用来在IPX网络上通告网络服务;IPX RIP:Novell路由选择信息协议(Routing Information Protocol),完成路由器之间路由信息的交换并形成路由表。编辑本段IPX编址  IPX网络的地址长度为80位 (bit,由两部分构成,第一部分是32位的网络号,第二部分是48位的节点号。IPX地址通常用十六进制数来表示。   IPX网络号是由网管人员分配的,可以根据需要来定义网络号。   IPX节点号通常是网络接口本身的MAC地址。
IPX协议在以太网上的封装
  IPX协议在以太网上支持以下4种封装格式,也称为帧格式,它们是:   ●以太网802.3:也叫原始以太网,Cisco设备中称为"novell-ether",它是NetWare版本2到版本3.1中缺省的帧格式;   ●以太网802.2,也称sap,是标准的IEEE帧格式,它是NetWare版本3.12到4.x中的标准帧格式;   ●以太网II,也称arpa,采用标准以太网版本II的头格式;   ●以太网SNAP,或snap,通过增加一个于网接入协议(SNAP)扩展了IEEE 802.2的头格式。   采用不同IPX封装格式的设备之间不能进行通信。
IPX服务通告
  SAP是IPX服务通告协议,它可以通告诸如网络服务器和打印服务器等网络资源设备的地址和所能提供的服务。   路由器可以监听SAP更新消息,建立一个已知服务和相应网络地址的对应表。客户机可以利用路由器上的SAP表得到网上服务和地址的信息,从而直接访问相应服务。   互联网分组交换协议(IPX)是 Novell NetWare 操作系统所支持的在互联网络中路由数据包的早期网络协议。IPX 是一种面向无连接通信的数据报协议 - 类似于 TCP/IP 协议组中的网际协议(即IP)。其高层协议,如 SPX 和 NCP,主要提供差错恢复服务。   为了选择最佳路径,IPX 使用动态距离矢量(distance vector)路由选择协议,如路由信息协议(RIP:Routing Information Protocol)或链路状态协议(NLSP:NetWare Link-State Protocol)。   Novell IPX 网络地址是唯一的,以十六进制表示。它由两部分组成:网络号和节点号。IPX 网络号由网络管理员分配,地址长 32 位。节点号,通常是系统网络接口卡(NIC)的介质访问控制(MAC)地址,地址长 48 位。通过 MAC 地址作为节点号,系统可以通过发送节点以判断数据链路使用的 MAC 地址。   Novell NetWare IPX 支持单路由器接口的四种封装模式:   * Novell 私有( Novell Proprietary ) -也称为原始 802.3 或者 Novell Ethernet_802.3 , Novell 私有 是 Novell 公司最初使用的封装模式。   * 802.3 - 也称为 Novell_802.2,802.3 是 IEEE 802.3 的标准帧格式。   * Ethernet v 2 - 也称为 Ethernet-II 或 ARPA,Ethernet v2 包括标准 Ethernet v2 协议头,它由目标地址和源地址字段构成,后面是 EtherType 字段。   * SNAP - 也称为 Ethernet_SNAP,SNAP 在原 IEEE 802.2 协议头增加了 type 代码,与 Ethernet v2 中定义的 EtherType 类似。   IPX 数据包数据部分的长最小为 30 字节 (只有头部分 ) ,最大值不定,这主要取决于使用的低层 MAC 协议( 以太网或令牌环 )。
协议结构
  NetWare IPX 数据包头:   8 16 bit   Checksum   Packet Length   Transport control Packet Type   Destination Network (4 bytes)   Destination node (6 bytes)   Destination socket (2 bytes)   Source network (4 bytes)   Source node (6 bytes)   Source socket (2 bytes)   * Checksum ― 表示当16位字段全设置为1(FFFF)时,不使用校验和。   * Packet length ― 指定完整 IPX 数据报的字节长。IPX 数据包大小任意,可以达到媒体最大传输单元(MTU)大小(不允许数据包分片)。   * Transport control ― 指明数据包传送过程中经过的路由器数量。当该值为16时,假设发生路由回路,并丢弃数据包。   * Packet type ― 指定哪个上层协议应该接收该数据包信息。通常包括两个值:   o 5 ― 表示序列分组交换(SPX)   o 17 ― 表示NetWare核心协议(NCP)   * Destination network、Destination node、and Destination socket ― 表示目标信息。   * Source network、Source node and Source socket ― 表示源信息。编辑本段IPX协议设置  IPX协议与IP协议是两种不同的网络层协议,它们的路由协议也不一样,IPX的路由协议不像IP的路由协议那样丰富,所以设置起来比较简单。但IPX协议在以太网上运行时必须指定封装形式。   □有关命令   启动IPX路由   ipxrouting   设置IPX网络及以太网封装形式   ipxnetworknetwork[encapsulationencapsulation-type]1   指定路由协议,默认为RIP   ipxrouter{eigrpautonomous-system-number|nlsp[tag]|rip}   注:   1.network范围是1到FFFFFFFD.   □举例:   在此例中,WAN的IPX网络为3a00,Router1所连接的局域网IPX网络号为2a00,在此局域网有一台Novell服务器,IPX网络号也是2a00,路由器接口的IPX网络号必须与在同一网络的Novell服务器上设置的IPX网络号相同。路由器通过监听SAP来建立已知的服务及自己的网络地址表,并每60秒发送一次自己的SAP表。   IPX/SPX协议   说明: IPX/SPX 协议即 IPX 与 SPX 协议的组合,它是 Novell 公司为了适应网络的发展而开发的通信协议,具有很强的适应性,安装方便,同时还具有路由功能,可以实现多网段间的通信。其中, IPX 协议负责数据包的传送; SPX 负责数据包传输的完整性。在微软的 NT 操作系统中,一般使用 NWLink IPX/SPX 兼容协议和 NWLink NetBIOX 两种 IPX/SPX 的兼容协议,即 NWLink 协议,该兼容协议继承了 IPX/SPX 协议的优点,更适应 Windows 的网络环境。   应用: IPX/SPX 协议一般可以应用于大型网络(比如 Novell )。不过,如果不是在 Novell 网络环境中,一般不使用 IPX/SPX 协议,而是使用 IPX/SPX 兼容协议,尤其是在 Windows 9x/2000 组成的对等网中。[1]编辑本段IPX防水等级等级标准
  国际工业防水等级标准IPX和日本工业防水标准的JIS等级是一致的   0级 无保护   1级 可以消除垂直落下水滴的有害影响   2级 对与垂直方向在15度以内落下的水滴有防护作用   3级 可以消除与垂直方向在60度的喷雾状水滴的有害影响   4级 可以消除从不同方向飞溅水滴的有害影响   5级 可以消除对各方向喷嘴喷射水流的有害影响   6级 可以消除对各方向喷嘴强力喷射水流的有害影响   7级 顶部距离水面0.15—1米,连续30分钟,性能不受影响,不漏水   8级 顶部距离水面1.5—30米,连续30分钟,性能不受影响,不漏水
防水实验
  IPXX等级中关于防水实验的规定。   (1)IPX 1   方法名称:垂直滴水试验   试验设备:滴水试验装置   试样放置:按试样正常工作位置摆放在以 1r/min 的旋转样品台上,样品顶部至滴水口的距离不大于 200mm   试验条件:滴水量为 10。5 mm/min   持续时间:10 min   (2)IPX 2   方法名称:倾斜 15°滴水试验   试验设备:滴水试验装置   试样放置:使试样的一个面与垂线成 15°角,样品顶部至滴水口的距离不大于 200mm 。每试验完一个面后,换另一个面,共四次。   试验条件: 滴水量为 30。5 mm/min   持续时间: 4×2。5 min( 共10 min )   (3)IPX 3   方法名称:淋水试验   试验方法:   a。 摆管式淋水试验   试验设备:摆管式淋水溅水试验装置   试样放置:选择适当半径的摆管,使样品台面高度处于摆管直径位置上,将试样放在样台上,使其顶部到样品喷水口的距离不大于 200mm ,样品台不旋转。   试验条件:水流量按摆管的喷水孔数计算,每孔为 0。07 L/min ,淋水时,摆管中点两边各 60° 弧段内的喷水孔的喷水喷向样品。被试样品放在摆管半圆中心。摆管沿垂线两边各摆动 60°,共 120°。每次摆动( 2×120°) 约 4s   试验时间:连续淋水 10 min   b。 喷头式淋水试验   试验设备:手持式淋水溅水试验装置   试样放置:使试验顶部到手持喷头喷水口的平行距离在 300mm 至 500mm 之间   试验条件:试验时应安装带平衡重物的挡板,水流量为 10 L/min   试验时间:按被检样品外壳表面积计算,每平方米为 1 min (不包括安装面积),最少 5 min   (4)IPX 4   方法名称:溅水试验   试验方法:   a.摆管式溅水试验   试验设备和试样放置:与上述 IPX 3 之 a 款均相同;   试验条件: 除后述条件外,与上述 IPX 3 之 a 款均相同;喷水面积为摆管中点两边各 90°弧段内喷水孔的喷水喷向样品。被试样品放在摆管半圆中心。摆管沿垂线两边各摆动 180°,共约 360°。每次摆动 ( 2×360°) 约 12s   试验时间: 与上述 IPX 3 之 a 款均相同 ( 即10 min )。   b.喷头式溅水试验   试验设备和试样放置:与上述 IPX 3 之 b 款均相同;   试验条件:拆去设备上安装带平衡重物的挡板,其余与上述 IPX 3 之 b 款均相同;   试验时间:与上述 IPX 3 之 b 款均相同, 即按被检样品外壳表面积计算,每平方米为 1 min (不包括安装面积) 最少 5min   (5)IPX 5   方法名称:喷水试验   试验设备:喷嘴的喷水口内径为 6。3mm   试验条件:使试验样品至喷水口相距为 2。5m ~ 3m ,水流量为 12。5 L/min ( 750 L/h )   试验时间:按被检样品外壳表面积计算,每平方米为 1 min (不包括安装面积) 最少 3 min   (6)IPX 6   方法名称:强烈喷水试验;   试验设备:喷嘴的喷水口内径为 12。5 mm   试验条件:使试验样品至喷水口相距为 2。5m ~ 3m ,水流量为 100 L/min ( 6000 L/h )   试验时间:按被检样品外壳表面积计算,每平方米为 1 min(不包括安装面积)最少 3 min   (7)IPX 7   方法名称:短时浸水试验   试验设备和试验条件:浸水箱。其尺寸应使试样放进浸水箱后,样品底部到水面的距离至少为 1m 。试样顶部到水面距离至少为 0。15m   试验时间: 30 min   (8)IPX 8   方法名称: 持续潜水试验;   试验设备:须提供防水试验水槽之名称、厂牌、型号与序号。   实验室环境条件:须标明环境温度与相对溼度。   试验方法 / 规格   试验规范:参照 IEC 60529 Edition 2.1:2001-02 之 IPX8 试验方法。   防水保护试验   (一)试验方法:IEC 60529 Edition 2.1:2001-02 之 IPX8 样品依所指定之正常使用状态,完全浸没于水中。   (二)样品状态:试验中样品保持在正常使用状态下。   (三)样品架设方式:高度未满 850 mm 之待测外壳,其最底端应在水面下 2 米之位置。   (四)试验时间:60分钟。   (五)检查项目:试验后检查待测物外壳之内部是否有进水之情形并执行功能检查。   (1)待测物外壳是否提供防水保护?   (2)电线或电气元件附近是否有水滞留?   (3)功能测试:检查样品是否可正常点亮?
参考资料
1.  什么是 IPX 协议?如何在windows操作系统上启动?  .
扩展阅读:
1
http://www.networkdictionary.com/chinese/protocols/ipx.php
2
http://www.cnpaf.net/Class/IPX/075917300086164409.html
3
http://www.cnpaf.net/Class/IPX/0532918532812907.html
4
http://hi.baidu.com/yoyx/blog/item/59fae138a50e1df5b211c799.html
开放分类:
网络协议 , 认证标准 , 网络层 , IP/IPX

 

IPX/SPX协议:

http://baike.baidu.com/view/736184.htm

 

IPX(Internet work Packet Exchange,互联网络数据包交换)是一个专用的协议簇,它主要由Novell NetWare操作系统使用。IPX是IPX协议簇中的第三层协议。SPX(Sequenced Packet Exchange protocol, 序列分组交换协议)序列分组交换协议(SPX)是 Novell 早期传输层协议,为 Novell NetWare 网络提供分组发送服务。在局域网中用得的比较多的网络协议是IPX/SPX.。

目录

协议构成
IPX编址
IPX协议在以太网上的封装
IPX服务通告
编辑本段协议构成  IPX协议簇包括如下主要协议:   ●IPX:第三层协议,用来对通过互联网络的数据包进行路由选择和转发,它指定一个无连接的数据报,相当于TCP/IP协议簇中的IP协议;   ●SPX:顺序包交换 (Sequenced Packet Exchange)协议。是IPX协议簇中的第四层的面向连接的协议,相当于TCP/IP协议簇中的TCP协议;   ●NCP:NetWare核心协议(NetWare Core Protocol),提供从客户到服务器的连接和应用;   ●SAP:服务通告协议 (Service Advertising Protocol),用来在IPX网络上通告网络服务;   ●IPX RIP:Novell路由选择信息协议(Routing Information Protocol),完成路由器之间路由信息的交换并形成路由表。编辑本段IPX编址  IPX网络的地址长度为80位 (bit,由两部分构成,第一部分是32位的网络号,第二部分是48位的节点号。IPX地址通常用十六进制数来表示。   IPX网络号是由网管人员分配的,可以根据需要来定义网络号。   IPX节点号通常是网络接口本身的MAC地址。编辑本段IPX协议在以太网上的封装  IPX协议在以太网上支持以下4种封装格式,也称为帧格式,它们是:   ●以太网802.3:也叫原始以太网,Cisco设备中称为"novell-ether",它是NetWare版本2到版本3.1中缺省的帧格式;   ●以太网802.2,也称sap,是标准的IEEE帧格式,它是NetWare版本3.12到4.x中的标准帧格式;   ●以太网II,也称arpa,采用标准以太网版本II的头格式;   ●以太网SNAP(子网访问协议),或snap,通过增加一个于网接入协议(SNAP)扩展了IEEE 802.2的头格式。   采用不同IPX封装格式的设备之间不能进行通信。编辑本段IPX服务通告  SAP是IPX服务通告协议,它可以通告诸如网络服务器和打印服务器等网络资源设备的地址和所能提供的服务。   路由器可以监听SAP更新消息,建立一个已知服务和相应网络地址的对应表。客户机可以利用路由器上的SAP表得到网上服务和地址的信息,从而直接访问相应服务。
开放分类:
网络协议 , IPX/SPX

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值