AFP文件访问模型
AFP文件访问模型如右图所示。在AFP中,AFP客户端和AFP服务器之间交换的所有值均以网络字节顺序通过网络发送。
在本地计算机中运行的程序通过使用该计算机的本地文件系统命令来请求和操作文件。这些命令可以操作物理连接到本地计算机的磁盘或其他内存资源上的文件。通过AFP,程序可以使用相同的本地文件系统命令来处理驻留在远程计算机(例如文件服务器)上的共享资源上的文件。
在本地计算机上运行的程序向本地文件系统发送命令。本地存储器中的数据结构指示卷是由本机文件系统还是由某些外部文件系统管理。本地文件系统通过查看此数据结构来发现请求的文件是在本地还是远程访问。如果数据结构指示外部文件系统,则本地文件系统将该命令路由到AFP转换器。
翻译器,顾名思义,将本机命令转换为AFP命令,并将其发送到管理远程资源的文件服务器。 AFP规范中没有定义AFP翻译器,应用程序员可以设计它。
在本地计算机上运行的程序也可能需要发送在本地文件系统中不存在等效命令的AFP命令。在这种情况下,AFP命令直接发送到所需的外部文件系统,如上图所示。例如,用户认证可能必须通过为此目的编写的接口来处理。
AFP支持使用Mac OS和使用MS-DOS的个人电脑的电脑。可以扩展AFP以支持其他类型的电脑。AFP的任何实施必须考虑到联网计算机的本地文件系统的功能,并在共享环境中模拟其功能。换句话说,共享文件系统应该复制本地计算机文件系统的特性。不同的计算机类型共享相同的文件服务器,模拟每个本地计算机的本机文件系统的功能变得越来越复杂。因为每个计算机类型在处理文件的方式上具有不同的特征,所以共享文件系统需要拥有同一网络上所有计算机的组合能力。2
AFP的组成三个系统组件组成AFP:
文件系统结构,其由可通过网络寻址的资源(诸如文件服务器,卷,目录,文件和分支)组成。这些资源称为AFP文件系统可见实体。AFP规定这些实体之间的关系。例如,一个目录可以是另一个目录的父目录。
AFP命令,这是本地计算机用于操作AFP文件系统结构的命令。如前所述,翻译者以文件服务器的形式发送文件系统命令,或者在本地计算机上运行的应用程序可以直接进行AFP命令。
与命令关联的算法,用于指定AFP命令执行的操作。
虽然区分了本地计算机和文件服务器,但是AFP可以在同一个节点内支持这两个功能。但是,AFP并不能解决计算机既是AFP客户端又是AFP服务器时可能出现的并发问题。这些组合节点上的软件必须仔细设计,以避免潜在的冲突。
AFP不提供支持文件服务器管理的命令。管理功能(如注册用户和更改密码)必须由单独的网络管理软件来处理。还必须提供附加软件来添加,删除和查找网络中的服务器。2
AFP文件系统结构本节介绍AFP文件系统结构及其与AFP文件系统可见实体相关的参数。这些实体包括文件服务器,其卷,目录(Mac OS术语中的“文件夹”),文件,和文件分支。本部分还描述了称为卷目录的树结构,它是对目录和文件之间的关系的描述。
通过发送AFP命令,AFP客户端可以获取有关文件服务器和文件系统结构的其他部分的信息,修改从文件服务器获得的信息,创建和删除文件和目录,在单个文件中检索和存储信息2
文件服务器文件服务器是具有至少一个大容量磁盘的计算机,允许网络上的其他计算机共享存储在其中的信息。AFP对共享磁盘数量没有限制。连接到文件服务器的每个磁盘通常都包含一个卷,尽管磁盘可以细分为多个卷。每个卷显示为AFP客户端的单独实体。
文件服务器具有唯一的名称和其他标识参数。这些参数标识服务器的机器类型和连接卷数,以及服务器支持的AFP版本用户身份验证方法(UAM)。一些更常见的AFP文件服务器参数如右图所示。2
卷文件服务器可以使AFP客户端可以看到一个或多个卷。每个卷都有与之相关联的参数,如Volume Bitmap中所列。为了在卷级别提供安全性,服务器可以为任何卷保留可选的密码参数。2
卷类型AFP卷分层结构。有两种类型的分层卷:固定和可变。固定的目录ID卷包含多个目录,每个目录具有自己的永久目录ID,该目录ID在创建目录时分配。目录ID在卷的生存期内不用于任何其他目录,即使其分配的目录稍后被删除。
变量目录ID卷还维护其目录ID的唯一性,但与固定的目录ID卷不同,因为它不会将永久目录ID与每个目录相关联。对于变量目录ID卷,只要AFP客户端发送FPOpenDir命令,文件服务器将为目录创建唯一的目录ID。然后,文件服务器维护此目录ID,直到客户端发送FPCloseDir命令或AFP会话终止。通过将FPOpenDir命令发送到变量目录ID卷获得的目录ID必须仅用于该会话。如果目录ID被存储并用于引用稍后会话中的目录,则无法预测结果:命令可能会失败,操作错误的目录或意外操作正确的目录。
卷类型具有以下支持功能和约束:使用MS-DOS的个人计算机可以访问任何类型的服务器卷,因为目录ID的概念对其文件系统是外来的。 但是,使用分层文件系统(HFS)的Macintosh计算机无法直接使用变量目录ID卷。 Macintosh HFS卷是固定的目录ID卷,文件服务器上的分层卷可以由HFS处理,只有当它们是固定的目录ID卷时。 Mac OS应用程序,如Finder,保存目录ID,不要指望它们有所不同。
卷目录卷目录是描述固定和可变目录ID卷上的文件和目录的分支树布置的结构。目录不跨多个卷; AFP客户端会看到AFP客户端可见的每个服务器卷的单独卷目录。右下图显示了一个卷目录的示例,并说明了它的元素。
卷目录包含从基本目录(称为根)分支的目录和文件。这些目录和文件被称为目录节点或CNode(不要与网络上的设备混淆,也称为节点)。在树结构中,CNodes可以通过两种方式进行定位:
在主干的末端,在这种情况下,CNode被称为叶子;叶子CNode可以是文件或空目录
从上下连接到其他CNode,这种情况下,CNode称为内部CNode。内部CNodes始终是目录
节点具有父/子关系。给定的CNode是目录树中它上面的CNode的后代,较高的CNode被认为是其父目录。后代包含在父目录中。没有父目录的唯一的CNode是根目录。
当AFP命令通过卷目录时,只能从根到特定CNode的最短路径。沿着该路径的节点被称为目的节点的祖先,后者又称为其祖先的后代。
目录节点名称CNode名称标识卷目录中的每个目录和文件。每个目录和文件都有一个长名称,一个简称,也可能有一个AFPName。
长名称和短名称对应于AFP支持的两个本地文件系统:Mac OS通过Long Names引用文件和目录;MS-DOS计算机使用短名称。
AFPNames编码符合Unicode标准(UTF-8),它使用16位编码超过65,000个字符。为了保持字符编码简单高效,Unicode标准为每个字符分配唯一的数值和名称。为了帮助从UTF-8转换为其他脚本系统时,AFPNames以一个四字节的文本编码提示开头,指定了最初用于组成名称的脚本。文本编码提示之后是一个两字节长度的字段,指定以下UTF-8编码名称的长度。
为了允许不同的计算机共享资源,文件服务器以所有三种格式提供CNode名称。当创建或重命名文件和目录时,用户提供与本地文件系统一致的名称。服务器然后使用一个算法生成另一个名称(长或短)。
卷目录的根目录表示卷,根的长名与卷名称相同。 卷也可能具有UTF-8编码的名称。 卷有一个短名称,它是根目录的短名称,但是AFP不允许使用它。 通过AFP可以删除或重新命名根和卷。
目录和文件目录和文件存储在卷中,构成AFP客户端可见的文件系统结构的下一级。目录分支到文件和其他目录。每个目录都有一个标识符,通过它可以对其及其后代进行寻址。因此,目录可以被认为是逻辑上包含他们的后代目录和文件,具有下面描述的参数。
目录ID
卷目录中的每个目录由称为其目录ID的四字节长整型标识。因为同一卷上的两个目录不能具有相同的目录ID,所以目录ID唯一标识卷内的目录。
在卷目录中,如前所述,目录具有彼此之间的祖先,父类和子代关系。 CNode的父节点的目录ID称为CNode的父ID。
CNode只能有一个父节点,所以给定的CNode有一个唯一的父ID。但是,CNode可以有几个祖先目录标识符,每个祖先一个。父目录被认为是祖先。
目录ID从1到16被保留。根目录ID始终为2.根目录的父ID始终为1.(根目录并不具有父目录,只有当AFP命令要求根目录的父ID时,才返回此值。)零(0)为不是有效的目录ID。
目录参数
对于每个目录,服务器必须维护文件和目录位图中列出的参数。通过调用FPGetFileDirParms获取参数,并在DirBitMap参数中指定要获取的目录参数。某些目录参数可以通过调用FPSetDirParms或FPSetFileDirParms来设置。
目录的Attributes参数提供有关目录的其他信息。文件和目录属性位图列出了目录的Attributes参数的位定义。没有特定的位存在禁止移动目录,但是当目录被移动或移动和重命名时,目录移动受到RenameInhibit位的限制。
访问权限(四字节数量)包含与目录的所有者,组和Everyone对应的读取,写入和搜索访问权限。 Access Rights参数的高字节是用户访问权限摘要字节,表示AFP客户端的当前用户对该目录的权限。
如果文件或目录驻留在支持UNIX特权的卷上,则FPUnixPrivs结构用于返回UNIX特权。
文件参数
对于每个文件,服务器必须维护文件位图中列出的参数。通过调用FPGetFileDirParms并在FileBitmap参数中指定要获取的文件参数,通过调用FPResolveID并指定文件的文件ID或通过调用FPGetForkParms来获取参数。可以通过发送FPSetFileParms,FPSetFileDirParms和FPSetForkParms命令来设置一些文件参数。
文件编号是与卷上的每个文件相关联的唯一编号。这个数字纯粹是信息丰富的。AFP不允许通过其文件编号规定文件。
没有特定的位存在来禁止移动文件,但文件移动受到RenameInhibit位的约束,只有当文件被移动和重命名时,而不是简单地移动文件。