1.nfs共享目录
1.1 NFS网络文件系统
NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。
1.2 NFS的工作模式和工作机制
- 基于C/S的架构体系工作
- 基于RPC来实现网络文件共享
1.2.1 RPC
RPC是远程过程调用协议,本地主机通过网络对远程服务器请求服务,当本地主机请求的数据是动态数据时,服务器根据本地主机的请求查找数据的过程是远程调用,而请求静态数据时则不是。
rpc工作机制如上图所示,下面来描述一下它:
- 客户端程序发起一个RPC系统调用基于TCP协议发送给另一台主机(服务端)
- 服务端监听在某个套接字上,当收到客户端的系统调用请求以后,将收到的请求和其所传递的参数通过本地的系统调用执行一遍,并将结果返回给本地的服务进程
- 服务端的服务进程收到返回的执行结果后将其封装成响应报文,再通过rpc协议返回给客户端
- 客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行
1.2.2 nfs工作机制
//NFS服务器端运行着四个进程
nfsd
mountd
idmapd
portmapper
nfsd //nfs的守护进程,监听的端口是tcp/udp(2049),不负责文件存储(由NFS服务器本地内核负责调度存储),由客户端发起的rpc请求,并将其转交给本地内核,而后存储在指定的文件系统上
mountd //用于验证客户端是否在允许访问此NFS文件系统的客户端列表中,在则允许访问(发放一个令牌,持令牌去找nfsd),否则拒绝访问,mountd的服务端口是随机的,由rpc服务(portmapper)提供随机端口号
idmapd //实现账号的集中映射,把所有本地主机在共享目录中创建的文件的所有账号都映射为NFSNOBODY,但是在访问时却能以本地用户的身份去访问
portmapper //NFS服务器的rpc服务,其监听的端口是tcp/udp(111),这是rpc服务的端口号,用于管理远程过程调用
1.2.3 nfs的工作流程
- 当客户端想要查看某一文件时,会将查看信息的指令发送给内核,内核通过nfs模块得知此文件不是本地文件,而是在远程nfs主机上
- 客户端主机的内核通过RPC协议把查看文件信息的指令(系统调用)封装成rpc请求,通过rpc的tcp111端口发送给NFS服务器主机的portmapper
- NFS服务器主机的portmapper(RPC服务进程)告诉本地客户机说NFS服务端的mountd服务在某一个端口上,(mountd的端口随机生成),去找mountd验证
- 当本地客户机得知服务端的mountd进程端口号后,通过已知的服务器mountd端口请求验证
- 当服务器的mountd收到验证请求后,验证请求的客户机是否在允许访问此NFS文件系统的客户端列表中,在则允许访问(发放一个令牌,持令牌去找nfsd),否则拒绝访问
- 验证通过后客户端持mountd发放的令牌去找服务端的nfsd进程,请求查看某文件
- 服务端的nfsd进程发起本地系统调用,向内核请求查看客户端要查看的文件的信息
- 服务端的内核执行nfsd请求的系统调用,并将结果返回给nfsd服务
- nfsd进程收到内核返回的结果后将其封装成rpc请求报文并通过tcp/ip协议返回给客户端