[IT] 网络文件共享系统(CIFS)

服务器消息区块英语Server Message Block,缩写为SMB,服务器消息区块),又称网络文件共享系统英语Common Internet File System,缩写为CIFS),一种应用层网络传输协议,由微软开发,主要功能用是使网络上的机器能够共享计算机文件打印机串行端口和通讯等资源。它也提供认证的进程间通信机能。它主要用在装有Microsoft Windows的机器上,在这样的机器上被称为Microsoft Windows Network。

经过Unix服务器厂商重新开发后,它可以用于连接Unix服务器和Windows客户机,执行打印和文件共享等任务。

与功能类似的NFS相比,NFS的消息格式是固定长度,而CIFS的消息格式大多数是可变长度,这增加了协议的复杂性。CIFS消息一般使用NetBIOSTCP协议发送,分别使用不同的端口139或445,目前倾向于使用445端

实现

客户端-服务器端结构

SMB使用点对点的通讯方式,一个客户端向一个服务器提出请求,服务器相应地回答。SMB协议中的一部分专门用来处理对文件系统的访问,使得客户端可以访问一个文件服务器SMB也有进程间通信的部分。SMB协议尤其适用于局部子网,但是也可以被用来通过万维网来链接不同的子网。Microsoft Windows的文件和打印机分享主要使用这个功能。

SMB服务器向网络上的客户端提供文件系统和其它资源。客户端电脑也可能有其自己的、不共享的硬盘,但是可能也想使用服务器上分享的文件系统和打印机。这是SMB为什么这么出名和广泛地被使用的原因。SMB普及的另一个原因是它使用适合NT网域的协议,至少提供基于NT网域式的认证。NT网域协议是一个微软远程过程调用服务,几乎只能被SMB进程间通讯命名管道使用。几乎所有SMB服务器的实现使用NT网域来认证用户是否可以访问一个资源。

性能问题[编辑]

一般认为SMB协议会占用很多网络带宽,因为每个客户端均在整个子网内广播其存在。但是SMB本身并不使用广播。SMB造成的广播问题实际上是NetBIOS的服务定位协议造成的。一般来说Microsoft Windows服务器使用NetBIOS来协议和定位服务。而NetBIOS则定时向一个特定的服务器广播一个服务的存在。对于一个少于20个服务器的网络来说这个方式是可行的。但是随服务器数目的增加广播造成的交通会导致问题。通过适当地实现WINS定位协议这个问题可以被缓和。WINS使用更高级的系统来确定和中央化服务需求,但是造成自己的设计和保管网络的问题。动态DNS是另一个解决方法。微软本身推荐在微软的活动目录环境下使用动态DNS。网络延迟对SMB协议的速度有非常大的冲击。在服务器之间网络延迟大的情况下通过SMB来更换档案夹非常明显地反映了这个问题。比如在通过万维网使用虚拟专用网时网络延迟就会比较大,这时使用SMB就很恼人。

口。CIFS的消息包括一个信头(32字节)和消息体(1个或多个,可变长)。

下面是看到的一篇博客关于java访问共享文件的实现,使用的jcifs-1.1.11.jar

import jcifs.smb.SmbFile;

/**   
 * java访问共享目录
 *
 * @author 
 * @version 1.0 2013-7-16 上午09:18:38   
 */
public class SmbTest {

    public static void main(String[] args) throws Exception {
        //smb://xxx:xxx@192.168.2.188/testIndex/  
        //xxx:xxx是共享机器的用户名密码
        String url="smb://192.168.2.188/testIndex/";
        SmbFile file = new SmbFile(url);
        if(file.exists()){
            SmbFile[] files = file.listFiles();
            for(SmbFile f : files){
                System.out.println(f.getName());
            }
        }
    }
}

 

参考资料:

 

http://jcifs.samba.org/

服务器消息区块--维基百科

 

posted @ 2015-04-13 18:31  snow__wolf  阅读(1503)  评论(0)    收藏  举报