client端通过nfs操作存储设备经过的路径如下图所示:
client server
+------------+ +------------+
| client | | storage |
| app | | device |
+------------+ +------------+
1.| ^ 11.| ^
| | | |
v |20. v |10.
+------------+ +------------+
| nfs | | nfsd |
| | |(nfs server)|
+------------+ +------------+
2.| ^ 12.| ^
v |19. v |9.
+------------+ +------------+
| sunrpc | | sunrpc |
+------------+ +------------+
3.| ^ 13.| ^
v |18. v |8.
+------------+ +------------+
| tcp | | tcp |
+------------+ +------------+
4.| ^ 14.| ^
v |17. v |7.
+------------+ +------------+
| ip | | ip |
+------------+ +------------+
5.| ^ 15.| ^
| | | |
| | 16.+------------+ | |
| +-----| network |<----+ |
+------>| |-------+
+------------+ 6.
我们再来看一下OSI七层模型和TCP/IP四层模型中SunRPC的位置:
OSI TCP/IP
+------------+ +------------+
7|application | | |
| layer | | |
+------------+ | |
6|presentation| 4|application | sunrpc
| layer | | layer |
+------------+ | |
5| session | | |
| layer | | |
+------------+ +------------+
4| transport | 3| transport | tcp
| layer | | layer |
+------------+ +------------+
3| network | 2| internet | ip
| layer | | layer |
+------------+ +------------+
2| data link | 1| network |
| layer | | access |
+------------+ | layer |
1| physical | |(link layer)|
| layer | | |
+------------+ +------------+
sunrpc之下的tcp层和ip层已经大概率的保证了数据的可靠性,sunrpc不会对数据的可靠性进行校验。但在我曾经定位过的问题中,遇到过一个问题,tcp的校验通过了,但数据还是错误的,概率非常低,所以最终数据的可靠性还要在用户态对文件进行校验。
SunRPC有以下几个版本,你们一定和我一样在心里骂制定标准的人,为什么会有3个version 2,就不能命名成version 3和4?我们查阅时只需要选择最新版本rfc5531:
nfs的rfc协议文档有以下几个版本:
现在很多的发行版已经不支持nfsv2,所以我们的教程只讲解nfsv3和nfsv4相关的代码。
获取supporter、reviewer、maintainer、open list的邮箱:
./scripts/get_maintainer.pl net/sunrpc/
./scripts/get_maintainer.pl fs/nfs/
./scripts/get_maintainer.pl fs/nfs_common/
./scripts/get_maintainer.pl fs/nfsd/
sunrpc模块发送补丁:
git send-email --to=trondmy@kernel.org,trond.myklebust@hammerspace.com,anna@kernel.org,chuck.lever@oracle.com,jlayton@kernel.org,neilb@suse.de,kolga@netapp.com,Dai.Ngo@oracle.com,tom@talpey.com,davem@davemloft.net,edumazet@google.com,kuba@kernel.org,pabeni@redhat.com --cc=linux-nfs@vger.kernel.org,netdev@vger.kernel.org,linux-kernel@vger.kernel.org 00*
nfs模块发送补丁:
git send-email --to=chuck.lever@oracle.com,trondmy@kernel.org,anna@kernel.org,trond.myklebust@hammerspace.com,jlayton@kernel.org,neilb@suse.de,kolga@netapp.com,Dai.Ngo@oracle.com,tom@talpey.com --cc=linux-nfs@vger.kernel.org,linux-kernel@vger.kernel.org 00*