网络文件系统(Network File System)
•上次讲了文件传输,文件传输是实现网络文件共享的一种方式,它是通过在本地获得一个文件的全文拷贝而实现的,文件在改变后需要重新获取新的拷贝。另外还有一种方式:在线访问。
–在线访问是指允许多个进程同时访问单一文件,文件的改变对访问此文件的进程是立即有效的。
–在线文件数据共享更易使用,对远程系统共享文件的访问是透明的。即通过在线共享存取,远程文件与本地文件对用户而言看上去是没有差别的。
•其显著的问题在于
–当进程调用远程系统中的文件时,可能由于远程系统宕机而在本地无法发现,或者远程系统出现拥塞而导致本地进程执行速度减慢。
–同时,对于异质系统之间的文件调用,执行时更为复杂,因为需要考虑系统环境导致的诸多差别(如文件名的不同)。
•起初由Sun微系统公司开发的NSF提供在线共享文件存取,目前许多TCP/IP协议族使用NFS与计算机文件系统相连。
•NFS需要执行两个方面的任务,其一是访问文件,其二需要利用TCP/IP协议。我们主要关注的是与网络通信相关的第二个方面,其基础是远程过程调用(Remote Procedure Call)。
•远程过程调用(Remote Procedure Call)
•大多数的网络程序设计都是使用网络应用程序编程接口(API)提供的函数编写完成特定网络操作的应用程序。而远程过程调用则是一种不同的网络程序设计方法。其内部过程如下:
–当客户程序调用远程的过程时,它实际上只是调用了一个位于本机上的、由RPC程序包生成的函数。这个程序被称为客户残桩(stub)。客户残桩将过程的参数封装成一个网络报文,并且将这个报文发送给服务器程序。
–服务器主机上的一个服务器残桩负责接收这个网络报文,从报文中提取参数,然后调用服务器过程
–当服务器函数返回时,它返回到服务器残桩。服务器残桩提取返回值,把返回值封装成一个网络报文,再发给客户残桩
–客户残桩从接收到的网络报文中取出返回值,将其返回给客户程序。
•但这些内部过程对客户程序是透明的,客户程序只是调用服务器过程,中间过程都被PRC程序包、客户残桩以及服务器残桩所隐藏。
•RPC程序包提供了很多好处:
–程序设计更加简单,很少涉及网络编程。应用程序设计员只需要编写一个客户程序和客户程序调用的服务器过程。
–RPC库为参数和返回值的传输提供任何需要的数据转换,简化了在异质环境中的客户和服务器的编码问题。
•
•两个常用的RPC程序包是Sun RPC和开放软件基金(OSF)分布式计算环境(DCE)的RPC程序包。NFS就是使用Sun RPC来构造的客户服务器应用程序。NFS客户通过向一个NFS服务器发送RPC请求来访问其上的文件。
•NFS协议(RFC 1094 v2 1988)
•使用NFS,客户可以透明地访问服务器上的文件和文件系统。这意味着任何能够访问一个本地文件的客户程序不需要做任何修改,就应该能够访问一个NFS文件。
•NFS使用Sun RPC来构造的客户服务器应用程序。NSF客户通过向一个NFS服务器发送RPC请求来访问其上的文件。尽管这一工作可以使用一般的用户进程(客户和服务器都是一个用户进程,客户显式调用服务器)来实现,但由于两个原因而一般不这样做:
–访问NFS文件必须对客户透明。因此,NFS的客户调用是由客户操作系统代表用户进程来完成的。
–出于效率的考虑,NFS服务器在服务器操作系统中实现。如果NFS服务器是一个用户进程,那么,每个客户请求和服务器应答(包括读和写的数据)将不得不在内核和用户进程之间进行切换。这个代价太大。
•
•典型配置
•说明
–访问的是一个本地文件还是一个NFS文件对客户来说是透明的,只有内核知道。文件打开时,内核将对它们区别处理。
–NFS客户通过它的TCP/IP模块向NFS服务器发送RPC请求。NFS主要使用UDP,最近的也有使用TCP。
–NFS服务器在端口2049接收作为UDP数据包的客户请求。尽管NFS允许服务器使用一个临时端口,但是大多数的实现都是直接指定UDP端口2049。
–当NFS服务器收到一个客户请求时,它将这个请求传递给本地文件访问例程,后者访问服务器主机上的一个本地磁盘文件。
–NFS服务器需要花一定时间来处理一个客户的请求。访问本地文件系统一般也需要一些时间。在这段时间中,服务器不应该阻止其他的客户请求得到服务,为了实现这个功能,大多数的NFS服务器是多线程的。
–同样,在客户端,为实现并发访问,一般也在内核中运行多个NFS客户。
•另一个相关的工具:
•外部数据表示(eXternal Data Representation)(RFC 1014)
•XDR是一个标准,用来对RPC调用报文和应答报文中的值进行编码。采用标准化的方法对这些值进行编码使得一个系统中的客户可以调用另一个异质系统中的进程。
•XDR定义了很多数据类型以及它们如何在一个RPC报文中传输的具体形式(如比特顺序、字节顺序等等)。发送者必须用XDR格式构造RPC报文,然后接收者将XDR格式的报文转换为本机的表示形式。
•Sun RPC报文格式(对于基于运输层的Sun RPC)
领取专属 10元无门槛券
私享最新 技术干货