下载
第29章 网络文件系统
29.1 引言
本章中我们要讨论另一个常用的应用程序: N F S (网络文件系统),它为客户程序提供透
明的文件访问。N F S 的基础是Sun RPC:远程过程调用。我们首先必须描述一下 R P C。
客户程序使用 N F S不需要做什么特别的工作,当 N F S内核检测到被访问的文件位于一个
N F S服务器时,就会自动产生一个访问该文件的 R P C调用。
我们对N F S 如何访问文件的细节并不感兴趣,只对它如何使用 I n t e r n e t 的协议,尤其是
U D P 协议,感兴趣。
29.2 Sun远程过程调用
大多数的网络程序设计都是编写一些调用系统提供的函数来完成特定的网络操作的应用
程序。例如,一个函数完成 T C P的主动打开,另一个完成 T C P 的被动打开,一个函数在一个
T C P 连接上发送数据,另一个设置特定的协议选项(如激活 T C P 的k e e p a l i v e 定时器)。在1 . 1 5
节我们提到过两个常用的用于网络编程的函数集( A P I ):插口( s o c k e t ) 和T L I 。正像客户端和
服务器端运行的操作系统可能会不相同一样,双方使用的 A P I 也可能会不相同。由通信协议和
应用协议决定一对客户和服务器是否可以彼此通信。如果两台主机连接在一个网络上,并且
都有一个T C P / I P的实现,那么一台主机上的一个使用 C语言编写的、使用插口和T C P的U n i x客
户程序可以和另一台主机上的一个使用 C O B O L 语言编写的、使用其他 A P I 和T C P的大型机服
务器进行通信。
一般来说,客户发送命令给服务器,服务器向客户发送应答。目前为止,我们讨论过的
所有应用程序
—
P i n g ,Tr a c e r o u t e ,选路守护程序、以及 D N S 、T F T P 、B O O T P 、S N M P 、
Te l n e t、F T P和S M T P的客户和服务器
—
都是采用这种方式实现的。
远程过程调用RPC (Remote Procedure Call)是一种不同的网络程序设计方法。客户程序编
写时只是调用了服务器程序提供的函数。这只是程序员所感觉到的,实际上发生了下面一些
动作。
1) 当客户程序调用远程的过程时,它实际上只是调用了一个位于本机上的、由 R P C 程序
包生成的函数。这个函数被称为客户残桩( s t u b )。客户残桩将过程的参数封装成一个网络报
文,并且将这个报文发送给服务器程序。
2) 服务器主机上的一个服务器残桩负责接收这个网络报文。它从网络报文中提取参数,
然后调用应用程序员编写的服务器过程。
3) 当服务器函数返回时,它返回到服务器残桩。服务器残桩提取返回值,把返回值封装
成一个网络报文,然后将报文发送给客户残桩。
4) 客户残桩从接收到的网络报文中取出返回值,将其返回给客户程序。
网络程序设计是通过残桩和使用诸如插口或 T L I 的某个A P I的R P C 库例程来实现的,但是