命名服务是任何一个计算机系统的基本工具——这是名称和对象的映射及能够根据名称找到对象。当使用任何计算机程序或者系统时,你总是对一个或其他对象进行命名。例如,当你使用一个电子邮件系统时,你必须提供收件人的名称;访问计算机中德一个文件,你必须其名称。一个命名服务允许你通过给定的名称查找一个对象。
一个命名服务主要的功能是为人们友好地映射名称到对象,例如地址,身份,或者计算机程序使用的对象。
例如,网络域名名称系统把机器映射到IP地址:www.example.com ==> 192.0.2.5
一个文件系统把文件名映射到文件引用,计算机可以使用文件引用访问文件的内容。
c:\bin\autoexec.bat ==> File Reference这两个例子同样说明当今命名服务的广泛应用——大到网络中对象的命名,小到本地文件系统中文件的命名。
为了在一个命名系统中查找一个对象,你应提供对象的名称。命名系统决定名称必须遵循的命名规则。这些语法有时候被称为命名系统约定。一个名称由组件组成。一个名称的表示法由组件名称标记的组件分隔符组成。
UNIX的文件系统命名约定是一个文件根据与其相关的根路径来命名,每个组件的路径使用正斜杠符(“/”)分开。例如UNIX路径名 /usr/hello,命名一个hello文件在usr目录下,usr位于文件系统的根目录;DNS命名约定是从右至左使用一个句点(“.”)符号排列DNS名称的组件。所以sales.Wiz.COM使用sales名称命名了DNS的条目,对应于Wiz.COM DNS条目。接下来就是Wiz.COM条目,在COM条目下命名了Wiz条目;轻量级目录访问协议(LDAP)命名的约定是从右至左排列组件,使用逗号(",")分开。所以cn=Rosanna Lee, o=Sun, c=US名称命名了一个cn=Rosanna Lee的条目,对应于o=Sun。接下来就是o=Sun。LDAP有一个特别的规定就是每一个名称的组件必须是一个使用等号("=")分隔的键值对。
名称和对象的关系称为绑定。一个文件名绑定了一个文件。DNS包含了机器名称和IP地址的绑定。一个LDAP名称绑定了一个LDAP条目。
基于命名服务,一些对象不能直接存储在一个命名服务上。这意味这,一个对象的拷贝不能放置在命名服务中。然而,它们必须通过引用进行存储。这意味着对象的一个指针或者引用被放置在命名服务中。一个引用表示了如何访问对象的信息。特别地,这是被用来与对象交流的一种简洁表示法,因为一个对象本身可能包含很多关于它状态的信息。使用引用你能够与对象交流和获取更多关于对象的信息。
例如,一个飞机对象可能包含了乘客和乘务员、飞行计划、燃油和操作状态、航班号和起飞时刻的列表。相反地,一个飞机的对象引用可能仅仅包含了航班号和起飞时刻。这个引用更加简洁地描述了该飞机对象和能够获取更多额外的信息;例如有一个文件对象,使用一个文件引用进行对它访问。还有一个打印机的对象,可能包含了打印机状态的信息,当前打印队列和纸槽中纸张的剩余量。但是一个打印机的引用或许仅仅包含了怎样去获取打印机,例如打印服务和打印协议。
尽管引用通常包含一些任意的信息,但它就像一个地址(或者是一个通信端点)非常有效地引用了对象中包含的内容:关于如何访问对象中指定的信息。
为了简洁,在没有要求明确区分的情况下,这篇教程使用对象来表示对象和对象引用。
一个上下文是name-to-object的集合。每一个上下文都有对应的命名约定。一个上下文总是提供返回值查找的lookup操作(解决方案),它特别提供了如下的一些操作:绑定名称、解绑名称和列出绑定名称。在一个上下文对象的名称能够被绑定在另外有相同命名约定的上下文对象中(称为子上下文)。
根据上面的示意图所示,/usr文件目录在UNIX文件系统表示了一个上下文。一个与其他文件相关联的文件目录代表了一个子上下文(UNIX用户以子目录的形式引用它)。这意味着,/usr/bin文件目录中,bin目录是usr的子上下文。一个DNS域名,例如COM,代表了一个上下文。一个与其他DNS域名相关联的DNS域名代表了一个子上下文。例如Sun.com这个域名,Sun域名是COM的一个子上下文。
最后,一个LDAP条目,例如c=us,代表了一个上下文。一个与其他LDAP条目相关联的LDAP条目代表一个子上下文。例如o=sun,c=us的轻量级目录访问协议(LDAP),o=sun是c=us的一个子上下文。
一个命名系统是一个相同类型上下文的联系集合(它们有相同的命名约定)及提供了常见的操作集合。
一个实现了DNS的系统称为一个命名系统。同样一个使用LDAP通信的系统也是一个命名系统。
一个命名系统为客户的naming=related操作提供了一个命名服务。通过命令服务的接口访问一个命名服务。DNS为机器名称和IP地址的映射提供了一个命名服务。LDAP为LDAP名称和LDAP条目映射提供了一个命名服务。一个文件系统为文件名和目录映射提供了一个命名服务。
一个命名空间是命名系统中所有名称的一个集合。UNIX文件系统的有一个包含了文件系统中所有文件名和目录的命名空间。DNS命名空间包含了DNS域名和条目。LDAP命名空间包含了所有LDAP条目的名称。
很多命名服务继承了一个目录服务。一个目录服务把多个对象与其名称关联,同时把对象与属性关联在一起。
目录服务=命名服务+包含属性的对象。
你不仅仅能够通过对象的名称找到一个对象,而且可以获取对象的属性或者基于对象的属性找到所对应的对象。
例如一个电话公司的目录服务。它把用户的名称映射到了他的地址和电话号码。一个计算机的目录服务于一个电话公司的目录服务相似,它们都能够存储譬如电话号 码和地址这样的信息。计算机的目录服务的功能更加强大,然而,因为它能够在网络中驻留和能够被用来存储各种各样的能够被用户、程序甚至是计算机本身和其他 计算机使用的信息。
一个目录对象代表中在计算机环境中的一个对象,一个目录对象能够被使用,例如,可以表示一个打印机、一个人、一台计算机、或者是一个网络。一个目录对象包含多个描述所表示对象的属性。
一个目录对象拥有多个属性。例如,一个打印机可能通过一个目录对象表示,这个打印机有如下属性:速率、解决方案和颜色,一个带用户邮箱地址、各种电话号码、邮政编码和计算机用户信息的用户也可能被一个目录对象表示。
一个属性有一个属性标识符和一个属性值的集合。属性标识符是区分属性值的一个标志。一个属性值是属性的内容。
Attribute Identifier : Attribute Value mail [email protected]
目录是目录对象的关联集合。一个目录服务是一种在目录中为对象关联的属性提供创建、添加、删除和修改操作的服务。服务通过自己的接口访问。许多目录服务的例子:
通 过为目录服务提供一个名称,你可以检索到指定的目录对象。或者,例如那些基于LDAP的目录同样支持搜索的概念。当你搜索时,你可以不提供一个名称而是有 在你指定的对象或者所有对象必须包含的属性的一个逻辑表达式查询语句 。这个查询语句被称为搜索过滤器。有时把这种类型的搜索称为反向搜索或者基于内容的搜索。目录服务搜索及返回符合搜索过滤器的对象。
例如,你可以查询目录服务获取:
目 录通常在一个体系结构中组织他们的对象。例如,LDAP在一个树形结构中组织所有的目录结构,这个树形结构称为目录信息树(DIT)。在DIT内部,例如 有一个机构的对象包含一组对象,这组对象可能反过来包含了人的对象。当目录对象以这样的方式组织时,它们充当了命名上下文的角色的同时也是属性的容器。