网络文件系统协议

【网络文件系统协议】1.简介
Sun的网络文件系统(NFS)协议提供了对网络中的共享文件进行透明的远程访问 。NFS协议被设计为适合于不同的机器,操作系统,网络体系和传输协议 。这种广泛的适应性是通过使用建立在外部数据描述(XDR)之上的远程过程调用(RPC)原语得到的 。此协议的实现已经存在于从个人电脑到超级电脑等不同种类的机器之上,。
对安装协议的支持答应服务器分发远程访问优先级给一个受限制的客户集 。它执行了操作系统特定的功能,以答应把远程目录树链接在本地的文件系统上 。
1.1远程过程调用
Sun的远程过程调用规范提供了一个面向过程的远程服务的接口 。.每一个服务器都提供了一个包含着一组过程的“程序” 。NFS就是一种这样的程序 。主机地址,程序号和过程号的组合指定了一个远程过程 。NFS的一个目标就是不需要它的下层提供任何特定级别的可靠性 。所以,它潜在地可以被使用在许多下层的传输层协议之上,甚至在另一个远程过程调用实现之上 。为了便于讨论,本文档的剩余部分假定NFS实现在Sun的RPC上层 。
1.2外部数据描述
外部数据描述(XDR)标准提供了一个在网络上描述数据类型的公用方法 。NFS协议规范就是使用RPC数据描述语言撰写的 。要想获得更多的信息,请参见RFC1014"XDR:外部数据描述标准" 。尽管存在自动化的RPC/XDR编译器可以产生服务器和客户端的“桩”(stubs) 。NFS也不需要使用它们 。任何提供相同功能的软件都可以使用,假如编码完全相同的话,它也可以与其它的NFS实现进行互操作 。
1.3无状态服务器
NFS协议被希望尽可能无状态 。也就是说,服务器应该不必保持关于它的客户端的任何协议状态信息,这是为了功能正确 。在失败的事件发生的时候,无状态服务器比有状态服务器有着明显的优点 。在无状态服务器中,客户端仅仅需要重发请求直到服务器响应;客户端甚至不需要知道服务器已经崩溃或者是网络临时故障 。而有状态服务器的客户端要么需要检测服务器失败,并且在服务器恢复的时候重建服务器状态,要么使客户端操作失败 。
这可能听起来不象是一个重要的问题,但是它在一些意想不到的情况下影响着协议 。我们认为只要能写一个非常简易的服务器,不需要在崩溃后花费昂贵的代价恢复,即使在协议中多一些额外的复杂性也是值得的 。注重:即使使用号称“可靠”的传输协议TCP的时候,客户端也必须能够处理当它们超时的时候再次打开连接所产生的服务的中断 。因此,无状态协议实际上可以使这个实现简化 。
另一方面,NFS处理文件、目录这样本身就有状态的对象 。假如文件不保持它的内容没被接触过会有什么好处呢?这样做的目的就是在协议本身不引入任何额外的状态 。固有的状态操作,诸如文件或者记录锁定和远程执行都作为分开的服务实现,在此不讨论 。
简化恢复的基本方法就是尽可能的采取“幂等”操作(为了它们有被重复的潜力) 。这个协议版本中的一些操作并不能达到这个目的;幸运的是,大多数操作(例如Read和Write)是幂等的 。而且,多数服务器失败发生在操作之间,而不是发生在收到操作和响应之间 。最后,尽管实际上服务器的失败可能很少,但是在复杂的网络中,任何网络,路由器或者网桥的失败与服务器的失败都是很难区分的 。
2.NFS协议定义
服务器随着时间改变,服务器使用的协议也一样 。RPC对每一个RPC请求都提供了一个版本号 。RFC已经定义了NFS协议的两个版本 。即使在第二版中,也有少部分过时的过程和参数,这将在以后的版本中被删除 。NFS协议第三版的RPC当前正在预备之中 。(译者注:这是相对此RFC文档发布的时间来讲的,此文档发表于1989,3)

推荐阅读