NFS4协议

文章详细介绍了NFS(网络文件系统)v4.1中客户端和服务器之间的交互,包括客户端ID、客户端所有者、锁管理、服务器所有者以及稳定存储等核心概念。客户端ID用于识别和恢复锁状态,服务器所有者标识服务器并允许会话共享。稳定存储确保数据在硬件故障后仍可恢复。文件句柄是服务器上文件的唯一标识符,而验证器则用于检查客户端状态。
摘要由CSDN通过智能技术生成

介绍

一些定义

  • 客户端:访问NFS服务器资源的实体,可以是包含直接访问NFS服务器的应用程序,也可以是为一组应用程序提供远程文件系统服务的传统操作系统客户端。

    • 客户端由客户端所有者唯一标识
    • 关于字节范围锁定,客户端也代表一个或多个应用程序维护一组锁的实体,负责其管理的锁的故障恢复。
    • 注意,多个客户端可能共享相同的传输和链接,多个客户端可能存在于同一网络节点上。
  • 客户端ID:是一个64位数,用作对客户端提供的验证器和客户端所有者的唯一引用,服务端负责提供客户端ID

  • 客户端所有者:客户端所有者是一个唯一的字符串,对服务器不透明,用于标识客户端。多个网络连接和源自这些连接的源网络地址可能共享客户端所有者。服务器应将来自具有同一客户端所有者的连接的请求视为来自同一客户端的请求。

  • 锁:字节范围锁、共享保留、委托或布局

  • Secret State Verifier (SSV):客户端和服务器之间共享的唯一密钥。SSV用作内部(即NFSv4.1内部)通用安全服务(GSS)机制,SSV GSS机制使用SSV计算消息完整性代码(MIC)和包装令牌。

  • 服务器:服务器是负责协调客户端对一组文件系统的访问的实体,由服务器所有者标识。一台服务器可以跨越多个网络地址。

  • 服务器所有者:服务器所有者向客户端标识服务器。服务器所有者由主要标识符和次要标识符组成。当客户端与具有相同主标识符的对等体有两个连接时,客户端假定两个对等体都是同一服务器(通过每个连接,服务器命名空间都是相同的),并且锁状态可在两个连接之间共享。当每个对等体都具有相同的主要标识符和次要标识符时,客户端假定每个连接可能与同一会话关联。

  • 稳定存储:指NFSv4.1服务器存储的数据可以从该存储中恢复,而不会因多次电源故障(包括级联电源故障,即快速连续几次电源故障)、操作系统故障和/或存储介质本身以外的组件(如磁盘、非易失性RAM、闪存等)的硬件故障而丢失数据。稳定存储的示例包括:

    • 数据的介质提交:即修改后的数据已成功写入磁盘介质,例如磁盘盘片。
    • 带有电池供电或UPS的立即回复磁盘驱动器。
    • 带有电池后备中间存储和恢复软件的服务器提交数据。
    • 带有UPS和恢复软件的缓存提交。
  • stateid:服务器返回的128位数,唯一定义服务器为特定文件和锁类型的特定打开所有者或(锁所有者,打开所有者)对提供的打开和锁定状态。

  • 验证器:由客户端生成的64位数,服务器可以使用该数量来确定客户端是否已重新启动并丢失所有先前的锁定状态。

客户端标识符和客户端所有者

对于依赖于锁状态的每个操作,特定的客户端需要被服务端识别。每个不同的客户端实例都由客户端ID表示。客户端ID是表示给定时间特定客户端的64位标识符。每当客户端重新初始化时,客户端ID就会更改,当服务器重新初始化时,客户端ID可能会更改。客户端ID用于支持锁识别和崩溃恢复。

要在服务器上建立和确认客户端ID,需要使用该客户端ID(从EXCHANGE_ID返回的eir_clientid)执行EXCHANGE_ID操作的序列,然后执行CREATE_SESSION操作。客户端标识符封装在以下客户端所有者数据类型中:

struct client_owner4 {
        verifier4       co_verifier;
        opaque          co_ownerid<NFS4_OPAQUE_LIMIT>;
};

co_verifier是服务器用来区分同一客户端的连续状态(如重新启动)。如果co_verifier与服务器先前为识别的客户端(在co_ownerid字段中指定)记录的co_verifier不同,服务器将启动取消客户端租用状态的过程。

第二个字段,co_ownerid是一个可变长度字符串,唯一定义客户端。因此,同一客户端的后续实例具有不同co_verifier的相同co_ownerid。

服务端所有者

服务器所有者从EXCHANGE_ID返回。当两个EXCHANGE_ID结果中的so_major_id字段相同时,可以假定每个EXCHANGE_ID发送的连接地址为同一服务器。如果so_minor_id字段也相同,则不仅两个连接都连接到同一服务器,而且会话可以跨两个连接共享。

struct server_owner4 {
 uint64_t       so_minor_id;
 opaque         so_major_id<NFS4_OPAQUE_LIMIT>;
};

常量和数据类型

(1)基本常量

const NFS4_FHSIZE               = 128; //文件句柄的最大大小
const NFS4_VERIFIER_SIZE        = 8;   //验证器的固定大小
const NFS4_OPAQUE_LIMIT         = 1024; //某些不透明信息的最大大小
const NFS4_SESSIONID_SIZE       = 16;  // 会话标识符的固定大小

const NFS4_INT64_MAX            = 0x7fffffffffffffff;  
const NFS4_UINT64_MAX           = 0xffffffffffffffff;
const NFS4_INT32_MAX            = 0x7fffffff;
const NFS4_UINT32_MAX           = 0xffffffff;

const NFS4_MAXFILELEN           = 0xffffffffffffffff;  //常规文件的最大长度
const NFS4_MAXFILEOFF           = 0xfffffffffffffffe;  //常规文件的最大偏移

(2)结构化数据类型

文件句柄

NFS协议中的文件句柄是文件系统对象的每个服务器唯一标识符。文件句柄的内容对客户端是不透明的。因此,服务器负责将文件句柄转换为文件系统对象的内部表示。

NFS协议的操作是根据一个或多个文件句柄定义的。因此,客户端需要一个文件句柄来启动与服务器的通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值