2024年6月12日发(作者:)

NFS(Network File System,网络文件系统)是当前主流异构平台共享文件系统之

一。主要应用在UNIX环境下。最早是由SUN开发,现在能够支持在不同类型的系统之

间通过网络进行文件共享,允许一个系统在网络上与他人 共享目录和文件。通过使用

NFS,用户和程序可以象访问本地文件一样访问远端系统上的文件,使得每个计算机的节

点能够像使用本地资源一样方便的使用网上资源。换言之,NFS可用于不同类型计算机、

操作系统、网络架构和传输协议运行环境中的网络文件远程访问和共享

NFS的工作原理是使用客户端/服务器架构,由一个客户端程序和服务器程序组成。

服务器程序向其它计算机提供对文件系统的访问,其过程就叫做“输出”。NFS客户端程

序对共享文件系统进行访问时,把它们从NFS服务器“输送”出来。文件通常以“块”

为单位进行传输,其尺寸是8K(虽然它可能会将操作分成更小尺寸的分片)。NFS传输协

议用于服务器和客户机之间的文件访问和共享的通信,从而使客户机远程的访问保存在存

储设备上的数据。

NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote

Procedure Call) 是能使客户端执行其他系统中程序的一种机制。可以说NFS本身就是使

用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都

要启动RPC服务,不论是NFS SERVER(服务器)或者NFS CLIENT(客户端)。这样

SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC

和NFS的关系:NFS是一个文件系统,而RPC是负责信息的传输。

(1)访问一个本地文件还是一个NFS文件对于客户端来说是透明的,当文件被打开

时,由内核决定这一点。文件被打开之后,内核将本地文件的所有引用传递给名为“本地

文件访问”的框中,而将一个NFS文件的所有引用传递给名为“NFS客户端”的框中。

(2)NFS客户端通过其TCP/IP模块向NFS服务器发送RPC请求(RPC,远程过程

调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。),NFS

主要使用UDP(UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处

理数据包,是一种无连接的协议),最新的实现也可以使用TCP。

(3)NFS服务器在端口2049接收作为UDP数据包的客户端请求,NFS允许服务

器使用一个临时端口,但是大多数实现都是直接指定UDP端口2049。

(4)当NFS服务器收到一个客户端请求时,它将这个请求传递给本地文件访问例

程,然后访问服务器主机上的一个本地的磁盘文件。

(5)NFS服务器需要花一定的时间来处理一个客户端的请求,访问本地文件系统一

般也需要一部分时间。在这段时间间隔内,服务器不应该阻止其他客户端请求。为了实现

这一功能,大多数的NFS服务器都是多线程的——服务器的内核中实际上有多个NFS服

务器在NFS本身的加锁管理程序中运行,具体实现依赖于不同的操作系统。既然大多数

UNIX内核不是多线程的,一个共同的技术就是启动一个用户进程(常被称为“nfsd”

NFS的后台进程)的多个实例。这个实例执行一个系统调用,使其作为一个内核进程保留

在操作系统的内核中。

(6)在客户端主机上,NFS客户端需要花一定的时间来处理一个用户进程的请求。

NFS客户端向服务器主机发出一个RPC调用,然后等待服务器的应答。为了给使用NFS

的客户端主机上的用户进程提供更多的并发性,在客户端内核中一般运行着多个NFS客

户端,同样具体实现也依赖于操作系统。