Session引入

NFS4仅支持单服务器,并且客户端和服务器只有一个连接。这意味着客户端不能并发访问服务器数据。同时NFS4虽然支持EOS(Exactly Once Semantics),但存在重大设计缺陷。NFS4.1有两个主要目标:1)修正NFS4的一些重大设计缺陷; 2) 提高并发访问能力。

为此NFS4.1引入一个重大的设计:session。Session的引入是为了解决下面几大问题:

1) 支持EOS(Exactly Once Semantics)

2) 支持回调;

3) 支持trunking(中继)的并发访问

4) Requiring machine credentials for fully secure operation.(这个不谈)

Session建立

当客户端启动后,通过EXCHANGE_ID获取相应的服务器(scope)分配的clientid。紧接着,通过CREATE_SESSION建立特定的session,并向服务器确认clientid。EXCHANGE_ID和CREATE_SESSION取代了NFS4的SETCLIENTID和SETCLIENTID_CONFIRM。

Session,通道(channal),连接(connection)

NFS4.1所有的客户端操作均基于session。每个客户端可有多个session,session可以连接不同的server。每个session最多可以有两个通道(channal): 前端通道和后端通道。每个通道可以拥有多个连接(connection),每个连接的类型可以不同。

客户端发起的请求走前端通道,后端通道作为服务器端的回调通路。Session的请求均基于COMPOUND命令,每个COMPOUND命令可以组合多个操作,完成一组复杂的命令。

中继(trunking)

中继是为了加快数据传输,其本质就是利用位于同一组client和server的多个连接进行并发数据传输。

Session中继:一个客户端可以有多个session,一个session可以有多个连接。客户端和服务器均可以有多个网卡(interface),这意味着同一组客户端和服务器之间的连接其目标地址和源地址均是可以不同的。Session中的connection是否可用于中继传输,最本质的就是判断此连接是否是同一组客户端和服务器的连接。

Clientid中继:在NFS4.1中,多个服务器可以位于同一台机器,及一组服务器拥有同样的资源(集群,共享磁盘),均可为所有客户提供同样的数据。每个clientID唯一表示同一个client。一个client可以拥有多个session。故Clientid 中继只需session位于同样的client和server间即可。

EOS

NFS4可提供EOS保证,但存在设计缺陷。NFS4通过让每个状态请求携带序列号并缓存此类请求的响应,基于此保证EOS。这意味着每个状态请求必须有一个缓存响应的空间。每个客户端的状态可以是无限的,这将极大的浪费服务器的内存空间。故NFS要求客户端限定只能有一个未收到响应的状态请求。这避免浪费内存空间,但极大限制了NFS的并发请求。本质上,序列号和响应缓存只有在客户端未收到响应之前才是有效的,收到响应之后,序列号和缓存就已经没有存在的意义。

NFS4.1同样采用序列号+缓存响应(response)的机制保证EOS,同时共享session内的缓存空间。在客户端建立session时,将同时设置最大的缓存空间,请求大小,response大小等参数。所有的客户端操作均基于特定session,每个操作均携带序列号和slot ID(缓存槽)。服务器在发回响应之前,将响应基本信息或全部信息存于缓存槽。若客户端正确收到响应,则该缓存槽将可用于其他操作。本质:服务器可共享缓存槽。客户端必须控制未收到响应的操作数(不能大于slot数量)。

重用缓存槽还有另一个额外好处,服务器可知道客户端是否收到响应。只要缓存槽被重用,即说明客户端已经收到响应!

每个slot都有自己的序列号。客户端需要记录每个slot的状态:当前序列号,是否可用(是否已收到响应)等。服务器通过判断请求的序列号与当前槽的序列号可判断请求是否有效。槽序列号由客户端维护。槽的大小可调整,故客户端可同时发起无数个请求(理论上)。NFS4.1要求所有的请求都需要携带序列号。

Server Callback Races

有些请求可引发callback,callback可能比相应请求更先被客户端收到。Client必须能够正确处理callback race。

每个客户端请求可通过三元组标识: session ID, slot ID, sequence ID。此三元组将被缓存于slot中,server能够知道其响应是否已经被客户端收到:slot是否被重用。在slot未被重用之前,该请求所引发的callback均需要返回 session ID, slot ID, sequence ID 三元组给客户端。客户端根据此三元组可知道callback是否比响应更早达到客户端。若callback更早到达,则该callback应被推迟处理;因不能无限推迟,故在一段时间后,若请求的响应还未达到,该callback被忽略。

注:规范上的细节非常多,这里仅给出概括。

参考: rfc5661

NFS4.1规范研究:session相关推荐

  1. 城市大脑与超级智能城市建设规范研究

    作者:刘锋 21世纪以来,21世纪以来,眼花缭乱的前沿科技新概念喷薄而出,从Web2.0.社交网络.物联网.移动互联网.大数据.工业4.0.工业互联网到云机器人.深度学习.边缘计算, 特别是在2010 ...

  2. PBOC规范研究之七 ----应用选择(转)

    PBOC3.0里选择应用总是从选择PPSE开始的,称为支付系统环境.对于非接触卡,选择的字符系统环境为1PAY. SYS. DDF01,而对于非接触卡选择的支付系统环境为"2PAY.SYS. ...

  3. PBOC规范研究之六、变长记录文件(转)

    PBOC金融卡根目录下变长记录文件解析 根目录的变长记录文件其实主要的作用是用于脱机数据认证,其tag为70,其组织结构如下图所示: 例如下面的数据是一个变长记录文件的内容: 702A61284F08 ...

  4. PBOC规范研究之十一 ---复合动态数据认证(转)

    1. 概述 CDA由IC卡动态签名的生成和终端对签名的验证组成.由于直到CDA签名验证时才需要公钥,公钥的恢复可以在CDA签名前的任何时候.在公钥恢复阶段,发现的错误可能导致CDA失败(TVR&quo ...

  5. Session和几种状态保持方案理解

    一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的. session, ...

  6. 构建城市大脑的未来标准,9个值得探索的规范

    简述:50年来互联网从网状向类脑架构进化并与城市建设结合是城市大脑产生的根源.城市大脑建设是工程问题,但首先也是基础科学问题,掌握科技发展规律是发现和构建城市大脑建设标准的基础.通过总结互联网大脑模型 ...

  7. cookie 和 session 机制

    cookie机制 Cookie实际上是Web服务端与客户端(典型的是浏览器)交互时彼此传递的一部分内容,内容可以是任意的,但要在允许的长度范围之内.客户端会将它保存在本地机器上(如IE便会保存在本地的 ...

  8. jsp的session介绍 (转)

    摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术.本文将详细讨论session的工作机制并且对在Java  ...

  9. 介绍一篇关于session的好文章,写的很详细

    介绍一篇关于session的好文章,写的很详细 目录: 一.术语session 二.HTTP协议与状态保持 三.理解cookie机制 四.理解session机制 五.理解javax.servlet.h ...

  10. Java基础-关于session的详细解释

    一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的. session, ...

最新文章

  1. 提升tomcat服务器性能的七条经验
  2. delphi 的 ORM 框架
  3. 计算机控制电缆敷设长度,计算机控制电缆ZR-DJYPVP-22-6*3*1.0电缆
  4. 序列化和反序列化的对单例破坏的防止及其原理
  5. 20220209-CTF MISC-BUUCTF-qr-被嗅探的流量(查找POST包)
  6. Drools 7.4.1.Final参考手册(六) 用户手册
  7. Android样式开发--selector
  8. 第一门语言学python好_零基础学编程,哪一门语言比较适合入门?
  9. QDateTimeEdit使用
  10. [linux] ab压测工具进行post压力测试
  11. android 蓝牙读取数据格式,解析Android蓝牙数据包
  12. php短信验证码随机数_深入解读PHP短信验证码原理
  13. 365抽奖软件 v6.1.7
  14. Android kotlin 时间戳转换工具
  15. C++定义一个复数类Complex,使得下面的代码能够工作。(注:下列代码需放在主函数中。)
  16. 第三章 眼睛的目视光学系统
  17. 屏蔽第三方SDK权限
  18. 【职场进阶】做好项目管理,先从明确职责开始
  19. SpringBoot集成 Windows2012 AD 认证服务
  20. 大数据项目之数据采集总结(三)

热门文章

  1. 海洋cms播放器html,海洋cms升级新播放器后播放不了如何解决?
  2. 小视频如何伪原创 抖音合并视频md5
  3. Jetson TK1
  4. 手写ButterKnife
  5. TFT-LCD电路设计之时序控制电路(TCON)
  6. 4135: [FJOI2015]世界树
  7. 阿里云新优惠活动,幸运券免费领取
  8. 2018年上半年UI领域主要的13个设计趋势
  9. D3D9学习笔记之顶点缓存与索引缓存
  10. 微信企业号服务器搭建,微信企业号开发之如何建立连接