NFS协议最为权威的参考文档自然是RFC文档了。以NFSv3为例,对应的RFC文档是RFC1813。但是当我们初次接触该文档的时候有种找不到北的感觉。以NFSv3的WRITE例程为例,在文档中的说明如下图所示,从该图中似乎看不太明白协议的具体定义。

图1 NFS 写协议描述
其实要理解上述内容并不困难,首先是要结合前面文章介绍的RPC的内容来理解,这样再理解NFS协议的内容就不会太难了。
在RPC协议中我们了解到,RPC实现了一种远程函数调用的机制。也就是客户端在调用基于RPC的函数(存根)时,该函数会被封装成网络消息发送到服务端,并且激活一个服务端的函数(存根)。并且,通常客户端的存根与服务端的存根是一一对应的。

图2 存根函数
RPC实现了函数的远程调用,但是并没有定义函数的参数。而函数的参数则是在NFS中定义的(其实函数ID也是在NFS定义的)。对于图1中的描述,WRITE3args就是写操作的参数,WRITE3resok就是返回值。而NFSPROC2_WRITE=7
本文通过实例深入解析NFS协议,结合RPC协议理解NFS中的操作,如WRITE,展示NFS如何在内核中实现,并通过WireShark分析数据包来直观展现NFS协议的工作原理。
订阅专栏 解锁全文
1143

被折叠的 条评论
为什么被折叠?



