NFS4协议

news/2024/7/5 7:01:47

介绍

一些定义

  • 客户端:访问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协议的操作是根据一个或多个文件句柄定义的。因此,客户端需要一个文件句柄来启动与服务器的通信。


http://lihuaxi.xjx100.cn/news/633576.html

相关文章

Nexus私有maven库部署和使用

原文地址:Nexus私有maven库部署和使用 - Stars-One的杂货小窝前段圣诞节前后,Jitpack网站突然崩溃了,无法下载依赖,然后过了一个星期才解决了,好在没啥紧急的Android开发任务,没啥影响,但是也给我了一些提醒,可能搭建个私有库会比较保险,于是就是研究了私有库nexus的部…

Python logging 库的『完整教程』

前言 本文的标题是『完整』。所谓『完整』&#xff0c;大意是想表达&#xff1a;提炼出一组最小的经验组合&#xff0c;并且能够快速应用于工程中&#xff0c;能 work&#xff0c;甚至能完美地 work。这篇文章就是想要做到『如何能完美地work』。 初衷 最原始的初衷就是&…

Acwing4653. 数位排序

小蓝对一个数的数位之和很感兴趣&#xff0c;今天他要按照数位之和给数排序。 当两个数各个数位之和不同时&#xff0c;将数位和较小的排在前面&#xff0c;当数位之和相等时&#xff0c;将数值小的排在前面。 例如&#xff0c;2022 排在 409 前面&#xff0c;因为 2022 的数…

【Java集合】Collections工具类

文章目录01 Collections工具类介绍02 排序操作03 查找、替换01 Collections工具类介绍 Collections 是一个操作 Set、List 和 Map 等集合的工具类&#xff1b;Collections 中提供了一系列静态方法对集合元素进行排序、查询和修改操作&#xff1b; 02 排序操作 均为static方法…

如何成功发送一个Target 846 EDI报文?

Target塔吉特公司是仅次于沃尔玛的第二大零售百货集团&#xff0c;为客户提供当今时尚前沿的零售服务&#xff0c;物美价廉。而EDI&#xff08;电子数据交换&#xff09;是Target与供应商进行业务往来时要求使用的数据交换方式&#xff0c;具有安全可靠、高效和降低人工成本等优…

Java--String字符串处理(二)

文章目录一、字符串的替换二、字符串比较一、字符串的替换 格式&#xff1a; 字符串.replace(旧字符串&#xff0c;新字符串) 字符串.replaceFirst(旧字符串&#xff0c;新字符串) 替换第一个字符 字符串.replaceAll(旧字符串&#xff0c;新字符串) 替换所有字符 public clas…

适合制造业的ERP推荐?使用ERP系统的好处有哪些?

对于制造型企业来说&#xff0c;除了涉及到产品的生产制造和原料采购&#xff0c;还需要管理库存、销售、财务等方方面面。制造业的ERP系统的使用&#xff0c;尤为重要。一个好的制造业的ERP系统在企业管理中起到至关重要的作用&#xff0c;针对制造业的ERP系统提供贴合行业特性…

【Linux】 gcc 、动态库和静态库,程序是如何链接的

文章目录前言一、gcc 是什么&#xff1f;二、使用步骤1.预编译2.编译3.汇编4.链接三、动静态库1.概念2.区别前言 在Linux环境下&#xff0c;除了学好编辑器 vim 的使用&#xff0c;还需要学会C语言的编译器 gcc 的功能&#xff0c;否则代码无法翻译成可执行程序。本文将介绍 gc…