注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

:笑解:NAS协议之NFS  

2013-06-21 07:00:08|  分类: 大文件系统 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

     多种操作系统的存在,为了实现各系统问的文件共享,出现了多种不同系统间的文件共享方案。在类unix体系下,NFS就是大家通用的一种方案。

     NFS的全称是Network File System,即网络文件系统。它使一台电脑可以通过网络访问另外一台电脑上的共享,使用起来就如同本地文件系统一样方便。

  比如,你共享一整个文件系统,不过,过几几天就有校友在上面放了很多小电影,还经常更新。可见共享不仅是奉献,有时候还有收获,感谢共享协议的开发者们!

    NFS的开发者就是曾经名震江湖的SUN公司,它已经在三年前被甲骨文收入门下。SUNNFS的第一个版本NFSv1藏在深闺,就像古墓里的小龙女,从不露面。等到在江湖上开始流行NFS,已经是第二版NFSv2了。NFSv2很好用,但是问题也不少,比如它不支持大于2GB的文件,但这在90年代之前还不是大问题。令人费解的是,虽然NFSv31995年就面世了,但到今天还有人坚持用NFSv2

    其实NFS可以工作在任何OS上。只不过因为门派之别,一般只在类Unix环境中使用。目前广泛应用的版本还是NFSv3,下图展示了多台客户端通过NFSNAS的访问。

:笑解:NAS协议之NFS - lzdzhy-itoedr - itoedr的it学苑
     NAS在这里充当了NFS服务器的角色,而Linux,Solaris和AIX则是NFS客户机。NFS的功能很多,不同的功能对应着不同的daemon。比如一定要有的nfsd和mountd,还有可选的lockd和statd。

    每个daemon都需要占用一些端口,但有些daemon是可选的,也许用户根本不会启用它们。所以,NFS并没有给每个NFS daemon保留固定端口(除了nfsd)。而是在系统启动时给需要启用的NFS daemon分配端口,然后把这些端口号告诉RPC daemon。RPC daemon的端口号是固定的111,每个NFS客户机都知道怎么联系它。当客户机需要连接NFS的某个daemon时,就不得不先咨询RPC daemon,获得该NFS daemon对应的端口号,然后再发送NFS请求。

    我第一次看到RPC daemon的工作原理,就想起交大管浴室的老头。他的固定地址是门房(相当于端口111),每个要洗澡的学生(NFS客户机)都知道怎么找到他,他会给你一个带号码的钥匙(端口号),有了这个号码,你就可以找到相应的格子(NFS daemon)放衣服了。

    很少有人会对自己的共享不加限制,像我一样收获小电影的毕竟是少数,大多数人收获的是恶作剧。NFS通过限制客户机(比如IP地址, hostname等)访问来实现安全控制。下表列举了一些NFS服务器端的参数: 

 root  该参数定义了对该共享有root权限的客户机。当然只对UID=0有效。
 rw  该参数定义了对该共享有读写权限的客户机。
 ro  该参数定义了对该共享有只读权限的客户机。
 access  该参数定义了能挂载该共享的客户机。

     这些配置只能限制一整台客户机,无法限制到具体用户。比如某台客户机被限制为rw,那该机的所有用户都可能有读写权限。这显然是不够安全的,但NFS协议 本身又无法识别具体用户的权限。为了解决这个问题,NFS服务器端利用本地权限(rwxrwxrwx,以及owner和group),结合客户端的UID 和GID来确定客户端权限。这个机制要求NFS客户机上的User-UID-Group必须都能在服务器上找到,否则容易造成混乱。个人认为NIS是一个 很好的选择,我们有机会再另文讨论。

    NFS服务器上的共享创建好了之后,客户端就可以挂载(mount)了。挂载的参数很多,我们只介绍对性能影响较大的几个:

 rsize 客户端每次从NFS服务器读取数据时的大小,在没有拥塞的情况,增大该值能提高传输速度。比如一个64KB的文件,rsize=16KB时需要传4次;rsize=32KB时就只要2次。
 wsize 客户端每次往NFS服务器写数据时的大小。对性能的影响类似rsize。这两个size和TCP层的重传也有关系,我们会在NAS性能分析时详解。
 async 数据存入cache即算写操作完成。可以提高性能,但有一定安全问题。
 sync 数据要存入硬盘才算写操作完成,影响性能。该参数还会强制wsize变成一个page的大小。

     挂载之后,我们就可以使用该共享了。我在lab里挂载了一个文件系统(/paddy_fs_01),然后读取其中一个文件(abc.txt)。命令如下:

[root@NISclient ~]# mount 10.32.106.25:/paddy_fs_01 paddy_fs_01
[root@NISclient ~]# cp paddy_fs_01/abc.txt abc.txt

    为了更好的说明NFS的工作原理,我把全过程抓了包。把其中不重要的包过滤掉之后,我们可以这样解读(下列序号与截图中的包号相对应):

1. 客户机:RPC,请问nfsd的端口号是多少呀?

2. 服务器:是2049。

3. 客户机:那我测试一下2049通不通。

4. 服务器:收到了,是通的。

5. 客户机:RPC,请问mountd的端口号是多少呀?

6. 服务器:是1234。

7. 客户机:那我测试一下1234通不通。

8. 服务器:收到了,是通的。

9. 客户机:我要挂载 /paddy_fs_01。

10.服务器:(根据该共享的配置,这台客户机有挂载权限,所以)你的请求被批准了。

11.客户机:我测试一下挂上了没有。

12.服务器:挂上了啦。

13.客户机:我想看看这个文件系统的属性。

14.服务器:给,就这些。

...挂载结束,读abc.txt开始:

17. 客户机:我要访问 /paddy_fs_01。

18. 服务器:来吧,(根据你的UID)你有读,查询,更改,扩展和删除的权利。

19. 客户机:我想看看有哪些子目录。

20. 服务器:看,就这些。

21. 客户机:我想看看abc.txt的属性。

22. 服务器:File Mode等属性都在这了。

23. 客户机:我还想再看看。

24. 服务器:再给你一次好了。

25. 客户机:我想访问abc.txt。

26. 服务器:你有权限的,访问吧。

27. 客户机:我要读abc.txt,从0开始读16384字节。

28. 服务器:给。

29. 客户机:我要读abc.txt,从16384开始读32768字节。

(被过滤掉的包,服务器传输32768字节给客户机。)

30. 客户机:我要读abc.txt,从49152开始读32606字节。

(被过滤掉的包,服务器传输32606字节给客户机。)

NAS相关协议之NFS

  评论这张
 
阅读(91)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017