nfs其最大功能时可以通过网络让不同操作系统的计算机可以共享数据,所以也可以将其看作时一台文件服务器.
NFS有属于自己的协议与使用的端口号,但是在传送资料或者其他相关信息时候,NFS服务器使用一个称i“远程过程调用”(RPC)的协议来协助NFS服务器本身的运行
NFS协议:
使用NFS,客户端可以透明地访问服务器中的文件系统,这不同于提供文件传输的FTP协议,FTP会产生文件一个完整的副本;NFS只访问一个进程应用文件部分,并且一个目的就是使用这种访问透明,这意味着任何能够访问一个本地文件的客户端程序不需要做任何修改,就应该能访问一个NFS文件。
NFS是一个使用SunRPC构造的客户端/服务器应用程序,器客户端通过向一台NFS服务器发送RPC请求来访问其中的文件,尽管这一工作可以使用一般的用户进程来实现,即NFS客户端可以是一个用户进程,对服务器进行显示调用,而服务器也可以是一个用户进程。因为两个理由,NFS一般不这样实现。首先访问一个NFS文件必须对客户端透明,因此NFS客户端调用是由客户端操作系统代表用户进程来完成的;其次,出于效率的考虑,NFS服务器在服务器操作系统中实现。如果NFS服务器是一个用户进程,每个客户端请求和服务器应答(包括读和写的数据)将不得不在内核和用具进程间切换,这个代价太大,第3版的NFS协议在1993年发布,NFS客户端和一台NFS服务器的典型结构。
(1)访问一个本地文件还是一个NFS文件对于客户端来说是透明的,当文件被打开时,由内核决定这一点。文件被打开后,内核将本地文件的所有引用传递给名为“本地文件访问”的框中,而将一个NFS文件的所有应用传递给名为“NFS客户端”的框中。
(2)NFS客户端通过其TCP/IP模块向服务器发送RPC请求i,NFS主要使用UDP,最新的实现也可以使用TCP
(3)NFS服务器在端口20149接收为UDP数据包的客户端请求,尽管NFS可以被实现为使用端口映射器,允许服务器使用一个临时端口,但是大多数实现都是直接指定UDP端口2049
(4)当NFS服务器收到一个客户端请求时,它将这个请求传递给本地文件访问历程,然后访问服务器主机上的一个本地磁盘文件。
(5)NFS服务器需要花费一定的时间来出俩一个客户端的请求,访问本地文件系统一般需要一部分时间。在这段时间间隔内,服务器不应该组织其它客户端的请求。为了实现这一功能,大多数的NFS服务器都是多线程的--服务器的内核中实际上由很多个NFS服务器在NFS本身的加锁管理程序中运行,具体实现以来于不同的操作系统。既然大多数UNIX内核不是多线程的,一个共同的技术就是启动一个用户进程(常称为“NFSD”)的多个实例。这个实例执行一个系统调用,使其作为一个内核进程保留在操作系统的内核中
(6)在客户端主机上,NFS客户端需要花一定时间来处理一个用户进程的请求。NFS客户端向服务器主机发出一个RPC调用,然后等待服务器的应答。为了给使用NFS客户端主机上的用户进程提供更多的并发性,在客户端内核中一般运行着多个NFS客户端,同样具体实现也依赖于操作系统。
RPC
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会器用一些端口来传输数据,因此NFS功能多对应的端口才没有固定,而是采用随机取用一些未被使用的小于724的端口来作为传输之用。但如此一来又造成客户端要连接服务器时的困扰,因为客户端哟啊知道服务器的相关端口才能联机,此时我们需要远程过程调用(RPC)的服务。RPC最主要的功能就是指定每个NFS功能所对应的端口号,并且回报给客户端,让客户端可以连接到正确的端口上。当服务器在启动NFS时会随机选用数个端口,并主动地向RPC注册。因此RPC可以知道每个端口对应的NFS功能。然后RPC固定使用端口111来监听客户端的请求并回报客户端正确的接口,所以可以让NFS的启动更为容易。注意,启动NFS之前,要先启动RPC;否则NFS无法向RPC注册。另外,重新启动RPC时原本注册的数据会不见,因此RPC重新启动后它管理的所有程序都要重新启动以重新向RPC注册。
当客户端有NFS文件要存取请求时,它如何向服务器端要求数据?
(1)客户端会向服务器端RPC(port 111)发出NFS文件存取功能的询问请求
(2)服务器端找到对应的已注册的NFS-damon端口后会回报给客户端。
(3)客户端了解正确的端口后,就可以直接于NFS守护进程联机。
由于NFS的各项功能都必须向RPC注册,因此RPC才能了解NFS服务的各项功能的port number, PID和NFS在主机监听的IP等,而客户端才能够通过RPC的询问找到正确对应的端口。即NFS必须要有RPC存在时才能成功地提供服务,因此我们称NFS为RPC Server的一种。事实上,有很多这样的服务器都向TPC注册。例如,NIS(Network information Service)也是RPC Server的一种。如图所示,不论是客户端还是服务器,要使用NFS都需要启动RPC。
阅读(5397) | 评论(2) | 转发(0) |