在安装身份库基础结构之前,服务器应该能够通过某种方法(服务或指定的文件)将身份库中的树名解析为服务器参照。NetIQ 建议使用服务定位协议 (SLP) 服务来解析树名。eDirectory 先前版本的安装中包含 OpenSLP。但是,从 eDirectory 8.8 开始,安装中不再包含 OpenSLP。您必须单独安装 SLP 服务或使用 hosts.nds 文件。如果您使用 SLP 服务,该服务的目录代理 (SLPDA) 必须稳定。
本节提供以下信息:
hosts.nds 文件是一个静态查找表,身份库应用程序使用它来搜索身份库分区和服务器。当网络中不存在 SLP DA 时,它可以帮助您避免 SLP 多路广播延迟。对于每个树或服务器,您必须在 hosts.nds 文件的一行中指定以下信息:
服务器名称或树名:树名应以后随点 (.) 结尾。
因特网地址:可以是 DNS 名称或 IP 地址。请不要使用 localhost。
服务器端口:(可选)追加在因特网地址后面以冒号 (:) 分隔。
除非本地服务器在非默认 NCP 端口上侦听,否则不需要在该文件中包含本地服务器的对应项。
要配置 hosts.nds 文件,请执行以下操作:
创建新的或打开现有的 hosts.nds 文件。
添加以下信息:
partition_name.tree_name. host_name/ip-addr:port server_name dns-addr/ip-addr:port
例如:
# This is an example of a hosts.nds file: # Tree name Internet address/DNS Resolvable Name CORPORATE. myserver.mycompany.com novell.CORPORATE. 1.2.3.4:524 # Server name Internet address CORPSERVER myserver.mycompany.com:524
(可选)如果您随后决定使用 SLP 来解析树名并确保网络中提供身份库树,请在 hosts.nds 文件中添加以下文本:
/usr/bin/slptool findattrs services:ndap.novell///(svcname-ws==[treename or *])"
例如,要搜索其 svcname-ws 属性与 SAMPLE_TREE 值匹配的服务,请输入以下命令:
/usr/bin/slptool findattrs services:ndap.novell///(svcname-ws==SAMPLE_TREE)"
注:请在安装 SLP 和身份库之后执行此操作。
如果所注册服务的 svcname-ws 属性为 SAMPLE_TREE,则输出将与 service:ndap.novell:///SAMPLE_TREE 类似。否则,您将不会收到输出响应。
OpenSLP 指的是 IETF Request-For-Comments (RFC) 2608 中所述的 IETF 服务定位协议 2.0 版标准的开源实现。
由 OpenSLP 源代码提供的接口是 RFC 2614 中所述的、以编程方式访问 SLP 功能的另一种 IETF 标准的实现。
要完全了解 SLP 的工作原理,最好阅读这些文档并吃透其中的内容。它们未必通俗易懂,但要想在内部网中正确配置 SLP,您必须了解这些知识。
有关 OpenSLP 项目的详细信息,请参见 OpenSLP 和 SourceForge 网站。OpenSLP 网站上提供了包含有用配置提示的数份文档。其中的许多文档在本文档发布时并不完善。
本节中包含了有个 SLP 的用途以及它与身份库关系的以下讨论:
为了提供更强大的服务播发环境,NetIQ 版本的 SLP 采用了某些具有 SLP 标准的库,但这样做的代价是降低了一定程度的可伸缩性。
例如,为了改善服务播发框架的可伸缩性,您可以对在子网上广播或进行多路广播的包数加以限制。SLP 规范通过对服务代理和用户代理上的目录代理查询施加限制,来实现此管理。发现的作用于所需范围的第一个目录代理,就是服务代理(以及本地用户代理)要为该范围的所有未来请求使用的目录代理。
实际上,NetIQ SLP 实现会扫描它所知道的所有目录代理以获取查询信息。它认为 300 毫秒的一轮往返时间已经很长,因此它可以在 3 到 5 秒内扫描 10 个服务器。如果已在网络中正确配置了 SLP,则不需要设置此时间,OpenSLP 假定针对 SLP 流量正确配置了网络。OpenSLP 的响应超时值大于 NetIQ SLP 服务提供程序的超时值,它会将目录代理的数目限制为响应的第一个代理,而不管该代理的信息是否正确和完整。
用户代理 (UA) 采用与某个应用程序链接的静态或动态库的物理形式。它允许该应用程序查询 SLP 服务。用户代理的工作是提供一个编程接口,使客户端能够查询服务,并使服务能够自我播发。用户代理将联系目录代理以查询位于指定范围内的、具有指定服务类的已注册服务。
用户代理遵循某种算法来获取查询将要发送到的目录代理的地址。一旦获取指定范围的目录代理 (DA) 地址,它们便会针对该范围一直使用该地址,直到其不再做出响应,此时,用户代理将获取该范围的另一个 DA 地址。用户代理通过以下方式查找指定范围的目录代理地址:
检查以确定当前请求中的套接字句柄是否已连接到指定范围的 DA。如果该请求正好是一个多部分请求,则表示该请求中可能已存在超速缓存的连接。
检查它的本地已知 DA 超速缓存以查找与指定范围匹配的 DA。
检查本地服务代理 (SA) 以查找具有指定范围的 DA(并将新地址添加到超速缓存)。
查询 DHCP 以查找与指定范围匹配的、网络配置的 DA 地址(并将新地址添加到超速缓存)。
在已知的端口上多路广播 DA 发现请求(并将新地址添加到超速缓存)。
指定的范围为“default”(如果未指定)。也就是说,如果未在 SLP 配置文件中静态定义任何范围,并且未在查询中指定任何范围,那么,使用的范围将为“default”。此外,还应注意,身份库永远不会在其注册中指定范围。如果存在静态配置的范围,则在缺少某个指定范围的情况下,该范围将成为所有本地 UA 请求和 SA 注册的默认范围。
服务代理采用主机上单独进程的物理形式。对于 Windows,slpd.exe 将作为本地计算机上的服务运行。用户代理通过向已知端口上的回写地址发送讯息来查询本地服务代理。
服务代理的工作是为已向 SLP 自行注册的本地服务提供持久的储存和维护地点,其本质上维护的是已注册本地服务的内存中数据库。事实上,除非存在本地 SA,否则服务无法向 SLP 注册。客户端能够发现仅包含 UA 库的服务,但注册却需要 SA,其主要原因是 SA 必须定期重新声明已注册服务的存在性,以维护在侦听目录代理中的注册。
服务代理通过执行以下操作并直接向可能的 DA 地址发送 DA 发现请求,来查找和超速缓存目录代理及其支持的范围列表:
检查所有静态配置的 DA 地址(并将新地址添加到 SA 的已知 DA 超速缓存)。
请求 DHCP 中的 DA 和范围的列表(并将新地址添加到 SA 的已知 DA 超速缓存)。
在已知端口上多路广播 DA 发现请求(并将新地址添加到 SA 的已知 DA 超速缓存)。
接收 DA 定期广播的 DA 播发包(并将新地址添加到 SA 的已知 DA 超速缓存)。
用户代理始终会先查询本地服务代理,这一点非常重要,因为本地服务代理的响应决定了用户代理是否要继续执行下一个发现阶段(在本案例中为 DHCP - 请参见用户代理中的步骤 3 和步骤 4)。
目录代理的工作是为播发的服务提供长期持久的超速缓存,以及为用户代理提供查找服务的访问点。作为超速缓存,DA 将侦听 SA 以播发新服务,并超速缓存这些通知。不久后,DA 的超速缓存就会变得更充实,或者说更完整。目录代理使用失效算法来令超速缓存项失效。某个目录代理启动时,将会从持久存储(通常是硬盘驱动器)中读取其超速缓存,然后开始根据算法令超速缓存项失效。当有新的 DA 启动或者当删除某个超速缓存时,DA 将检测此情况,并向所有侦听 SA 发送让其转储本地数据库的特殊通知,以使 DA 能够快速构建超速缓存。
在不存在任何目录代理的情况下,将由 UA 执行 SA 可以响应的常规多路广播查询,以 DA 构建超速缓存时所用的大致相同方式构建所请求服务的列表。此类查询返回的服务列表是不完整的,与 DA 提供的服务列表相比,该列表的本地化程度要高得多,特别是当存在多路广播过滤时尤其如此,为了将广播和多路广播局限于本地子网,许多网络管理员会执行此项过滤。
总而言之,所有这一切都取决于用户代理针对给定范围查找到的目录代理。
%systemroot%/slp.conf 文件中的以下参数用于控制目录代理发现:
net.slp.useScopes = comma-delimited scope list net.slp.DAAddresses = comma-delimited address list net.slp.passiveDADetection = <"true" or "false"> net.slp.activeDADetection = <"true" or "false"> net.slp.DAActiveDiscoveryInterval = <0, 1, or a number of seconds>
指定 SA 要播发到的范围,以及当服务或客户端应用程序执行的注册或查询不存在特定的范围时,执行查询时将采用的范围。由于身份库会始终播发到默认范围并在默认范围内执行查询,此列表将成为所有身份库注册和查询的默认范围列表。
表示优先级最高的 DA 点分十进制 IP 地址的逗号分隔列表。如果此已配置 DA 列表不支持某个注册或查询的范围,才会由 SA 和 UA 执行多路广播 DA 发现,除非禁用了此类发现。
默认情况下为 True。目录代理将定期通过已知端口在子网上广播其存在性(如果已进行了相应的配置)。这些包称为 DAAdvert 包。如果将此选项设置为 False,SA 将忽略所有广播 DAAdvert 包。
默认情况下为 True。此参数允许 SA 定期广播请求,以使所有 DA 能够以定向的 DAAdvert 包作为响应。定向包不会以广播发出,而是应请求在响应中直接发送给 SA。如果将此选项设置为 False,则 SA 将不会定期广播 DA 发现请求。
表示一个 tri-state 参数。默认值为 1,该特殊值表示 SA 在初始化时只应发出一个 DA 发现请求。将此选项设置为 0 相当于将 activeDADetection 选项设置为 false。任何其他值是发现广播之间间隔的秒数。
正确使用这些选项可确保合理使用网络带宽来进行服务播发。事实上,所设计的默认设置本就优化了一般网络的可伸缩性。