nfs :Network File System(网络文件系统)

首先说一下nfs的一些原理吧: (这里说的可能不大精确 ,主要是理解整个工作流程)

  nfs 本身只是一种文件系统(只具有文件管理的功能),并不具备网络功能。

所以 nfs 必须借助rpc进行网络通信。

RPC: Remote Rrocedure Call (远程过程调用)  相对于LPC(本地过程调用)

     rpc 的客户端 stub  服务端 rpc Server

     rpc 对于用户是透明的,但是实际上需要 rpc 客户端和服务端的协作。

一切网络通信过程都隐藏在 rpc 通信机制。

应用程序本身并不考虑网络通信。

Linux : 提供 rpc 服务的程序:  Portmap

但是在redhat 6.5 中 portmap  已经改为 rpcbind

RPC: 编程技术(主要是用于简化分布式应用)

工作流程:

       nfs 客户端将请求发送给 RPC  客户端,RPC 客户端向 RPC  的服务端发起通信,

        RPC 的服务端再将请求转给真正的 nfs 服务端。

  使得客户端和服务端不需要再去管理对方数据包文发送过去怎么理解。

  nfs 客户端只需要发起 RPC 客户端调用。

其实上面说的工作流程只是工作机制中的一种, 其实 nfs 也可以监听某一个端口,只不过这个

端口是随机(如下图的 808),但 nfs 服务端会将这个随机的端口告诉 rpc 服务端,

rpc 这是只负责初始连接,后面客户端将直接发起请求给 nfs 服务端。我们的nfs 恰恰就工作于这种机制。

Portmap 工作在 tcp/111 和 udp/111 上。

所以当客户端需要跟网络通信的时候,他只需要想服务器端的 111 端口发起请求即可,

rpc 在接受客户端的请求之后,它会理解,客户端请求的是哪一个 rpc 服务,于是 rpc

服务端将相应服务 对应的端口号 发送给 客户端, 客户端再自己去连接 真正提供文件系统

服务的服务器程序。

简单总结一下: rpc 是一种编程技术。主要是用于简化分布式应用程序的开发。

rpc 的客户端 将请求发送给 rpc 的服务端 , rpc 服务度 再讲请求转给真正的服务端。

RPC 实现数据交换既可以基于 : 二进制格式     文本格式 (常见的是 XML RPC) 

你可以这样理解: RPC 只是一种协议, Portmap 是这种协议的一个实现

就相当于 http(协议) 和 Apache