1. Overview
名字和标识符:标识资源的东西,“标识符”往往只能由程序处理
- 纯粹而言,至是一个比特模式
- 非纯粹而言,可能还包含对象位置信息等其它信息
地址:标识对象的位置而非对象本身(但会重定位,所以不能用于标识对象本身)
解析:名字/标识符被翻译成命名的资源或对象的数据
绑定:名字与对象之间的关联
- 一般被绑定到对象的属性上,而非对象本身,如DNS将域名映射到主机的属性(IP地址等)
URI, URL, URN:见前几篇解释
2. 名字服务
存储<name, attr>
对,并通过name
查找attri
如DNS中通过域名(
name
),查找地址(attr
)
2.1. Name Space
Name space: 一个服务能识别的所有有效名字的集合
DNS中的名字即“域名”
Alias: 别名,作为另一个名字,被定义代表与名字相同的信息,类似文件系统的符号链接
Naming domain: 命名域,是仅有一个总的管理权利来管理该域中的名字分派问题的名字空间
DNS中的域是域名的集合
组合和定制名字空间:名字可属于不同的名字空间,可以是异构的,且名字空间可以定制
2.2. 名字解析
a) 名字服务器 & 导航
名字服务器:为了保证高可用和性能,需要使用复制。
如DNS规定数据库的任何一个自己都必须复制到2个不会同时失效的服务器上。
导航:从超过一个名字服务器上定位命名数据的过程
对于DNS中,包含2类导航:
- 迭代导航:客户将名字发送到NS上,试图解析,若有这个名字则返回结果,否则返回建议的另一个NS地址,进一步导航,直到定位成功/失败为止(客户会和多个NS打交道)。替代方案如下(客户端变得只和一个NS打交道):
- 非递归导航:客户端选中一个NS,试图解析,若有这个名字则返回结果,否则NS作为客户进行迭代/组播导航,最后将结果返回给客户
- 递归式导航:客户端选中一个NS,试图解析,若有这个名字则返回结果,否则NS作为客户,选中另一个存储了改名字更长前缀的NS2,请求解析,如此递归下去,直到名字被解析为止
- 组播导航:客户向一组NS组播需要解析的名字以及对象类型,只有包含对应命名的NS才会响应请求。
b) 缓存
名字服务中,客户端和服务端都会维护一个历史解析结果的缓存,以提高性能,同时在某个服务器崩溃下,维护可用性。不过需要及时清理过期的缓存。
3. 目录服务
和名字服务相反,其存储了一组name
和attr
的绑定,查找基于attr
(而名字服务基于name
)
实例有:X.500, LDAP等
发现服务:自发网络环境下设备提供的服务的目录服务。
一般情况下,目录服务的地址是众所周知,且客户端是预先配置好的;而自发网络环境下,设备会随时加入,这回导致组播导航