NFS 实例解析:文件读取案例

本节以软件无线电原理与应用(第二版)中的内容为基础,深入解析一个典型的文件读取操作所涉及的 NFS 过程调用。

工具: tcpdump

原理:

tcpdump 可以识别并解码网络中的 NFS 请求和应答数据包。当 tcpdump 监测到目标端口为 2049 且调用字段为 0 的 UDP 数据包时,它将其解析为 NFS 请求;类似地,源端口为 2049 且应答字段为 1 的 UDP 数据包则被解析为 NFS 应答。

案例:

以使用 cat 命令读取 NFS 服务器上的文件为例:

sun % cat /nfs/bsdi/usr/rstevens/hello.c

假设主机 sun 是 NFS 客户端,主机 bsdi 是 NFS 服务器,/nfs/bsdi/usr/usr 在 sun 上的挂载点。

过程分析:

  1. 路径解析:cat 命令打开文件时,sun 内核识别到目标文件位于 NFS 挂载点,从而发起 NFS 请求。

  2. GETATTR 调用: tcpdump 输出显示,客户端首先调用 GETATTR 过程获取已挂载服务器目录(/usr)的属性(如图 29-7 第 1 行所示)。

  3. 应答处理: 服务器返回包含目录属性信息的 GETATTR 应答(如图 29-7 第 2 行所示)。

  4. 后续操作: 客户端根据服务器返回的信息继续执行文件打开和读取操作,涉及 LOOKUP, READ 等 NFS 过程调用,tcpdump 会捕获并解析这些交互过程。


通过 tcpdump 工具,我们可以清晰地观察 NFS 客户端和服务器之间的交互过程,深入理解 NFS 文件操作的内部机制。