NFS 是通过网路来进行服务端和客户端之间的传输,需要有对应的网络端口来进行传输。

NFS服务器是用哪个端口来传输数据的?

  NFS服务器端其实是随机选择端口来进行数据传输。

NFS客户端又是如何知道NFS服务器端到底使用的哪个端口呢?

  NFS服务器是通过远程过程调用(remote procedure call简称RPC)协议来实现的。

  也就是说RPC服务会统一管理NFS的端口,客户端和服务端都通过RPC来先沟通NFS使用了那些端口,之后再利用这些端口(小于1024)来进行数据的传输

《rpc与nfs

   pc(portmap)就是用来统一管理NFS端口的服务,并且统一对外的端口是111。NFS服务端需要先启动rpc,再启动NFS,这样NFS才能够到RPC去注册端口信息。客户端的RPC可以通过向服务端的RPC请求获取服务端的NFS端口信息。当获取到了NFS端口信息后,就会以实际端口进行数据的传输。(由于NFS端口为随机的。)

《RPC和NFS如何通讯》

 

因为NFS有很多功能,不同的功能需要使用不同的端口。因此NFS无法固定端口。而RPC会记录NFS端口的信息,这样我们就能够通过RPC实现服务端和客户端的RPC来沟通端口信息。

那RPC和NFS之间又是如何之间相互通讯的?

首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口。RPC就会记录下这些端口。并且RPC会开机111端口,等待客户端RPC的请求,如果客户端有请求,那服务端的RPC就会将记录的NFS端口信息告知客户端。

提示:在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs  reloadexportfs –rv即可使修改的/etc/exports生效 

 

PS:这里有个启动顺序的点,先给大家讲清楚。因为NFS要想RPC注册端口信息。所以RPC一定要先于NFS早启动。我给大家比喻一个左手叠右手的游戏,此时就是一定要确保NFS的手掌(左)在RPC手掌(右)的上面。正常顺序是要RPC先叠上去,然后NFS再叠上去。如果RPC重启了,就相当于手掌抽出来了,然后重新叠上去。这样RPC就在NFS上面了,所以不行。此时我们的NFS就需要再重新启动一次。这样NFS抽出来然后再叠上去之后,NFS就在RPC上面了。如果NFS修改了配置,就直接reload就好了

 

《客户端NFS和服务端NFS通讯过程》

1)首先服务器端启动RPC服务,并开启111端口

2)启动NFS服务,并向RPC注册端口信息

3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。