收藏 分享(赏)

CIFS协议文档.doc

上传人:weiwoduzun 文档编号:2868320 上传时间:2018-09-29 格式:DOC 页数:17 大小:156.95KB
下载 相关 举报
CIFS协议文档.doc_第1页
第1页 / 共17页
CIFS协议文档.doc_第2页
第2页 / 共17页
CIFS协议文档.doc_第3页
第3页 / 共17页
CIFS协议文档.doc_第4页
第4页 / 共17页
CIFS协议文档.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、- 1 -目录1CIFS 协议 31.1CIFS 协议概述 31.2CIFS 协议头格式 31.2.1 头域 31.2.2 命令域 31.2.3 错误类域 51.2.4 错误代码域 51.2.5flags 域 51.2.6flags2 域 61.2.7 填充或安全签名域 81.2.8TID 域 81.2.9PID 域 81.2.10UID 域 81.2.11MID 域 81.2.12 Wordcount 和 Parameterwords(参数域) 81.2.13Bytecount 和 buffer 域(缓冲) 91.3CIFS 协议的安全机制 91.3.1 用户级安全 91.3.2 共享级安全

2、 91.3.3 加密 91.4CIFS 协议的完整性 101.4.1 机会锁 101.5CIFS 协议包交换流程 101.5.1 包交换的第一部分协商和参数传递 101.5.1.1 建立 NetBIOS 会话 111.5.1.2CIFS 协议版本协商 111.5.1.3 用户登录 121.5.1.4 连接特定资源 121.5.2 包交换的第二部分数据交换 131.5.2.1 属性、操作等参数传递 131.5.2.2 数据交换 14- 2 -2NetBIOS 协议 152.1NetBIOS 概述 152.2NetBIOS 名称服务 152.2.1NetBIOS 名称 152.2.2NetBIOS

3、 名称属性和格式 152.2.3NetBIOS 名称解析方式 152.2.4NetBIOS 名称识别策略 162.2.5NetBIOS 名称管理 162.3NetBIOS 会话服务 162.3.1 概述 162.3.2NetBIOS 会话原语 172.4NetBIOS 数据报服务 17- 3 -1、CIFS 协议1.1 CIFS 协议概述通用网际文件系统(CIFS)是微软服务器消息块协议( SMB)的增强版本,是计算机用户在企业内部网和因特网上共享文件的标准方法。CIFS 通过定义一种与应用程序在本地磁盘和网络文件服务器上共享数据的方式相兼容的远程文件访问协议使之能够在因特网上进行协作。定义了

4、客户端向服务器端的请求和服务器端得应答报文。CIFS 数据包格式为标准头部+2 个可变长区域。CIFS 协议有很多版本,每个协议的版本称为一种方言,并分配一个唯一的字符串来识别。当客户端希望访问远程服务器上的文件时,第一次发送的 CIFS 数据包是一个协商版本的数据包。在这个数据包中,客户端列出了自己可以提供的版本字符串。服务器在响应数据包中选择其中一种版本字符串发送给客户端。这样两者就协商出一个 CIFS 协议的版本。1.2CIFS 协议头格式0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 70xFF S M BCo

5、mmand Error class Must be zero Error codeError code(continued) Flags Flags2填充或者安全签名,通常标准的填充是 0树 ID(TID ) 进程 ID(PID)用户 ID(UID ) 多重识别码(MID )wordcount ParameterwordswordcountBytecountBufferbytecount1.2.1 头域每个 CIFS 数据包的开始包含 4 个字节的头。第一个字节是 0xFF,第二个字节是字母- 4 -S的 ASCII 表示,第三个字节和第四个字节分别为M和B 。1.2.2 命令域命令域为 1

6、个字节,用来表示 CIFS 数据包的类型。其各种命令对应的数值见下:SMB_COM_CREATE_DIRECTORY 0x00 SMB_COM_DELETE_DIRECTORY 0x01 SMB_COM_OPEN 0x02 SMB_COM_CREATE 0x03 SMB_COM_CLOSE 0x04 SMB_COM_FLUSH 0x05 SMB_COM_DELETE 0x06 SMB_COM_RENAME 0x07 SMB_COM_QUERY_INFORMATION 0x08 SMB_COM_SET_INFORMATION 0x09 SMB_COM_READ 0x0A SMB_COM_WRIT

7、E 0x0B SMB_COM_LOCK_BYTE_RANGE 0x0C SMB_COM_UNLOCK_BYTE_RANGE 0x0D SMB_COM_CREATE_TEMPORARY 0x0E SMB_COM_CREATE_NEW 0x0F SMB_COM_CHECK_DIRECTORY 0x10 SMB_COM_PROCESS_EXIT 0x11 SMB_COM_SEEK 0x12 SMB_COM_LOCK_AND_READ 0x13 SMB_COM_WRITE_AND_UNLOCK 0x14 SMB_COM_READ_RAW 0x1A SMB_COM_READ_MPX 0x1B SMB_C

8、OM_READ_MPX_SECONDARY 0x1C SMB_COM_WRITE_RAW 0x1D SMB_COM_WRITE_MPX 0x1E SMB_COM_WRITE_COMPLETE 0x20 SMB_COM_SET_INFORMATION2 0x22 SMB_COM_QUERY_INFORMATION2 0x23 SMB_COM_LOCKING_ANDX 0x24 SMB_COM_TRANSACTION 0x25 SMB_COM_TRANSACTION_SECONDARY 0x26 SMB_COM_IOCTL 0x27 SMB_COM_IOCTL_SECONDARY 0x28 SMB

9、_COM_COPY 0x29 SMB_COM_MOVE 0x2A SMB_COM_ECHO 0x2B SMB_COM_WRITE_AND_CLOSE 0x2C SMB_COM_OPEN_ANDX 0x2D - 5 -SMB_COM_READ_ANDX 0x2E SMB_COM_WRITE_ANDX 0x2F SMB_COM_CLOSE_AND_TREE_DISC 0x31 SMB_COM_TRANSACTION2 0x32 SMB_COM_TRANSACTION2_SECONDARY 0x33 SMB_COM_FIND_CLOSE2 0x34 SMB_COM_FIND_NOTIFY_CLOSE

10、 0x35 SMB_COM_TREE_CONNECT 0x70 SMB_COM_TREE_DISCONNECT 0x71 SMB_COM_NEGOTIATE 0x72 SMB_COM_SESSION_SETUP_ANDX 0x73 SMB_COM_LOGOFF_ANDX 0x74 SMB_COM_TREE_CONNECT_ANDX 0x75 SMB_COM_QUERY_INFORMATION_DISK 0x80 SMB_COM_SEARCH 0x81 SMB_COM_FIND 0x82 SMB_COM_FIND_UNIQUE 0x83 SMB_COM_NT_TRANSACT 0xA0 SMB_

11、COM_NT_TRANSACT_SECONDARY 0xA1 SMB_COM_NT_CREATE_ANDX 0xA2 SMB_COM_NT_CANCEL 0xA4 SMB_COM_OPEN_PRINT_FILE 0xC0 SMB_COM_WRITE_PRINT_FILE 0xC1 SMB_COM_CLOSE_PRINT_FILE 0xC2 SMB_COM_GET_PRINT_QUEUE 0xC3 SMB_COM_READ_BULK 0xD8 SMB_COM_WRITE_BULK 0xD9 SMB_COM_WRITE_BULK_DATA 0xDA 1.2.3 错误类域服务器用来指明请求是否成功。

12、通常情况下为 0 表示成功,如果不为零,这个域表示该错误代码是什么类。错误类为以下值之一:ERRDOS (0X01) - 错误是从核心 DOS 操作系统设置ERRSRV (0x02) - 错误是由服务器的网络文件管理器 ERRHRD (0x03) - 硬件错误 ERRCMD (0xFF) - 命令没有在“SMB”格式 1.2.4 错误代码域该域为 2 字节长度,表示已发生的错误的类型。通常为 0 表示没有错误。各种错误对应的数值见下:1.2.5flags 域- 6 -长度为 1 字节,此域包含了 8 个独立的标志。没有设置的标志客户端必须设定为 0,服务器需要忽略该标志。编号从最低位到最高位其

13、定义如下:0:为过时的请求保留位(LOCK_AND_READ,LOCK_AND_CLOSE) ;1:保留位。 (必须为 0) ;2:保留位。 (必须为 0) ;3:设置为 1 时,路径名无视大小写,设置为 0 时,路径名是区分大小写的。4:保留位。 (客户端必须设置为 0,服务器端忽略该位) ;5:为过时的请求保留位(SMB_COM_OPEN,SMB_COM_CREATE,SMB_COM_CREATE_NEW) ;6:为过时的请求保留位(SMB_COM_OPEN,SMB_COM_CREATE,SMB_COM_CREATE_NEW) ;7:设置为 1 时,表示是服务器对客户端请求的应答,其命令域

14、常与客户端请求的命令域相同。该域可以通过设置为 0 和 1 明确区分是请求还是应答。1.2.6flags2 域2 字节,定义了更多的标志位。- 7 -0:设置为 1,表示服务器可能在响应中返回长文件名。(KNOWS_LONG_NAMES)1:设置为 1,表示客户端知道扩展属性。(KNOWS_EAS)2:设置为 1,表示 SMB 需要验证。 (诚信检查?)(SECURITY_SIGNATURE)3:保留位。6:设置为 1,任何请求的路径名为长路径名。 (IS_LONG_NAME)11:设置为 1,客户端知道扩展安全协商。(EXT_SEC)12:设置为 1,SMB 中的任何请求的路径名需在分布式文

15、件系统中解决。 (DFS )13:设置为 1,表明如果客户端没有读权限但有执行权限,读命令被允许。这个标志只对读请求有效。14:设置为 1,返回的错误代码为 32 位。否则错误类和错误域包含 DOS-style 错误信息。当传输协商的 NT 状态代码时,该域在每个 SMB 中都必须为 1。- 8 -16:设置为 1,表示数据包中的字符编码为 UNICODE,设置为 0,表示数据包中的字符编码为 ASCII。1.2.7 填充或安全签名域通常标准的填充是 0,此栏通常设置为 0。1.2.8TID 域TID 是一个 16 位的数字,用来标识这个 CIFS 数据包指的是什么资源(通常为磁盘共享或者打印

16、机) 。当数据包交换没有牵涉到某个资源时,这个域是无意义的,可以忽略的。如果某客户端希望对某资源进行访问,则该客户端发送的 CIFS 数据包中的命令域设置为 SMB_COM_TREE_CONNECT_ANDX。在这个包中就指定共享或者打印机的名称。然后服务器将对该资源和客户端进行验证,然后发送应答表示成功。在这个应答数据包中,服务器可以将 TID 域设置为任何数字。而从那时起,如果客户端希望对该资源提出请求,TID 就会被设置为上次客户端给定的 TID 数字。1.2.9PID 域PID 是一个 16 位的数字,用来标识客户端上的哪个进程发出的 CIFS 请求。服务器使用这个数字来检查并发问题(

17、通常是为了保证文件不会被竞争中的客户端进程所损坏) 。1.2.10UID 域UID 是一个 16 位的数字,迎来标识在客户端发出 CIFS 请求的用户。客户端必须发送一个包含用户名和密码的 CIFS 数据包请求来获得服务器给定的 UID。服务器在验证了用户名和密码之后会应答该请求,该应答中包含一个服务器生成的 UID。之后该客户端在未来的 CIFS 请求中均使用该 UID。如果客户端的请求需要检查权限,服务器将验证请求的UID 有没有必须的权限。一个 UID 只为已形成的 NetBIOS 会话有效。服务器和不同的用户的其他会话可能使用相同的 UID。注意:如果服务器是在共享级的安全模式下,UI

18、D 是无意义的,可以忽略。1.2.11MID 域MID 是一个 16 位数字,用来标识多个客户端的要求。每当客户端发送一个 CIFS 数据包,服务器就检查 MID 来看它是否还有没有应答的请求。如果有,它保证了新要求会被被赋予一个新的 MID 以区别以前的请求。每当服务器应答一个 CIFS 请求时,发送的应答包中确保和相应地请求中的 MID 相同。这样,用户就知道哪些未完成的请求与收到的应答是对应的。1.2.12 Wordcount 和 Parameterwords(参数域)CIFS 数据包使用这两个域来表示命令的具体参数数据。Parameterwords 域是一个可变长(需是 16 位的整数

19、倍) 。Wordcount 域实际表明 parameterwords 域的长度(以 2 字节为- 9 -单位) 。每种数据包类型的 wordcount 域在 CIFS1.0 草案中有定义。每个单独的命令都有 2 个wordcount 定义,一个是给客户端定义的,一个是给服务器端定义的。这是必要的,因为请求和应答不一定需要相同的 wordcount。1.2.13 Bytecount 和 buffer(缓冲区)和 wordcount、parameterwords 的定义非常相似。Buffer 域的长度是可变的。 Bytecount表示 buffer 域有多少字节。参数域和缓冲区的主要区别是存储什么

20、类型的数据。参数域通常包含少量的数据包命令参数选项,而缓冲区包含大量的原始数据(如共享文件中的数据) 。1.3CIFS 协议的安全机制CIFS 提供认证和授权这 2 种安全机制,其中认证又包括共享级认证和用户级认证。A 是一个对 CIFS 客户端标记为网络共享可用的共享服务器(通常是一个文件夹或者打印机) 。限制访问共享文件有两种办法:1.3.1 用户级安全希望访问该共享的客户端必须提供用户名和密码。 (windows NT 和 windows 2000)用户级认证方式为不同用户提供不同的用户名,因此能提供高于共享级认证的安全性,但用户名和口令是以明文方式传送或者虽然加密也容易受到字典攻击,因

21、此也存在被监听和破解的威胁。进一步的改进方法可以加密用户名和口令,还可以利用服务器消息块SMB(Server Message Block)的签名机制实现客户机和服务器之间的双向认证。1.3.2 共享级安全被共享的文件本身需要一个密码来访问,客户端访问不需要用户名,用户的身份不需要确认。 (windows 95 和 windows98)在共享级认证方式下,整个共享点只有一个单一的口令用于共享访问,提供的安全保障有限,只能用于对安全性要求不高的公共资源共享或临时资源共享等场合。1.3.3 加密用户和共享级安全性中,实际的密码是以加密格式发送到服务器的。常用两种加密方法较新的 NT style 和老

22、的 LAN manage style,但两种加密方法均采用挑战-应答认证,服务器向客户端发送一个随机字符串并期望得到响应,客户端将用户名和随机数合并后用HASH 函数生成一个字节串发送给服务器(其在 HASH 函数中使用的密钥就是由口令生成的?)就是这个地方不是很明白,在 HASH 中,这个随机串扮演什么角色。我理解的是:当时用户注册时就将用户名明文存储在服务器中,而密码是经过 HASH(或者其他处理)得- 10 -到的长度确定的字符串存放于服务器中,这样突破服务器只知道用户名,不知道密码。但是这个密码形成的字符串(设为 m)却可以用来验证。客户端将自己的用户名和随机串合并成一个长串,密码再次

23、经过相同的步骤形成定长字符串作为 HASH 的密码使用。即如下式:username(用户名) key(密码) string(随机字符串)m 是处理过的 key,由 key 可以很容易得到 m,由 m 得到 key 很难客户端发送=HASH m(username|string)服务器将该字节串和自己的计算结果比较,若二者相同则通过认证,否则认证失败。1.4CIFS 协议的完整性1.4.1 机会锁机会锁(数据完整性,感觉和数据库中的锁异曲同工) ,当 CIFS 数据包指定打开一个文件,就需要对该文件加一个机会锁,如果服务器将这个文件加锁后,其他客户端实体就不能再访问这个文件。这允许客户端对这个文件

24、进行任何它想要的修改二不需要将其立即写入服务器。1.level II oplock 2.Exclusive oplock3.Batch oplock1.5CIFS 协议包交换流程CIFS 数据包交换流程一共分为两个部分:1.第一部分(当客户端启动与服务器建立连接时):一个 NetBIOS 会话建立、CIFS 版本协商、发送用户名和密码,这样,服务器端的一个资源被连接。2.第二部分:访问一个共享文件从中读取需要的数据。注意:客户端总是发送到服务器的 TCP 的 139 端口,而服务器应答给客户端自己选择的临时端口。此外,以下 CIFS 域可设为下面的默认值,当然也可以根据自己的具体情况进行设定:

25、1.error class/error codes :客户端发送时总为 0,服务器端应答时也为 0。2.Flags:所有数据包均设置成 0x00。 (区分大小写路径)3.Flags2:所有数据包均设置成 0x0001。 (支持长文件名)4.填充和安全签名:所有数据包均设为 0.1.5.1 包交换的第一部分协商和参数传递当 CIFS 客户端确定希望访问 CIFS 服务器上的资源,交换下面的数据包。首先,NetBIOS 会话建立,提供可靠的传输服务。然后,客户端和服务器端协商 CIFS 版本。然后客户端登录到服务器,发送用户名和密码,服务器验证成功后客户端连接到所需的资源。- 11 -1.5.1.

26、1 建立 NetBIOS 会话包 1C-S 请求:目的:建立 NetBIOS 会话( listen 和 call)首先客户端在 139 端口建立一个与服务器之间的全双工 TCP 连接。完成之后,客户端通过建立 TCP 连接和发送 NetBIOS 会话请求数据包。会话的请求报文中包含客户端的 NetBIOS名称,服务器的 NetBIOS 名称和一个整数常量表示数据包的目的是建立一个 NetBIOS 会话。包 2S-C 应答:目的:NetBIOS 会话确认如果上述会话请求数据包中包含服务器的 NetBIOS 名称,而且数据包是正确的格式,服务器会发送一个简单的会话确认数据包(4 字节)来表明会话建

27、立成功或者失败。1.5.1.2CIFS 协议版本协商包 3C-S 请求:目的:CIFS 协议版本协商客户端发送一个 CIFS 请求数据包包含 SMB_COM_NEGOTIATE 命令,缓冲区中包含客户端可以解析的 CIFS 协议版本。具体各个域的值为:Command:SMB_COM_NEGOTIATE(0x72)TID:在这个包中被忽略PID:设置为客户端处理进程的 IDUID:在这个包中被忽略MID:任何唯一的编号Wordcount:0Parameterwords:无Butecount:设置为 119(可根据客户端可以解析的版本数变化)Buffer:包含 119 字节的版本描述包 4S-C

28、应答:目的:CIFS 协议版本协商服务器响应客户端的协商请求,从客户端给定的版本中选择一个。应答数据包中各个域的值为:Command:SMB_COM_NEGOTIATE(0x72)TID:在这个包中被忽略PID:因为是从服务器发送,被忽略UID:在这个包中被忽略MID:匹配客户端发送的唯一的编号Wordcount:取决于选择的版本。Parameterwords:包含选定的版本和许多服务器属性。比较重要的是MAXMPXCOUNT(客户端可以发起的请求最大数)和 32 位能力标志。Bytecount:可变,通常大于 8- 12 -Buffer:通常包含一个 8 字节的随机字符串,在以后的数据包中,

29、客户端用来加密。1.5.1.3 用户登录包 5C-S 请求:目的:用户登录客户端发送 CIFS 数据包,包含用户名和密码,以获得一个 UID。这个数据包也要转发客户端功能给服务器,所以即使使用共享级安全也必须发送这个数据包。数据包各个域的值如下:Command:SMB_SESSION_SETUP_ANDX(0x73)TID:在这个包中北忽略PID:设置为客户端处理进程的 IDUID:在这个包中被忽略MID:任何唯一的编号Wordcount:12Parameterwords:列出了客户端的功能。也包含了要在下面缓冲区中提供的密码的大小。Bytecount:可变值,下面的缓冲区包含加密的用户名、密

30、码、操作系统的名称和 LAN Manager。Bytecount 的值取决于这些尸体的字符串的大小Buffer:包含用户名、密码、操作系统的名称等。包 6S-C 应答:目的:返回给客户端 UID 或者返回错误,如果验证不成功的话。一旦服务器受到加密的用户名和密码,检查后如果是正确的,发送应答数据包,包中包含UID。如果结果是错误的,这个响应将返回错误类,并设置响应的错误代码。数据包的各个域的值如下:Command:SMB_COM_SESSION_SETUP_ANDX(0x73)TID:在这个包中被忽略PID:因为是从服务器发送,被忽略UID:16 位数字,是该服务器分配给客户端的用户身份 ID

31、MID:匹配客户端发送的唯一的编号Wordcount:3Parameterwords:没有和正常操作有关的内容Bytecount:可变值,下面的缓冲区包含说明服务器操作系统和 LAN Manager 类型的字符串Buffer:包含表示服务器操作系统和 LAN Manager 类型1.5.1.4 连接特定资源包 7C-S 请求:目的:连接到特定资源客户端已被认证,可以连接到世界的共享文件。在这个数据包中,客户端指定它希望访问的共享文件。共享名为 UNC 格式。数据包中各个域的值如下:Command:SMB_COM_TREE_CONNECT_ANDX(0x75)TID:在这个包中被忽略PID:设置

32、为客户端处理进程的 ID- 13 -UID:为包 6 中服务器发送的 UIDMID:任何唯一的编号Wordcount:4Parameterwords:没有与正常操作有关的内容Bytecount:可变值,取决于一下要求的 UNC 字符串的大小Buffer:包含客户端希望访问的共享的名称包 8S-C 应答:目的:返回 TID 或者错误,如果共享名称不存在如果共享名称存在,也拥有访问权限,则服务器返回一个成功的响应和 TID。如果共享不存在或者用户不具有访问权限,服务器返回相应地错误类和错误代码。如果这个数据包是一个表示成功的响应,则客户端可以访问既定的共享文件了。这是客户端和服务器交换的最后的数据

33、包。数据包中各个域的值如下:Command:SMB_COM_SESSION_SETUP_ANDX(0x73)TID:16 位数字代表服务器分配给指定共享资源的 TIDPID:因为是从服务器发送,被忽略UID:16 位数字,是该服务器分配给客户端的用户身份 IDMID:匹配客户端发送的唯一的编号Wordcount:3Parameterwords:没有与正常操作有关的内容Bytecount:可变值,取决于下面的缓冲区Buffer:包含本地文件系统和设备类型的字符串1.5.2 包交换的第二部分数据交换以打开和读取文件数据为例。1.5.2.1 属性、操作等参数传递包 1C-S 请求:目的:打开一个文件

34、数据包中各个域的值如下:Command:SMB_COM_OPEN_ANDX(0x2D)TID:上面服务器应答给定的 TIDPID:设置为处理客户端处理进程的 IDUID:设置为服务器返回的表示客户端的 UIDMID:任何唯一的编号Wordcount:15Parameterwords:指定模式(读、写或者读写)和共享模式(无、读、写)等许多开放的选择Bytecount:可变值,依赖于文件名的字符串Buffer:包含要打开的文件的名称包 2S-C 应答:- 14 -目的:显示文件的 ID,或者如果有问题则返回错误代码服务器检查,如果请求的文件名存在,且 UID 指定的用户有权访问该文件,则发送一个

35、响应包,其中包含 FID 以便以后对该文件的访问。如果条件不满足,服务器返回相应地错误类和错误代码。数据包中各个域的值如下:Command:SMB_COM_OPEN_ANDX(0x2D)TID:16 位数字代表服务器分配给指定共享资源的 TIDPID:因为是从服务器发送,被忽略UID:16 位数字,是该服务器分配给客户端的用户身份 IDMID:匹配客户端发送的唯一的编号Wordcount:15Parameterwords:表明要发生动作的类型的许多标志和非常重要的 16 位 FIDBytecount:0Buffer:没有数据1.5.2.2 数据交换包 3C-S 请求:目的:从文件中读取数据包中

36、各个域的值如下:Command:SMB_COM_READ_ANDX(0x2E)TID:16 位数字代表服务器分配给指定共享资源的 TIDPID:设置为客户端处理进程的 IDUID:16 位数字,是该服务器分配给客户端的用户身份 IDMID:任何唯一的编号Wordcount:10Parameterwords:包含 FID 使得服务器端知道客户端要打开那一个文件。还包含一个 32 位文件编译和 16 位计数值,用来决定有多少文件数据返回Bytecount:0Buffer:没有数据包 4S-C 应答:目的:返回文件中的数据数据包中各个域的值如下:Command:SMB_COM_READ_ANDX(0

37、x2E)TID:16 位数字代表服务器分配给指定共享资源的 TIDPID:因为是从服务器发送,被忽略UID:16 位数字,是该服务器分配给客户端的用户身份 IDMID:匹配客户端发送的唯一的编号Wordcount:12Parameterwords:表明实际读的数据的长度(?)Bytecount:可变值Buffer:客户端所要求的文件数据- 15 -2、NetBIOS 协议2.1NetBIOS 协议概述NetBIOS 协议是由 IBM 公司开发,主要用于数十台计算机的小型局域网。NetBIOS 协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集

38、,作用是为了给局域网提供网络以及其他特殊功能,几乎所有的局域网都是在 NetBIOS 协议的基础上工作的。2.2 NetBIOS 名称服务2.2.1NetBIOS 名称:NetBIOS 具备独立的名称解析概念和能力,其使用的名称解析方式和 TCP/IP 标准解析方式不同。如果经过 NetBIOS 名称解析并获得相应地 IP 地址后,NetBIOS 会话就可以建立普通的 TCP 连接了。NetBIOS 的名字解析是动态的。计算机必须先注册自己的名称然后才能解析该名称。虽然动态解析很方便,但由于其复杂性和低效性,使得 NetBIOS 只能使用于小范围的局域网。2.2.2NetBIOS 名称属性与格

39、式:1.已注册的 NetBIOS 名称唯一指代一台工作站或者组名;2.和 IP 地址类比,NetBIOS 名称没有分层格式,即没有“点”(“.” 字符) ;3.NetBIOS 名称必须包含 A-Z、a-z、0-9 范围之内的字符,或者 $( ) - . 字符之一;4.NetBIOS 命名允许 16 个字母用在 NetBIOS 名称中。而微软只允许 15 个字母用在- 16 -NetBIOS 名称中,第十六个为 NetBIOS 后缀。NetBIOS 后缀用在 Microsoft Networking 软件中,区别安装的功能,登记的设备和服务。 2.2.3NetBIOS 名称解析方式:1.本地广播

40、。可以通过广播某设备的 NetBIOS 名称查找对应的 IP 地址,也可通过广播注册自己的 NetBIOS 名称。 (通过广播本设备的名称向其他设备宣告自己使用了这个 NetBIOS名称) ;2.缓冲。每个支持 NetBIOS 的计算机中维护一个 NetBIOS 名称和对应 IP 地址的列表;3.NetBIOS 名称服务器(NBNS) ;4.预定义文件 lmhosts;5.DNS 和 hosts 文件配合识别。2.2.4NetBIOS 名称识别策略:1.B-node:通过广播方式来进行注册和识别 NetBIOS 名称。对 IP 协议上的 NetBIOS 需要基于 UDP 进行广播。适用于小网络

41、;2.P-node:使用 NetBIOS 名称服务器进行名称注册登记和名称识别;3.M-node:综合使用广播和 NBNS 服务器。首先通过 B-node 广播方式进行名称识别过程,广播方式失败后再使用 P-node 方式查询;4.H-node:首先查找 NBNS 服务器,然后再使用广播方式查询。windows 实际使用的是对标准 H-node 方式的扩展。windows 系列的计算机首先检查缓存中的内容,然后再查看 WINS 服务器( Miscrosoft 实现的 NBNS 名字服务器为 WINS) ,之后进行广播,然后将查找 lmhosts 文件,以及通过 hosts 和 DNS 进行查找

42、。实际进行的NetBIOS 识别是非常复杂的过程。2.2.5NetBIOS 名称管理:名称注册:NetBIOS 启动时,计算机向整个网络声明占用一个 NetBIOS 名称,如果该名称已被占用,返回错误信息。两种方法:向网络广播、向 NetBIOS 名称服务器登记。名称更新:每个名称都有个生存期 TTL,当经历了这个 TTL 的一半时间,客户会向服务器请求更新,刷新服务器上的 TTL 设置。名称解析:通过广播或查询 NBNS 服务器来解析,也可通过 lmhosts 和 DNS 辅助解析。名称删除:在系统关机或者提供的工作站服务结束时,会删除其占用的 NetBIOS 名称。当名称的 TTL 超时时

43、也会删除这个名称。2.3NetBIOS 会话服务:2.3.1 概述NetBIOS 会话服务提供给用户程序一种面向连接的可靠的完全双长的信息服务。要求一个是客户端程序,一个是服务器端程序。- 17 -每个会话数据包仅在数据前加一个表示数据大小的头部。CIFS 的使用 NetBIOS 会话服务来发送和接收上层命令,其中包括文件共享和远程打印等。因此 CIFS 通信的第一步是客户端和服务器之间建立一个 NetBIOS 会话。2.3.2NetBIOS 会话原语:1.listen2.call 3.hang up4.send5.recieve6session status2.4NetBIOS 的数据报服务:NetBIOS 数据报是无连接的非可靠的。其数据包的头包含报的发送者的 NetBIOS 名称和是否使用 UDP 发送。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报