SEARCH

ftp、nfs、smb文件传输协议比较

2018年04月28日

协议相同点:

都可以 实现文件传输系统


协议不同点: 

FTP(File Transfer Protocol,文件传输协议),应用层协议,可跨平台。如其名,只能实现文件传输功能,不能实现一些其他的功能,例如文件系统挂载等功能。

NFS(Network File System,网路文件系统),工作在内核模式下的,故难以实现跨平台。由于基于文件系统实现,在linux下可实现挂载使用等功能。

SMB(Service Message Block,服务消息块协议),能够实现Windows和Linux主机之间的文件共享服务,可实现跨平台,在Linux上实现了CIFS(Common Internet File System)协议。


ftp、nfs、smb文件传输协议比较


FTP协议工作模式

主动模式:

客户端请求服务端的21端口先建立命令连接

服务端响应客户端,并以5000+随机端口与客户端建立数据连接

开始数据传送

属于C/S(Client/Server)架构,基于套接字通信。

FTP协议用到2种不同的tcp连接:一是命令连接,用于服务端与客户端命令的传达,监听在tcp/21端口;另一个是数据连接,用来传输数据,监听的端口是随机的。

注:考虑到客户端防火墙很可能将服务端建立连接产生随机的端口拒之门外,故被动模式产生了     


被动模式:

客户端请求服务端的21端口先建立命令连接

客户端使用5000+随机端口用命令连接请求数据连接

服务端收到请求后随机产生端口,反馈给客户端。p1 p2

客户端使用5000+端口与服务端随机端口(p1*256+p2)之间传输数据

注:被动模式也会存在防火墙问题,但服务端防火墙有连接追踪功能以解决此问题。故被动模式用的较多


用户认证

匿名用户:登录名是anonymous,且不须密码

系统用户:FTP服务端本地用户和密码,默认访问的是用户家目录

虚拟用户:仅用于访问服务端特定资源。可指定用户文件或数据库来使用。最终会将虚拟用户映射为系统用户,所以默认访问的为系统用户家目录


常见FTP工具:

服务端

Linux端:vsftpd,pureftp....

windows端:SerU,FileZilla-Server...

客户端

Linux端:ftp,lftp,lftpget,wget,curl...

windows端:FileZilla


NFS协议

RPC(Remote Procedure Call Protocol)远程过程调用协议

一部分功能由本地程序完成 另一部分功能由远程主机上的函数完成。客户端挂载了nfs服务器的文件系统时,进行一些操作。但该协议是在内核级别上实现的协议,RPC正是处理该问题的协议,它会将客户端的操作的函数调用发送到服务器端,由服务器端执行这些函数调用。

idmapd

想想这种情形,nfs客户端在挂载文件系统以后,在本地以某用户的身份创建了一个文件,在服务器端这个文件的属主和属组是哪个用户呢?早期是通过NIS(Network Information Services网络信息服务)来解决这个问题的,但是在传输账号和密码时,使用的是明文传输,现在使用LDAP+clbbler来实现的。但是,NFS使用的是idmapd这个服务,有rpc提供,将所有的用户后映射为nfsnobody,但是在访问的时候,还是以本地UID对应的本地用户来使用的。

mounted

NFS是通过什么来控制那些客户端可以访问,那些不可以访问的呢?NFS只支持通过IP来控制客户端,而这个功能是由守护进程mounted来实现的,它监听的端口是半随机的。所谓的半随机指的是,这个随机端口是由rpc服务来决定的,而rpc是通过随机的方式。作用等等同于小区大门保安的作用。


NFS请求过程

请求过程:当客户端试这去挂载使用nfs共享的文件系统是,客户端首先回去与postmapper(tcp/111)端口去注册使用,此时postmapper会随机分配一个端口给mounted,然后mounted这个守护进程会来验证客户端的合法性,验证通过后,会把请求交给nfs服务,客户端此时可以挂载使用了,用户在创建文件时,会使用到idmapd的守护进程来映射属主。其实idmapd也是有rpc服务提供的,只不过在这里,nfs服务使用到用户映射的功能时,会自动的去调用此守护进程。


SAMBA协议

SMB:Service Message Block

CIFS:Common Internet File System 通用网络文件系统,windows系统之间共享的协议,samba实现了该协议,故可实现windows与linux之间的文件共享服务

监听的端口:

tcp/137 udp/137 tcp/139 udp/139

137:是实现NetBIOS协议,实现解析windows之间主机名的解析,实现在windwos的网络邻居可看到的Linux主机名

139:是实现cifs协议

交互式数据访问;

smbclient -L HOST -U USERNAME

获取共享信息后:

smbclient //SERVER/shared_name -U USERNAME

基于挂载的方式访问;

mount -t cifs //SERVER/shared_name  /mount_point -o uername=USERNAME,pasword=PASSWORD

Contact

大同市城区西环路168号

致力于做服务最好的网站建设公司

将 " 策划+创意+体验+技术 " 完美融合 !

Wechat

微信公众号