前文我们介绍了NFS的整体架构,其核心是将主机端的函数调用通过网络传输到服务端,并转化为服务端的函数调用。其主要实现是主机端与服务端的一一对应的存根。那么这种转化是如何进行的呢?这就涉及到RPC协议了。

在Linux NFS中,将网络文件系统分为两层,其中RPC协议承载了NFS协议。由于RPC协议的存在,是的NFS协议变得非常简单。

NFS文件系统中的RPC协议详解_NFS文件系统应用与代码解析

RPC协议的全称为Remote Procedure Call,翻译成中文是远程过程调用。也就是通过该协议,可以实现一个远程的函数调用,这样在客户端调用一个函数,可以在服务端完成业务处理。而对于客户端来说并不关心该函数是在客户端还是服务端。

这里的函数是经过特殊方式实现的,在NFS中称为存根(stub)。以Linux内核中的实现为例,文件系统的所有操作都对应着一个存根函数,具体如下所示。

NFS文件系统中的RPC协议详解_存储_02

而客户端的这些存根函数在服务端也是有一一对应的存根函数的。Linux NFS中服务端的存根函数如下所示。

NFS文件系统中的RPC协议详解_linux_03

所以,当客户端文件系统希望完成某一个文件操作时,