网络文件系统和安全 2.6 内核通过引入 NFS 版本 4 而改进了网络文件系统 (NFS)。这个新版本的 NFS 有更好的安全性,考虑了更多的跨不同操作系统的支持,并且减轻了服务器后台进程开销。
2.6 内核对网络文件系统版本 4 (NFSv4) 的引入,带来了 NFS 先前版本不曾出现过的安全性和功能性的改进。使用通用安全服务 (General Security Service, GSS) API 的远程过程调用 (remote procedure call, RPC) 实现,NFS 的用户现在可以进行安全的事务处理。设计者还引入了复合过程(将多个 RPC 组合到一个调用中)的思想。调用的组合意味着文件系统操作需要更少的 RPC,从而使 NFS 响应速度更快。
进一步减少 NFS 开销的是,NFS 现在使用了文件“句柄到路径”名称映射 (mountd),以及字节范围 (byte range) 的文件锁定 (lockd),这样减少了服务器端所需要的支撑后台进程的数量。为方便服务器实现,NFSv4 引入了额外的文件句柄类型,并提供了对文件和文件系统属性的分类。这个新的 NFS 版本还增加了对服务器迁移和复制的支持,让用户在需要的时候可以无缝地改变服务器。最后,NFSv4 现在可以让服务器授权给在缓存状态下的客户机某些职责,在那种情况下非常需要这个选项。
NFS RPC 请求可以使用密码认证的能力提供了端到端的 NFS 安全支持。NFSv4 使用 RPCSEC_GSS 框架来扩展 RPC 的基本安全。这个安全框架让 NFSv4 可以提供服务器与客户机之间的认证、完整性和隐私机制。这种联合的安全协商让客户机可以安全地与服务器的安全策略相匹配,得到满足服务器和客户机双方需求的机制。
复合过程是 NFS 在版本 4 设计中的另一个改进。先前版本的 NFS 没有方法可以让客户机生成复杂逻辑的文件系统 RPC。通过使用复合过程,客户机可以将 LOOKUP、OPEN 和 READ 操作组合到一个 RPC 请求中,这样客户机只需一次请求就可以从文件中读取数据。旧版本的 NFS 要求客户机为这三个操作每一个都要执行一次 RPC。在服务器端处理这些复合请求的实现很简单,复合请求被服务器拆分为一个单独请求的列表,服务器遍历并执行列表中的每一个操作,直到结束或者失败,然后将所有操作的结果返回给客户机。
NFSv4 通过削减服务器所需要的非 NFS 服务器协议的数目来进行进一步的简化。用版本 4,NFS 代码可以将文件句柄映射到路径名,在旧版本中这是由 mountd 协议来做的。服务器提供了一个 root 文件句柄,对应于服务器导出的文件系统树的顶。服务器支持多文件系统,实现途径是用伪文件系统将它们联系在一起,这样就掩盖了真正的文件系统之间路径名的潜在差异。这个转换是为了支持全局分级名称空间。
此外,这个新版本的 NFS 协议支持字节范围的文件锁定,而先前版本使用的是网络锁管理器 (Network Lock Manager) 提供的 lockd 协议。文件锁定支持的重构让服务器可以用基于租约的模型来保持文件的锁状态。基本来说,客户机需要向服务器提交锁请求。如果被准许,客户机还必须在服务器指定的租约期限内更新租约。在租约过期后服务器可以释放客户机的锁。mountd 和 lockd 这两个协议的弃用,减少了运行 NFS 服务器的处理开销。
新版本的 NFS 还包括简化 NFS 服务器实现的改进。文件句柄要在它所引用的文件系统对象的生命周期内持久保持,这对一些老的 NFS 服务器实现来说是一个很难满足的要求。NFSv4 中增加了一个可变文件句柄类型,作为持久文件句柄类型的补充。使用这两种文件句柄类型,服务器实现可以具备与服务器上操作系统的文件系统相匹敌的能力。客户机可以识别出服务器提供的文件句柄的类型并为其做好准备,然后为每一个句柄设置操作。
文件和文件系统属性分类是对 NFS 的另一个补充,使服务器实现更方便。旧的 NFS 版本使用的是固定的一组属性,只是主要考虑了 UNIX 文件和文件系统。如果服务器或者客户机不支持特定的属性,它必须得尽量去模拟那个属性。版本 4 将属性分为三类:强制的、推荐的和命名的。
强制的属性 是服务器必须正确提供并描述的文件或文件系统属性的最小集合。推荐的属性 描述了不同的文件系统类型和操作系统,考虑到了操作系统之间更好的包含和互操作性。命名文件系统属性 分类是一个关联到目录或者文件的字节流,通过一个字符串名引用。客户机应用程序可以利用这些命名的属性将特定的数据关联到文件 和/或 文件系统。属性分类系统的创建,建立了一个不用对代码进行大的修订就可以添加新属性的简便方法。
为实现更好的冗余,NFSv4 支持服务器端的文件系统复制和迁移。使用一个特殊的文件系统位置属性,客户机可以向服务器进行关于文件系统位置的查询。如果出于负载平衡或者其他类似原因服务器文件系统被复制了,客户机可以得到请求的文件系统的所有位置。客户机运用自己的策略可以挂载并访问它请求的文件系统的适当位置。类似的,如果一个文件系统被迁移了,客户机根据访问旧位置时得到的错误查询文件系统的新位置,并为适应重新定位进行必要的改变。
NFSv4 的最后一个亮点是让服务器可以授权给在缓存状态下的客户机某些职责,这些于提供真正的数据完整性来说是必需的。使用 NFSv4,服务器可以为一个特定的文件提供读或写授权。如果一个客户机得到了一个文件的读授权,那么在这个授权期间,任何其它客户机都不允许写这个文件。此外,如果一个客户机得到了一个文件的写授权,那么在此授权期间没有其他客户机可以写或读这个文件。当一个客户机请求一个文件,而这个文件已授权给另一个客户机时,会发生冲突,授权可能会被服务器收回。在这种情况下,服务器会通过客户机与服务器之间的一个回调路径通知授权的用户,并收回授权。授权让客户机使用 NFS 缓存在本地进行服务操作,而不用与服务器进行实时交互,这样就减少了服务器负载和网络传输。
TCP 改进 流控制传输协议 (SCTP) 是 2.6 内核中增加的一个新的传输层协议。SCTP 除了具有传输控制协议 (TCP) 所具有的相同特性之外,还具备了用于电话、数据通信和高可用应用程序的另外的特性。
SCTP 提供了与 TCP 类似的功能,可以确保无错的、序列化的数据传输,并在数据传输整个过程中在两个端点之间建立一个面向会话的、端到端的联系。不过,SCTP 还提供了 TCP 所不具备的功能,比如 multi-streaming 和 multi-homing,这对某些任务来说至关重要,例如 IP 网络之上的电话信号。
Multi-streaming 让数据可以分为多个独立的序列流。这样的结果是,任何一个流中的消息丢失最初只会影响这个流本身,而不会影响其他的流。SCTP 是面向消息的(相对而言,TCP 是面向字节的),支持构造独立的消息边界,支持多路数据流。如果使用 TCP 中用到的单一数据流方法,当消息丢失或者发生序列错误时,会导致更多的延迟。直到正确的序列被重新存贮之前,TCP 必须延迟向应用程序层的传输。这一数据传输的延迟会影响那些不是必须要求消息排序的应用程序的性能,比如电话信号或者有多媒体内容的网页。虽然电话信号需要对同源的(比如同一次通话)消息进行排序,但是其他相关的消息的传输并不要求序列的完整性。
包含有不同类型和大小的多媒体对象的网页,可以使用 multi-streaming 以部分有序的方法来传输这些内容,而不要用严格有序的方法。这一数据传输的灵活性会提高传输的用户可感知性。此外,在单一的 SCTP 联系中进行数据传输的思想意味着所有的流可以依赖于一个共同的流量和拥塞控制机制,这样减少了传输层所需要的工作。
Multi-homing 是使 SCTP 与传统的传输层协议不同的另一个特性。Multi-homing 允许单一的 SCTP 端点支持多个 IP 地址,并在到目标有多个路由的情况下提供冗余。TCP 和 UDP 用的是 single-homed 会话,这样当本地 LAN 访问失败会隔离开终端系统,并且整个网络内的故障会导致晢时的失败,直到 IP 路由协议重新路由传输。
Multi-homed SCTP 和冗余的 LAN 一道,考虑到了对本地端点访问的增强。多个不同前缀的地址和/或路由,再加上 SCTP multi-homing,提高了贯穿于整个网络的冗余。SCTP 的 multi-homing 特性并不提供网络负载平衡与共享功能。这个机制的关键目的是为 SCTP 之上的应用程序提供冗余的连接。SCTP 指定一个地址作为“主”地址,并使用这个地址来进行所有的数据通信。当需要重传时,数据会发送到所有的地址,以增加到达另一个端点的可能性。在主连接完全失败的情况下,所有的数据被重新路由到另一个地址。与标准高可用性中用到的方法类似,一个“心跳”信号会发送到失败的主连接,这可以用来确定原来的连接是否可以重新建立起来。
IP 安全和压缩 Internet 协议安全 (IPSec) 是对 2.6 内核的另一个增强。IPSec 提供了在局域网和 Internet 上认证和加密网络通信的方法。除了提供包加密外,2.6 内核还通过 IP 有效载荷压缩 (IP Payload Compression, IPComp) 提供了改进的传输。IPComp 是一个协议,它使用压缩和解压缩算法来改进在慢的和/或拥塞的网络上的传输质量。
2.6 内核对 Internet 协议安全 (IPSec) 的引入,在 Internet 协议 (IP) 层向用户提供了安全的传输服务。IPSec 为复杂结合在一起构成 Internet 的媒介和各种应用程序提供了一个通用的解决方案。2.6 内核支持两种 IPSec 机制:认证报头 (Authentication Header, AH) 和封装的安全有效载荷 (Encapsulated Security Payload, ESP)。它们都依赖于 2.6 内核中包含的 Cryptographic API 提供的认证算法。
认证报头 (AH) 是直接添加到 IP 报头之后的附加报头,以提供包认证。包级别的认证让用户可以确保收到的包来自于特定的机器,并且它的内容在传输路径上没有被改变。这种机制没有试图隐藏或保护包的内容。AH 所提供的主要特