服务器 频道

Linux实战攻略之NFS服务器工作原理

  1.1.4  RPC

  因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动。每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口才没有固定,而是采用随机取用一些未被使用的小于724的端口来作为传输之用。但如此一来又造成客户端要连接服务器时的困扰,因为客户端要知道服务器端的相关端口才能够联机,此时我们需要远程过程调用(RPC)的服务。RPC最主要的功能就是指定每个NFS功能所对应的端口号,并且回报给客户端,让客户端可以连接到正确的端口上。当服务器在启动NFS时会随机选用数个端口,并主动地向RPC注册。因此RPC可以知道每个端口对应的NFS功能。然后RPC固定使用端口111来监听客户端的请求并回报客户端正确的端口,所以可以让NFS的启动更为容易。注意,启动NFS之前,要先启动RPC;否则NFS会无法向RPC注册。另外,重新启动RPC时原本注册的数据会不见,因此RPC重新启动后它管理的所有程序都需要重新启动以重新向RPC注册。

  当客户端有NFS文件要存取请求时,它如何向服务器端要求数据?

  (1)客户端会向服务器端的RPC(port 111)发出NFS文件存取功能的询问请求。

  (2)服务器端找到对应的已注册的NFS daemon端口后会回报给客户端。

  (3)客户端了解正确的端口后,就可以直接与NFS守护进程来联机。

  由于NFS的各项功能都必须要向RPC注册,因此RPC才能了解NFS服务的各项功能的port number、PID和NFS在主机所监听的IP等,而客户端才能够通过RPC的询问找到正确对应的端口。即NFS必须要有RPC存在时才能成功地提供服务,因此我们称NFS为RPC Server的一种。事实上,有很多这样的服务器都向RPC注册。例如,NIS(Network Information Service)也是RPC Server的一种。所以如图1-3所示,不论是客户端还是服务器端,要使用NFS都需要启动RPC。

  图1-3  NFS与RPC服务及操作系统的相关性

  NFS协议从诞生到现在为止,已经有多个版本,如NFS V2(rfc794)及NFS V3(rfc1813)(最新的版本是V4(rfc307))。最早,SUN公司曾将NFS V2设计为只使用UDP,主要原因是当时机器的内存、网络速度和CPU的影响,不得不选择对机器负担较轻的方式。而到了NFS V3,SUN公司选择了TCP作为默认的传输方式。V3相对V2的主要区别如下。

  (1)文件尺寸。

  V2最大只支持32位的文件大小(4 GB),而V3新增加了支持64位文件大小的技术。

  (2)文件传输尺寸。

  V3没有限定传输尺寸,V2最多只能设定为8 KB,可以使用-rsize and -wsize来设定。

  (3)返回完整的信息。

  V3增加和完善了返回错误和成功信息,对于服务器的设置和管理能带来很大好处。

  (4)增加了对TCP传输协议的支持。

  V2只提供了对UDP的支持,在一些高要求的网络环境中有很大限制;V3增加了对TCP的支持。UDP有着传输速度快且非连接传输的便捷特性,但是在传输上没有TCP稳定。当网络不稳定或者黑客入侵时很容易使NFS的性能大幅度降低,甚至使网络瘫痪。所以对于不同情况,网络要有针对性地选择传输协议。NFS的默认传输协议是UDP,然而RHEL 4.0内核提供了对通过TCP的NFS的支持。要通过TCP来使用NFS,在客户端系统上挂载NFS导出的文件系统时包括一个"-o tcp"选项。使用TCP的优点和缺点如下。

  - 被提高了的连接持久性,因此获得的NFS stale file handles消息就会较少。

  - 载量较大的网络的性能会有所提高,因为TCP确认每个分组,而UDP只在完成时才确认。

  - TCP具有拥塞控制技术(UDP根本没有),在一个拥塞情况严重的网络上,UDP分组是被首先撤销的类型。使用UDP意味着,如果NFS正在写入数据(单元为8 KB的块),所有这8 KB数据都需要被重新传输。由于TCP的可靠性,8 KB数据中只有一部分需要重新传输。

  - 错误检测。当TCP连接中断(由于服务器停止),客户端就会停止发送数据而开始重新连接。UDP是无连接的,使用它的客户端就会继续给网络发送数据直到服务器重新上线为止。

  - TCP的费用在性能方面的提高并不显著。

  (5)异步写入特性。

  (6)改进了服务器的mount性能。

  (7)有更好的I/O写性能。

  (8)更强的网络运行效能,使得网络运行更为有效。

  (9)更强的灾难恢复功能。

  在Linux上,UDP是默认使用的协议。作为服务器别无选择。但作为客户端,可以使用TCP和其他使用TCP的UNIX NFS服务器互联。在局域网中使用UDP较好,因为局域网有比较稳定的网络保证。使用UDP可以带来更好的性能,Linux默认使用V2,但是也可以通过mount option的nfsvers=n选择。NFS使用TCP/IP提供的协议和服务运行于OSI层次模型的应用层,如下表所示。

  表  OSI层次模型上的NFS

  更多的NFS相关协议信息可以参考如下网页。

  (1)http://www.faqs.org/rfcs/rfc794.html

  (2)http://www.tldp.org/HOWTO/NFS-HOWTO/index.html

  本文节选自《Red Hat Enterprise Linux 5.0服务器构建与故障排除》一书,作者曹江华。本文仅提供读者试读,如需全部内容请购买原书。

0
相关文章