本节提供用于服务定位协议 (Service Location Protocol, SLP) 服务的概述、规划、任务和参考信息。
服务定位协议 (Service Location Protocol, SLP) 为已启用 SLP 的网络服务的搜索和调配提供了与平台无关的便捷框架。本章介绍用于 IP 内联网的 SLP 体系结构和 SLP 的 Solaris 实现。
本节概括了 SLP 的基本操作,并介绍了 SLP 管理中所用的代理和进程。
只需进行少量配置或无需进行任何配置,SLP 便可自动提供下面的所有服务。
旨在获取访问服务所需信息的客户机应用程序请求
对网络硬件设备或软件服务器的服务通知;例如,打印机、文件服务器、摄像机和 HTTP 服务器
从主服务器故障中进行托管恢复
此外,还可以根据需要执行以下操作,以管理和调整 SLP 操作。
将服务和用户组织到由逻辑组和功能组构成的范围中
启用 SLP 日志,以监视网络中的 SLP 操作或对其进行故障排除
调节 SLP 时间参数,以提高性能和可伸缩性
将 SLP 配置为:在不支持多点传送路由的网络中部署 SLP 时,它不发送和处理多点传送消息
SLP 库向网络识别的代理告知通知服务,以便在网络中搜索这些服务。SLP 代理负责维护有关服务类型和位置的最新信息。这些代理也可以使用代理注册来通知未直接启用 SLP 的服务。有关更多信息,请参见第 10 章,引入传统服务。
客户机应用程序依赖于 SLP 库,该库可直接向通知服务的代理发出请求。
下表介绍了 SLP 代理。有关此卷中使用的这些术语和其他术语的扩展定义,请参阅词汇表。
表 7–1 SLP 代理
SLP 代理 |
说明 |
|
---|---|---|
目录代理 (Directory Agent, DA) |
对服务代理 (Service Agent, SA) 注册的 SLP 通知进行高速缓存的进程。DA 会根据需要,将服务通知转发给用户代理 (User Agent, UA)。 |
|
服务代理 (Service Agent, SA) |
代表服务来分发服务通知并向目录代理 (Directory Agent, DA) 进行注册的 SLP代理。 |
|
用户代理 (User Agent, UA) |
代表用户或应用程序获取服务通知信息的 SLP 代理。 |
|
范围 |
服务的管理或逻辑分组。 |
|
下图显示了实现 SLP 体系结构的基本代理和进程。该图表示了 SLP 的缺省部署。未进行任何特殊配置。只需要两个代理:UA 和 SA。SLP 框架允许 UA 向 SA 多点传送服务请求。SA 会向 UA 单点传送应答。例如,当 UA 发送服务请求消息时,SA 将以服务应答消息来响应。服务应答包含与客户机要求相匹配的服务的位置。属性和服务类型还可能具有其他请求和应答。有关更多信息,请参见第 11 章,SLP(参考)。
下图显示在框架中部署 DA 时用于实现 SLP 体系结构的基本代理和进程。
部署 DA 时,网络中发送的消息较少,因此 UA 可以更快速地检索信息。当网络规模增大或者不支持多点传送路由时,DA 是基本要素。DA 用作已注册的服务通知的高速缓存。SA 发送注册消息 (SrvReg),其中列出它们向 DA 通知的所有服务。然后,SA 将在应答中收到确认 (SrvAck)。服务通知将由 DA 刷新,或到期(根据为通知设置的生命周期)。UA 搜索到 DA 后,会向 DA 单点传送请求,而不向 SA 多点传送请求。
有关 Solaris SLP 消息的更多信息,请参阅第 11 章,SLP(参考)。
在 Solaris SLP 实现中,表 7–1 中的 SLP SA、UA、DA、SA 服务器、范围和其他体系结构组件将部分映射到 slpd 中,部分映射到应用程序进程中。SLP 守护进程 slpd 会组织一些脱离主机的 SLP 交互,以执行以下操作:
使用被动和主动目录代理搜索,以便搜索网络中的所有 DA
维护更新的 DA 表,以便在本地主机上使用 UA 和 SA
用作传统服务通知的代理 SA 服务器(代理注册)
可以通过设置 net.slpisDA 属性,将 slpd 也配置为用作 DA。请参见第 9 章,管理 SLP(任务)。
有关 SLP 守护进程的更多信息,请参见 slpd(1M)。
除了 slpd 之外,通过 C/C++ 和 Java 客户机库(libslp.so 和 slp.jar)也可访问 UA 和 SA 客户机的 SLP 框架。客户机库可提供以下功能:
提供可注册和注销服务通知等网络服务的软件
可通过发出针对服务通知的查询来请求服务的客户机软件
可用于注册和请求的 SLP 范围的列表
要在 slpd 与提供上述服务的客户机库之间启用进程内通信,不必进行任何特殊设置。但是,必须在装入客户机库之前先运行 slpd 进程,该库才能正常运行。
在下图中,服务提供商计划中的 SLP 客户机库使用 SA 功能。服务提供商计划使用 SLP 客户机库来向 slpd 注册和注销服务。服务客户机计划中的 SLP 客户机库使用 UA 功能。该服务客户机计划使用 SLP 客户机库来发出请求。SLP 客户机库或者向 SA 多点传送请求,或向 DA 单点传送请求。此通信对应用程序是透明的,但以单点传送方式发送请求时速度更快。设置不同的 SLP 配置属性会对客户机库的行为产生影响。有关详细信息,请参见第 9 章,管理 SLP(任务)。slpd 进程可以处理所有 SA 功能,例如应答多点传送请求和向 DA 注册。
请参阅以下文档,了解有关 SLP 的详细信息:
Kempf、James 和 Pete St. Pierre。用于企业网络的服务定位协议。John Wiley & Sons, Inc. ISBN 编号: 0–471–31587–7。
验证管理基础结构管理指南。部件号: 805–1139–03。
Guttman、Erik、Charles Perkins、John Veizades 和 Michael Day。服务定位协议,第 2 版,Internet 工程任务组 (Internet Engineering Task Force, IETF) 的 RFC 2608。 [http://www.ietf.org/rfc/rfc2608.txt]
Kempf、James 和 Erik Guttman。用于服务定位的 API,Internet 工程任务组 (Internet Engineering Task Force, IETF) 的 RFC 2614。 [http://www.ietf.org/rfc/rfc2614.txt]
本章介绍有关规划和启用 SLP 的信息。以下各节讨论了 SLP 配置和启用 SLP 的过程。
SLP 守护进程已预先配置为使用缺省属性。如果您的企业使用缺省设置可以正常运行,则 SLP 部署实际上不需要进行任何管理。
但在某些情况下,可能要修改 SLP 属性,以调整网络运行或激活某些功能。例如,通过一些配置更改可以启用 SLP 日志。SLP 日志和 snoop 跟踪中的信息有助于确定是否需要进行其他配置。
SLP 配置属性驻留在 slp.conf 文件中,该文件位于 /etc/inet 目录中。如果决定更改缺省属性设置,请参阅第 9 章,管理 SLP(任务)中的相应过程。
在修改 SLP 配置设置之前,请考虑以下与网络管理的关键方面有关的问题:
企业中正在运行何种网络技术?
该技术可以顺利处理多大网络通信流量?
该网络可以提供多少种服务,分别是什么类型?
网络中有多少用户?他们需要什么服务?用户相对于他们最常访问的服务而言在哪个位置?
可以使用启用 SLP 的 snoop 实用程序和 SLP 日志实用程序,确定是否需要重新配置以及需要修改的属性。例如,您可能需要通过重新配置某些属性来执行以下操作:
适应具有不同延迟和带宽特性的混合网络介质
从网络故障或未规划的分区中恢复事务
添加 DA 以减少 SLP 多点传送的扩散
实现新范围,根据用户最常访问的服务来组织用户
snoop 实用程序是一种用于提供网络通信流量信息的被动管理工具。此实用程序自身只生成最小流量,并可使您在活动发生时监视网络中的所有活动。
snoop 实用程序可提供对实际 SLP 消息流量的跟踪。例如,在运行带有 slp 命令行参数的 snoop 时,该实用程序将在跟踪中显示有关 SLP 注册和注销的信息。通过检查哪些服务正在注册以及正在发生的重新注册活动量,可以使用此信息测量网络负载。
snoop 实用程序对于观察企业中 SLP 主机之间的通信流量也很有用。运行带有 slp 命令行参数的 snoop 时,可以监视以下类型的 SLP 活动,以确定是否需要重新配置网络或代理:
使用特定 DA 的主机数量。使用此信息来确定是否需要为了负载平衡而部署其他 DA。
使用特定 DA 的主机数量。使用此信息可帮助您确定是否为某些主机配置新范围或不同范围。
是 UA 请求超时还是 DA 确认较慢。可以通过监视 UA 超时并重新传输来确定 DA 是否过载,也可以检查 DA 是否需要比几秒钟长的时间来向 SA 发送注册确认。如果需要,可利用此信息通过部署其他 DA 或更改范围配置,重新平衡 DA 中的网络负载。
使用 snoop 和 -V(详细)命令行参数,可以获得注册生命周期和 SrvReg 中的刷新标志值,以确定是否应减少重新注册数量。
还可以使用 snoop 来跟踪其他种类的 SLP 通信流量,例如:
UA 客户机与 DA 之间的通信流量
多点传送 UA 客户机与应答 SA 之间的通信流量
有关 snoop 的更多信息,请参阅 snoop(1M)。
结合使用 netstat 命令和 snoop,以查看流量和拥塞统计信息。有关 netstat 的更多信息,请参阅 netstat(1M)。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
运行带有 slp 命令行参数的 snoop。
Brief Mode: # snoop slp |
在缺省的简短模式下运行 snoop 时,屏幕中会显示正在运行的输出。SLP 消息会被截断,以便每个 SLP 跟踪的消息占一行。
Verbose Mode: # snoop -v slp |
在冗余模式下运行 snoop 时,snoop 会在屏幕中显示正在运行的、未缩写的输出,该输出将提供以下信息:
服务 URL 的完整地址
所有服务属性
注册生命周期
所有安全参数和标志(如果可用)
在以下示例中,slpd 以缺省模式在 slphost1 中作为 SA 服务器运行。SLP 守护进程会将 slphost2 初始化并注册为回显服务器。然后,将在 slphost1 中调用 snoop slp 进程。
为简化对跟踪结果的说明,以下 snoop 输出中的各行都用行号作为标志:
(1) slphost1 -> 239.255.255.253 SLP V@ SrvRqst [24487] service:directory-agent [] (2) slphost2 -> slphost1 SLP V2 DAAdvert [24487] service:directory-agent://129 (3) slphost1 -> 239.255.255.253 SLP V2 SrvRqst [24487] service:directory-agent [] (4) slphost1 -> 239.255.255.253 SLP V2 SrvRqst [24487] service:directory-agent [] (5) slphost1 -> slphost2 SLP V2 SrvReg [24488/tcp]service:echo.sun:tcp://slphost1: (6) slphost2 -> slphost1 SLP V2 SrvAck [24488/tcp] ok (7) slphost1 -> slphost2 SLP V2 SrvDereg [24489/tcp] service:echo.sun:tcp://slphost1: (8) slphost2 -> slphost1 SLP V2 SrvAck [24489/tcp] ok |
显示 slphost1 上的 slpd,该守护进程通过向 SLP 多点传送组地址进行多点传送,执行活动目录代理搜索来搜索目录代理。 在跟踪显示中,用于主动搜索的消息编号 24487 在方括号中表示。
表示来自跟踪 1 的主动搜索请求 24487 由 slpd 应答,该守护进程作为 DA 在主机 slphost2 上运行。 slphost2 中的服务 URL 已被截断,以便显示在一行中。DA 已发送 DA 通知作为对多点传送目录代理搜索消息的应答,如跟踪 1 和 2 中匹配的消息编号所示。
显示 slphost1 中的 UA 对于其他 DA 的多点传送。 由于 slphost2 已对请求做出应答,因此它将禁止再次响应,不会进行其他的 DA 应答。
重复上一行中显示的多点传送操作。
在向 slphost2 中的 DA转发 SA 客户机注册的 slphost1 上显示 slpd。slphost1 向 slphost2 上的 DA 进行回显服务器的单点传送服务注册 (SrvReg)。
显示 slphost2 对 slphost1 SrvReg 的响应,该响应带有指示注册已成功的服务确认 (SrvAck)。
snoop 跟踪中不显示运行 SA 客户机的回显服务器与 slphost1 上的 SLP 守护进程之间的流量。缺少此信息的原因是 snoop 操作通过网络回送执行。
在注销回显服务通知的 slphost1 上显示回显服务器。slphost1 中的 SLP 守护进程会将注销转发给 slphost2 上的 DA。
显示 slphost2 对 slphost1 的响应,该响应带有指示取消注册成功的服务确认 (SrvAck)。
第 5、6、7 和 8 行的消息编号后附加的 /tcp 参数指示通过 TCP 进行了消息交换。
监视 SLP 通信流量后,可以使用从 snoop 跟踪中收集的信息来确定是否需要对 SLP 缺省值进行任何重新配置。使用第 9 章,管理 SLP(任务)中的相关信息来配置 SLP 属性设置。有关 SLP 消息和服务注册的更多信息,请参阅第 11 章,SLP(参考)。
以下各节介绍用于配置 SLP 代理和进程的信息和任务。
SLP 配置属性控制网络交互、SLP 代理的特性、状态和日志。在大多数情况下,无需对这些属性的缺省配置进行任何修改。但当网络介质或拓扑结构发生更改时,可以使用本章中的过程实现以下目标:
补偿网络延迟
减少网络拥塞
添加代理或重新指定 IP 地址
激活 SLP 日志
可对 SLP 配置文件 /etc/inet/slp.conf 进行编辑,以执行下表所示的操作。
表 9–1 SLP 配置操作
操作 |
说明 |
---|---|
指定 slpd 是否应用作 DA 服务器。SA 服务器是缺省设置。 |
将 net.slpisDA 属性设置为 True。 |
为 DA 多点传送消息设置时间。 |
设置 net.slp.DAHeartBeat 属性以控制 DA 多点传送未经请求的 DA 通知的频率。 |
启用 DA 日志以监视网络通信流量。 |
将 net.slp.traceDATraffic 属性设置为 True。 |
每次重新启动 SLP 守护进程时,/etc/inet/slp.conf 文件都会定义并激活所有 SLP 活动。该配置文件由以下元素组成:
配置属性
注释行和表示法
所有基本 SLP 属性(如 net.slp.isDA 和 net.slp.DAHeartBeat)都按以下格式命名。
net.slp.<keyword> |
SLP 行为由 slp.conf 文件中的一个属性或一组属性的值来定义。在 SLP 配置文件中,属性的结构类似于关键字-值对。如以下示例所示,关键字-值对由属性名称和相关设置组成。
<property name>=<value> |
每个属性的关键字都是指属性名称。值可为属性设置数值(距离或时间)、true/false 状态或字符串值参数。属性值可以为下列数据类型之一:
True/False 设置(布尔值)
整数
整数列表
字符串
字符串列表
如果不允许使用定义的值,则使用该属性名称的缺省值。此外,还会使用 syslog 记录一条错误消息。
可向 slp.conf 文件中添加注释,以介绍该行的特性和功能。文件中的注释行是可选的,但对于管理很有用。
配置文件中的设置不区分大小写。有关更多信息,请参阅:Erik Guttman、James Kempf 和 Charles Perkins 合著的“Service Templates and Service:Schemes”,即 Internet 工程任务组 (Internet Engineering Task Force, IETF) 中的 RFC 2609。 [http://www.ietf.org/rfc/rfc2609.txt]
使用此过程可以更改 SLP 配置文件中的属性设置。启用 SLP 的客户机或服务软件也可以使用 SLP API 来更改 SLP 配置。Internet 工程任务组 (Internet Engineering Task Force, IETF) 的 RFC 2614,"An API for Service Location"中介绍了此 API。 [http://www.ietf.org/rfc/rfc2614.txt]
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
根据需要在 /etc/inet/slp.conf 文件中编辑属性设置。
有关 SLP 属性设置的一般信息,请参阅配置属性。有关可能需要更改 slp.conf 属性的不同情况的示例,请参见此过程之后的各节。请参见 slp.conf(4)。
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
当您停止或启动 slpd 时,SLP 守护进程将从配置文件中获取信息。
在 slpd.conf 文件中将 net.slp.isDA 属性设置为 True,以通过更改 SA 服务器缺省值来将 slpd 用作 DA 服务器。
net.slp.isDA=True |
在每个区域中,不同属性可以控制配置的不同方面。以下各节介绍了可能需要更改 SLP 配置中所用的缺省属性设置的不同情况。
在下列情况下,可以修改用于控制 DA 通知和搜索请求的时间的属性。
当您希望 SA 或 UA 从 slp.conf 文件的 net.slp.DAAddresses 属性中静态获取 DA 配置信息时,可以禁用 DA 搜索。
当网络经常进行分区时,可以更改被动通知和主动搜索的频率。
如果 UA 和 SA 客户机在拨号连接的另一端访问 DA,则可降低 DA 心跳频率和主动搜索间隔,以减少激活拨号线的次数。
如果网络拥塞严重,则可限制多点传送。
本节中的过程说明如何修改以下属性。
表 9–2 DA 通知时间和搜索请求属性
属性 |
说明 |
---|---|
net.slp.passiveDADetection | |
net.slp.DAActiveDiscoveryInterval | |
net.slp.DAHeartBeat |
有时可能需要将 UA 和 SA 限制为从 slp.conf 文件的静态配置信息中获取 DA 地址。在下一个过程中,可以修改两个属性,以使 slpd 只从 net.slp.DAAddresses 属性中获取 DA 信息。
使用以下过程可以更改 net.slp.passiveDADetection 和 net.slp.DAActiveDiscoveryInterval 属性。
只能在执行 UA 和 SA(限制为静态配置)的主机上使用此过程。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slp.conf 文件中将 net.slp.passiveDADetection 属性设置为 False,以禁用被动搜索。此设置会使 slpd 忽略未经请求的 DA 通知。
net.slp.passiveDADetection=False |
将 net.slp.DAActiveDiscoveryInterval 属性设置为 -1,以禁用初始和定期的主动搜索。
net.slp.DAActiveDiscoveryInterval=-1 |
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
如果 UA 或 SA 通过拨号网络与 DA 分隔,则可配置 DA 搜索,以减少或消除搜索请求和 DA 通知的数量。激活拨号网络时,通常需要收费。最大程度地减少多余呼叫可以降低使用拨号网络的成本。
使用将 UA 和 SA 限制为静态配置的 DA中介绍的方法可以完全禁用 DA 搜索。
使用以下过程,可以通过增大 DA 心跳周期和主动搜索间隔来减少未经请求的 DA 通知和主动搜索。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slpd.conf 文件中增大 net.slp.DAHeartbeat 属性的值。
net.slp.DAHeartbeat=value |
一个 32 位整数,用于设置被动 DA 通知心跳的秒数
缺省值 = 10800 秒(3 小时)
值的范围 = 2000–259200000 秒
例如,在执行 DA 的主机上,可将 DA 心跳设置为大约 18 小时:
net.slp.DAHeartbeat=65535 |
在 slpd.conf 文件中增大 net.slp.DAActiveDiscoveryInterval 属性的值。
net.slp.DAActiveDiscoveryInterval value |
一个 32 位整数,用于设置 DA 主动搜索查询的秒数
缺省值 = 900 秒(15 分钟)
值的范围 = 300–10800 秒
例如,在执行 UA 和 SA 的主机上,可将 DA 主动搜索间隔设置为 18 小时:
net.slp.DAActiveDiscoveryInterval=65535 |
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
SA 需要向支持其范围的所有 DA 进行注册。在 slpd 执行主动搜索后,会出现 DA。如果 DA 支持 slpd 范围,则 SLP 守护进程会向 DA 注册其主机上的所有通知。
slpd 搜索 DA 的一种方法是使用 DA 在引导时发送的第一份未经请求的通知。SLP 守护进程使用此周期性的未经请求通知(心跳)来确定 DA 是否仍处于活动状态。如果心跳未能出现,则守护进程将删除它使用的 DA 以及它为其他 UA 提供的 DA。
最后,当 DA 遇到受控制的关机时,它将发送一份特殊的 DA 通知,通知侦听 SA 服务它将不在服务范围。SLP 守护进程还使用此通知从高速缓存中删除非活动 DA。
如果网络经常进行分区并且 SA 长期存在,则当未接收到心跳通知时,slpd 可在分区期间删除缓存的 DA。通过减少心跳时间,可以减少取消激活的 DA 在分区修复后恢复到高速缓存之前的延迟。
使用以下过程可以更改 net.slp.DAHeartBeat 属性,从而缩短 DA 心跳周期。
如果 DA 搜索已完全禁用,则必须在执行 UA 和 SA 的主机上的 slp.conf 中设置 net.slp.DAAddresses 属性,主机才能访问正确的 DA。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
将 net.slp.DAHeartBeat 值减小为 1 小时(3600 秒)。缺省情况下,DA 心跳周期设置为 3 小时(10800 秒)。
net.slp.DAHeartBeat=3600 |
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
如果网络拥塞很严重,则可限制多点传送活动量。如果网络中尚未部署 DA,则部署 DA 会显著减少与 SLP 相关的多点传送量。
但即使在部署 DA 之后,DA 搜索仍然需要多点传送。通过使用如何为拨号网络配置 DA 搜索中介绍的方法可以降低 DA 搜索所需的多点传送量。通过使用将 UA 和 SA 限制为静态配置的 DA中介绍的方法可以完全消除用于 DA 搜索的多点传送。
本节介绍可以通过更改以下属性来调节 SLP 性能的可能情况。
表 9–3 SLP 性能属性
属性 |
说明 |
---|---|
net.slp.DAAttributes |
DA 接受通知的最短刷新间隔。 |
net.slp.multicastTTL |
为多点传送包指定的生存时间值。 |
net.slp.MTU |
为网络包设置的字节大小。该大小包括 IP 以及 TCP 或 UDP 数据包头。 |
net.slp.isBroadcastOnly |
布尔值,设置该值以指示是否应将广播用于 DA 搜索和不基于 DA 的服务搜索。 |
SA 在生命周期到期之前,需要定期刷新其服务通知。如果 DA 需要处理来自许多 UA 和 SA 的大量负载,则频繁刷新会导致 DA 过载。如果 DA 过载,UA 请求将开始超时,然后将被删除。UA 请求超时可能有多种原因。在您断定 DA 过载是导致 UA 请求超时的原因之前,应先使用 snoop 跟踪来检查已进行服务注册的服务通知的生命周期。如果生命周期很短并且重新注册频繁发生,则超时很可能是由频繁重新注册引起的。
如果未设置 FRESH 标志,则注册服务时就会造成服务的重新注册。有关服务注册消息的更多信息,请参见第 11 章,SLP(参考)。
使用以下过程可以增大 SA 的最短刷新间隔,以减少重新注册。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
增大 net.slp.DAAttributes 属性的 min-refresh-interval 属性的值。
缺省的最短重新注册周期是零。缺省值零允许 SA 在任意时刻注册。在以下示例中,该间隔增大到 3600 秒(1 小时)。
net.slp.DAAttributes(min-refresh-interval=3600) |
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
多点传送生存时间属性 (net.slp.multicastTTL) 确定多点传送包在内联网中的传播范围。多点传送 TTL 是通过将 net.slp.multicastTTL 属性设置为 1 与 255 之间的整数来配置的。多点传送 TTL 的缺省值为 255,这表明从理论上讲,包路由不受限制。但是,TTL 为 255 时会使多点传送包穿透内联网,到达管理域边缘的边界路由器。需要在边界路由器上正确配置多点传送,才能防止多点传送包泄漏到 Internet 的多点传送主干网中,或泄露给您的 ISP。
多点传送 TTL 作用域设置与标准 IP TTL 相似,区别在于要进行 TTL 比较。对于启用了多点传送的路由器上的每个接口,都会为其指定一个 TTL 值。当多点传送包到达时,路由器会将该包的 TTL 与接口的 TTL 进行比较。如果包的 TTL 大于或等于接口的 TTL,包 TTL 将减小 1,这与标准 IP TTL 相同。如果 TTL 变为零,将放弃该包。将 TTL 作用域设置用于 SLP 多点传送时,必须对路由器进行正确配置,以将包限制到内联网的特定子段。
使用以下过程可以重置 net.slp.multicastTTL 属性。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slpd.conf 文件中更改 net.slp.multicastTTL 属性。
net.slp.multicastTTL=value |
小于或等于 255 的正整数,用于定义多点传送 TTL
通过减小 TTL 值可以缩小多点传送传播的范围。如果 TTL 值为 1,包将限制到子网。如果该值为 32,包将限制到该站点。不过,术语站点不是由 RFC 1075 定义的,RFC 1075 探讨了多点传送 TTL。大于 32 的值表示在 Internet 上的理论路由,不应使用。如果路由器正确配置了 TTL,则小于 32 的值可用来将多点传送限制到一组可访问的子网。
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
SLP 的缺省包大小为 1400 字节。对于大多数局域网而言,该大小应该足够。对于无线网络或广域网而言,可以减小包大小,以避免消息分段并减少网络通信流量。对于具有较大包的局域网而言,增大包大小可以改善性能。通过检查网络的最小包大小可以确定是否需要减小包大小。如果网络介质具有较小的包大小,则可相应减小 net.slp.MTU 的值。
如果网络介质具有较大的包,则可增大包大小。但是,除非来自 SA 的服务通知或来自 UA 的查询频繁使缺省包大小溢出,否则不应更改 net.slp.MTU 值。可以使用 snoop 来确定 UA 请求是否经常使缺省包大小溢出,并滚动使用 TCP 而非 UDP。
net.slp.MTU 属性会度量完整的 IP 包大小,包括链路层头、IP 数据包头、UDP 或 TCP 数据包头以及 SLP 消息。
使用以下过程通过调节 net.slp.MTU 属性来更改缺省包大小。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slpd.conf 文件中更改 net.slp.MTU 属性。
net.slp.MTU=value |
一个 16 位整数,用于指定网络包大小(以字节为单位)
缺省值 = 1400
值范围 = 128–8192
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
设计 SLP 的目的是使用多点传送来进行服务搜索(不存在 DA 时)和 DA 搜索。如果网络不部署多点传送路由,则可通过将 net.slp.isBroadcastOnly 属性设置为 True 来将 SLP 配置为使用广播。
与多点传送不同,广播包缺省情况下不在子网中传播。因此,在非多点传送网络中没有 DA 的服务搜索只适用于单个子网。此外,在使用广播的网络中部署 DA 和范围时,需要考虑特殊的注意事项。多宿主主机上的 DA 可在禁用多点传送的多个子网之间桥接服务搜索。有关在多宿主主机上部署 DA 的更多信息,请参见 DA 放置和范围名称指定。
使用以下过程可将 net.slp.isBroadcastOnly 属性更改为 True。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slpd.conf 文件中将 net.slp.isBroadcastOnly 属性更改为 True:
net.slp.isBroadcastOnly=True |
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
如果 SLP 代理被多个子网、拨号线路或其他 WAN 分隔,则网络延迟可能足够高,导致请求或注册无法在缺省超时时间内完成。相反,如果网络为低延迟,则可通过减小超时来改善性能。
如果网络通信流量很大或冲突率很高,则 SA 和 UA 在发送消息前需要等待的最长时间可能不足以确保事务无冲突。
高网络延迟可以导致 UA 和 SA 在请求和注册的响应返回之前超时。 如果多个子网、拨号线路或 WAN 将 UA 与 SA 分隔,或者同时将 UA 和 SA 与 DA 分隔,则延迟可能会导致产生问题。通过检查 SLP 请求是否因 UA 和 SA 请求和注册的超时而失败,可以确定延迟是否是问题所在。也可使用 ping 命令来度量实际延迟。
下表列出了用于控制超时的配置属性。可以使用本节中的过程来修改这些属性。
表 9–4 超时属性
属性 |
说明 |
---|---|
net.slp.multicastTimeouts net.slp.DADiscoveryTimeouts net.slp.datagramTimeouts |
这些属性可以控制在放弃传输之前用于重复的多点传送和单点传送 UDP 消息传输的超时。 |
net.slp.multicastMaximumWait |
该属性可以控制放弃多点传送消息之前传输该消息的最长时间。 |
net.slp.datagramTimeouts |
DA 超时的上限,由为此属性列出的值的总和来指定。会向 DA 重复发送 UDP 数据报,直到收到响应或达到超时界限为止。 |
如果在多点传送服务搜索或 DA 搜索期间频繁出现超时现象,可增大 net.slp.multicastMaximumWait 属性的值,其缺省值为 15000 毫秒(15 秒)。增大最长等待时间可以留出更多时间,以便完成高延迟网络中的请求。在更改 net.slp.multicastMaximumWait 之后,还应该修改 net.slp.multicastTimeouts 和 net.slp.DADiscoveryTimeouts。这些属性的超时值之和等于 net.slp.multicastMaximumWait 值。
使用以下过程可以更改用于控制超时的 SLP 属性。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slpd.conf 文件中更改 net.slp.multicastMaximumWait 属性。
net.slp.multicastMaximumWait=value |
32 位整数,它列出为 net.slp.multicastTimeouts 和 net.slp.DADiscoveryTimeouts 设置的值之和
缺省值 = 15000 毫秒(15 秒)
值范围 = 1000 至 60000 毫秒
例如,如果确定多点传送请求需要等待 20 秒(20000 毫秒),则需要调整为 net.slp.multicastTimeouts 和 net.slp.DADiscoveryTimeouts 属性列出的值,使两者之和等于 20000 毫秒。
net.slp.multicastMaximumWait=20000 net.slp.multicastTimeouts=2000,5000,6000,7000 net.slp.DADiscoveryTimeouts=3000,3000,6000,8000 |
如果需要,请在 slpd.conf 文件中更改 net.slp.datagramTimeouts 属性:
net.slp.datagramTimeouts=value |
32 位整数的列表,它以毫秒为单位指定将单点传送数据报传输实现到 DA 时的超时
缺省值 = 3000,3000,3000
例如,可将数据报超时增大到 20000 毫秒,以避免频繁超时。
net.slp.datagramTimeouts=2000,5000,6000,7000 |
在高性能网络中,可以减小多点传送和单点传送 UDP 数据报传输的超时界限。如果减小超时界限,则同时会减小满足 SLP 请求所需的延迟。
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
如果网络通信流量很大或冲突率很高,与 DA 的通信会受到影响。冲突率很高时,发送代理必须重新传送 UDP 数据报。通过使用 snoop 来监视作为 SA 服务器运行 slpd 的主机和作为 DA 运行 slpd 的主机网络中的流量,可以确定是否正在重新传输。在作为 SA 服务器运行 slpd 的主机的 snoop 跟踪中,如果出现同一服务的多个服务注册消息,则可能存在通知冲突。
在引导时,冲突特别容易引起问题。当 DA 最初启动时,它会发送未经请求的通知,并且 SA 以注册进行响应。SLP 要求 SA在接收 DA 通知后随机等待一段时间再进行响应。随机等待界限分布均匀,最大值由 net.slp.randomWaitBound 控制。缺省的随机等待界限为 1000 毫秒(1 秒)。
使用以下过程在 slp.conf 文件中更改 net.slp.RandomWaitBound 属性。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slpd.conf 文件中更改 net.slp.RandomWaitBound 属性:
net.slp.RandomWaitBound=value |
用于计算在尝试联系 DA 之前的随机等待时间的上限
缺省值 = 1000 毫秒(1 秒)
值范围 = 1000 至 3000 毫秒
例如,可将最长等待时间延长至 2000 毫秒(2 秒)。
net.slp.randomWaitBound=2000 |
延长随机等待界限时,注册中将出现更长的延迟。SA 可以用新搜索到的 DA 以更慢的速度完成注册,以避免冲突和超时。
如果需要,请在 slpd.conf 文件中更改 net.slp.datagramTimeouts 属性:
net.slp.datgramTimeouts=value |
32 位整数的列表,它以毫秒为单位指定将单点传送数据报传输实现到 DA 时的超时
缺省值 = 3000,3000,3000
例如,可将数据报超时增大到 20000 毫秒,以避免频繁超时。
net.slp.datagramTimeouts=2000,5000,6000,7000 |
在高性能网络中,可以减小多点传送和单点传送 UDP 数据报传输的超时界限。此设置可减小满足 SLP 请求时的延迟量。
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
借助范围可对依赖于用户的逻辑、物理和管理分组的服务进行调配。使用范围可对服务通知的访问进行管理。
使用 net.slp.useScopes 属性创建范围。例如,在主机上的 /etc/inet/slp.conf 文件中,添加一个名为 newscope 的新范围,如下所示:
net.slp.useScopes=newscope |
例如,您的组织可能在 6 号楼的 2 层的南厅一端有一个联网设备室,其中包括打印机和传真机等设备。2 层的所有人都可以使用这些设备,也可以将这些设备的使用限制为某个部门的成员。通过范围可对这些机器的服务通知的访问进行调配。
如果设备专供一个部门使用,则可用该部门的名称创建一个范围,例如 mktg。属于其他部门的设备可用不同的范围名称来配置。
在另一种情况下,部门可能是分散的。例如,机械工程部门和 CAD/CAM 部门可能分散在 1 层和 2 层。但是,可在 2 层为这两层的主机提供机器,方法是为其指定相同的范围。可以通过适用于网络和用户的其他任何方式来部署范围。
实际上,并不禁止具有特定范围的 UA 使用在其他范围内通知的服务。配置范围只控制 UA 检测哪些服务通知。该服务负责强制实施所有访问控制限制。
无需进行任何范围配置,SLP 便可正常工作。在 Solaris 操作环境中,SLP 的缺省范围是 default。如果没有配置任何范围,则 default 是所有 SLP 消息。
可在以下任何情况下配置范围。
您支持的组织要将服务通知访问限制为自己的成员。
您所支持的组织的物理布局表明,某一区域中的服务只能由特定用户访问。
适合特定用户查看的服务通知必须进行分区。
为拨号网络配置 DA 搜索中列举了第一种情况的示例。第二种情况的示例是,组织分布于两个大楼内,您希望大楼内的用户访问本大楼内的本地服务。可为 1 号楼内的用户配置 B1 范围,而为 2 号楼的用户配置 B2 范围。
当您在 slpd.conf 文件中修改 net.slp.useScopes 属性时,便会为主机上的所有代理配置范围。当主机正在运行任何 SA 或用作 DA 时,如果要将 SA 或 DA 配置到 default 之外的范围中,则必须配置此属性。如果只有 UA 在机器中运行,并且 UA 应搜索 default 之外的 SA 和 DA 支持范围,则除非要限制 UA 使用的范围,否则无需配置此属性。如果未配置该属性,UA 可以通过 slpd 自动搜索可用的 DA 和范围。SLP 守护进程使用主动和被动 DA 搜索来查找 DA,如果没有 DA 在运行,则使用 SA 搜索。另外,如果已配置上述属性,UA 将只使用已配置的范围,而不会将其废弃。
如果您决定要配置范围,则应考虑将 default 范围保留在已配置范围的列表中,除非确保网络中的所有 SA 都已配置范围。如果有任何 SA 未配置,则已配置范围的 UA 将无法找到这些 SA。出现这种情况的原因是,未配置的 SA 会自动以 default 为范围,而 UA 会使用已配置的范围。
如果您还决定通过设置 net.slp.DAAddresses 属性来配置 DA,请确保已配置的 DA 所支持的范围与您使用 net.slp.useScopes 属性配置的范围相同。如果这两个范围不同,slpd 将在重新启动时列显错误消息。
使用以下过程在 slp.conf 文件中为 net.slp.useScopes 属性添加范围名称。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slpd.conf 文件中更改 net.slp.useScopes 属性:
net.slp.useScopes=<scope names> |
字符串列表,表示 DA 或 SA 发出请求时允许其使用的范围或表示 DA 必须支持的范围
缺省值 = 缺省值(SA 和 DA)/未指定( UA )
使用以下各项来构造范围名称:
任何字母数字字符(大写或小写)
任何标点符号(''、\、!、<、=、> 和 ~ 除外)
被视为名称一部分的空格
非 ASCII 字符
使用反斜杠可对非 ASCII 字符进行转义。例如,UTF-8 编码使用 0xc3a9 十六进制代码来表示具有法语 aigue 重音的字母 e。如果平台不支持 UTF-8,则可使用 UTF-8 十六进制代码作为转义序列 \c3\a9。
例如,要为 bldg6 中的 eng 组和 mktg 组指定范围,请对 net.slp.useScopes 行进行如下更改。
net.slp.useScopes=eng,mktg,bldg6 |
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
本节介绍 DA 在运行 SLP 的网络中的战略部署。
只需具有基本代理(UA 和 SA),无需部署 DA 或配置范围,SLP 便可正常运行。缺少特定配置的所有代理都使用 default 范围。DA 用作服务通知的高速缓存。部署 DA 会减少在网络中发送的消息数,并可缩短接收消息响应所需的时间。此功能使 SLP 可以适应更大型的网络。
部署 DA 的主要原因是减小多点传送流量和缩短与收集单点传送应答有关的延迟。在具有许多 UA 和 SA 的大型网络中,服务搜索所涉及的多点传送流量可能会很大,从而导致网络性能下降。通过部署一个或多个 DA,UA 必须为服务向 DA 进行单点传送,并且 SA 必须使用单点传送向 DA 注册。网络中唯一向 DA 进行注册的 SLP 多点传送是用于主动和被动 DA 搜索的。
SA 会自动向其在一组通用范围内搜索到的任何 DA 进行注册,而不是接受多点传送服务请求。但是,在 DA 不支持的范围内的多点传送请求仍然直接由 SA 来应答。
在 UA 的范围内部署 DA 时,来自 UA 的服务请求将单点传送至 DA,而非多点传送至网络。因此,UA 范围中的 DA 将减少多点传送。通过减少用于正常 UA 请求的多点传送,可以大大减少获得查询应答所需的时间(从若干秒减少到若干毫秒)。
DA 用作 SA 和 UA 活动的焦点。为范围集合部署一个或多个 DA 可提供用于监视 SLP 活动的集中点。打开 DA 日志比从网络中分散的多个 SA 中检查日志更容易监视注册和请求。根据平衡载荷的需要,可以为特定的一个或多个范围部署任意数量的 DA。
在未启用多点传送的网络中,可以将 SLP 配置为使用广播。但广播的效率很低,因为它需要每台主机都处理消息。广播还无法在路由器间正常传播。因此,在没有多点传送路由支持的网络中,只能在同一子网中搜索服务。对多点传送路由的部分支持会导致在网络中搜索服务的能力不一致。多点传送消息用于搜索 DA。因此,对多点传送路由的不完全支持暗示了 UA 和 SA 向 SA 范围内的所有已知 DA 注册服务。例如,如果一个 UA 查询名为 DA1 的 DA,而 SA 已向 DA2 注册了服务,则 UA 将无法搜索服务。 有关如何在未启用多点传送的网络中部署 SLP 的更多信息,请参见配置仅限广播路由。
在站点范围内对多点传送路由的支持不一致的网络中,必须使用 net.slp.DAAdresseses 属性以一致的 DA 位置列表配置 SLP UA 和 SA。
最后,Solaris SLPv2 DA 支持与 SLPv1 的互操作性。缺省情况下,Solaris DA 中会启用 SLPv1 互操作性。如果您的网络包含打印机等 SLPv1 设备或者需要与 Novell Netware 5(它将 SLPv1 用于服务搜索) 进行互操作,则应部署 DA。如果没有 DA,Solaris SLP UA 将找不到 SLPv1 通知的服务。
如果以下任何条件成立,则请在您的企业中部署 DA:
按 snoop 的度量,多点传送 SLP 流量超过网络带宽的 1%。
UA 客户端在多点传送服务请求期间经历较长时间的延迟或超时。
您要集中监视一个或多个主机上的特定范围内的 SLP 服务通知。
您的网络未启用多点传送,并且由必须共享服务的多个子网构成。
网络所使用的设备支持 SLP (SLPv1) 的早期版本,或者您希望 SLP 服务搜索与 Novell Netware 5 进行交互操作。
使用以下过程在 slp.conf 文件中将 net.slp.isDA 属性设置为 True。
只能为每个主机指定一个 DA。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slpd.conf 文件中将 net.slp.isDA 属性设置为 True:
net.slp.isDA=True |
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
本节针对不同的情况对放置 DA 的位置提供了建议。
当未启用多点传送路由并且需要 DA 在子网之间桥接服务搜索时
在此情况下,必须在有多个接口并与共享服务的所有子网相连的主机上放置 DA。除非 IP 包不在这些接口间路由,否则无需设置 net.slp.interfaces 配置属性。有关配置 net.slp.interfaces 属性的更多信息,请参见用于 SLP 的多宿主配置。
当为改善可伸缩性而部署 DA 并且主要考虑的是优化代理访问时
UA 通常会向 DA 发出许多服务请求。一个 SA 向 DA 注册一次,并且以固定但不频繁的间隔刷新通知。因此,UA 对 DA 的访问要比 SA 访问频繁得多。而且,服务通知数通常小于请求数。因此,如果针对 UA 访问优化部署,大多数 DA 部署的效率都会提高。
设置 DA 使其拓扑结构与网络中的 UA 接近,从而优化 UA 访问
毫无疑问,必须用 UA 和 SA 客户机共享的范围来配置 DA。
作为一种负载平衡的方法,可为同一范围集合部署多个 DA。可在下列任一情况下部署 DA:
可以运行 SLP 流量的 snoop 跟踪,以确定多少 UA 请求返回 DA_BUSY_NOW 错误。如果返回的 UA 请求数很高,则在物理和拓扑结构上远离 DA 的建筑内的 UA 可能响应很慢,或者出现过多超时现象。在此情况下,可在每个建筑内都部署一个 DA,以改善对该建筑内的 UA 客户机的响应。
连接建筑的链接通常比建筑内的局域网慢。如果您的网络跨越多个建筑或物理站点,请在 /etc/inet/slp.conf 文件中将 net.slp.DAAddresses 属性设置为特定主机名或地址的列表,以使 UA 只访问您指定的 DA。
如果特定 DA 在服务注册中使用大量主机内存,则可通过减少 DA 支持的范围数来减少 SA 注册数。可将该范围分割为具有多个注册的两个范围。然后通过在另一主机上部署另一个 DA 来支持一个新范围。
多宿主服务器在多个 IP 子网中用作主机。该服务器有时可以有多个网络接口卡,并可用作路由器。包括多点传送包在内的 IP 包将在接口之间进行路由。在有些情况下,会禁用接口之间的路由。以下各节介绍如何为此类情况配置 SLP。
无需进行任何配置,slpd 便可侦听缺省网络接口上的多点传送和 UDP/TCP 单点传送。如果在多宿主机器的接口之间启用了单点传送和多点传送路由,则无需进行附加配置。这是因为到达另一接口的多点传送包已正确路由至缺省接口。因此,对 DA 或其他服务通知的多点传送请求将到达 slpd。如果由于某种原因未打开路由,则需要进行配置。
如果下面的任何一个条件存在,都可能需要配置多宿主机器。
在接口之间启用了单点传送路由,而禁用了多点传送路由。
在接口之间同时禁用了单点传送路由和多点传送路由。
接口之间的多点传送路由被禁用时,通常是因为网络中尚未部署多点传送。在此情况下,广播通常用于不基于 DA 的服务搜索和个别子网上的 DA 搜索。通过将 net.slp.isBroadcastOnly 属性设置为 True 来配置广播。
任务 |
说明 |
参考 |
---|---|---|
配置 net.slp.interfaces 属性 |
设置此属性,以使 slpd 侦听指定接口上的单点传送和多点传送/广播 SLP 请求。 | |
安排代理服务通知,以使子网上的 UA 获得具有可访问地址的服务 URL |
将代理通知限制到正在运行 slpd(它与单个子网而非多宿主主机连接)的机器。 | |
放置 DA 并配置范围,以确保 UA 和 SA 之间的可访问性 |
在具有一个接口主机名或地址的多宿主主机上配置 net.slp.interfaces 属性。 在多宿主主机上运行 DA 但配置范围,以使每个子网上的 SA 和 UA 使用不同的主机。 |
如果设置了 net.slp.interfaces 属性,slpd 将侦听该属性所列接口而非缺省接口上的单点传送和多点传送/广播 SLP 请求。
通常,设置 net.slp.interfaces 属性时同时会通过设置 net.slp.isBroadcastOnly 属性来启用广播,原因是网络中尚未部署多点传送。但是,如果已经部署多点传送,而多点传送未在此特定多宿主主机上路由,则多点传送请求可从多个接口到达 slpd。当包的路由由与子网(接口为这些子网提供服务)连接的另一台多宿主主机或路由器处理时,会出现此情况。
出现此类情况时,发送请求的 SA 服务器或 UA 将收到来自多宿主主机上的 slpd 的两个响应。然后,客户机库对响应进行过滤,客户机将看不到这些响应。但这些响应在 snoop 跟踪中可见。
如果关闭单点传送路由,则所有子网都无法访问多宿主主机上的 SA 客户机通知的服务。如果这些服务无法访问,SA 客户机可以执行以下操作:
对每个子网通知一个服务 URL。
确保用可访问的 URL 应答来自特定子网的请求。
SA 客户机库不执行任何操作来确保已对可访问的 URL 进行通知。服务计划(它可能处理也可能不处理多宿主主机)将负责确保已对可访问的 URL 进行通知。
在禁用单点传送路由的多宿主主机上部署服务时,请使用 snoop 来确定服务是否可以正确处理来自多个子网的请求。此外,如果计划在多宿主主机上部署 DA,请参见 DA 放置和范围名称指定。
使用以下过程在 slp.conf 文件中更改 net.slp.interfaces 属性。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 slpd.conf 文件中更改 net.slp.interfaces 属性:
net.slp.interfaces=value |
网络接口卡的 IPv4 地址或主机名的列表,DA 或 SA 应在该网络接口卡上侦听端口 427 上的多点传送、单点传送 UDP 和 TCP 消息
例如,具有三个网络接口卡和已关闭的多点传送路由的服务器将连接至三个子网。这三个网络接口的 IP 地址为 192.147.142.42、192.147.143.42 和 192.147.144.42。子网掩码为 255.255.255.0。以下属性设置将使 slpd 侦听所有三个接口上的单点传送和多点传送/广播消息:
net.slp.interfaces=192.147.142.42,192.147.143.42,192.147.144.42 |
可为 net.slp.interfaces 属性指定 IP 地址或可解析的主机名。
保存更改并关闭文件。
重新启动 slpd 以激活更改。
# svcadm enable network/slp |
如果具有多个接口的主机通过使用 slpd 和代理注册来通知服务,slpd 通知的服务 URL 必须包含可访问的主机名或地址。如果在接口之间启用单点传送路由,则所有子网上的主机都可以访问其他子网上的主机。还可以对任何子网上的服务进行代理注册。但是,如果已禁用单点传送路由,则一个子网上的服务客户机将无法通过多宿主主机来访问另一子网上的服务。但这些客户机可能可以通过另一路由器来访问服务。
例如,假设缺省主机名为 bigguy 的主机在三个不同的非路由子网中有三个接口卡。在这些子网中主机名分别为 bigguy(IP 地址为 192.147.142.42)、bigguy1(IP 地址为 192.147.143.42)和 bigguy2(IP 地址为 192.147.144.42)。现在,假设传统打印机 oldprinter 连接至 143 子网,并且用 net.slp.interfaces 将 URL service:printing:lpr://oldprinter/queue1 配置为侦听所有接口。oldprinter URL 在所有接口上都通知代理。142 和 144 子网中的机器将接收 URL 以响应服务请求,但无法访问 oldprinter 服务。
对此问题的解决方案是用只与 143 子网连接的机器(而非多宿主主机)上运行的 slpd 来执行代理通知。只有 143 子网上的主机可以获得通知,以作为对服务请求的响应。
为了确保客户机获得可访问的服务,在具有多宿主主机的网络中进行 DA 放置和范围名称指定时必须格外谨慎。当已禁用路由并且已配置 net.slp.interfaces 属性时,要特别注意。此外,如果在多宿主机器的接口之间启用单点传送路由,则不需要进行任何特殊 DA 和范围配置。将以从任何子网中都可访问的 DA 标识服务对通知进行高速缓存。但是,如果已禁用单点传送路由,则不合适的 DA 放置将产生问题。
要确定是什么问题导致上一个示例,请考虑 bigguy 运行 DA 并且所有子网中的客户机都具有相同范围时可能出现的情况。143 子网中的 SA 将向 DA 注册其服务通知。即使 143 子网中的主机无法访问,144 子网上的 UA 也可以获得这些服务通知。
对此问题的一个解决方案是在每个子网而非多宿主主机上运行 DA。在此情况下,多宿主主机上的 net.slp.interfaces 属性应配置一个接口主机名或地址,或者应将其保留为不配置,从而强制使用缺省接口。此解决方案的一个缺点是,多宿主主机通常是可以更好处理 DA 的计算负载的大型机器。
另一个解决方案是在多宿主主机上运行 DA 但配置范围,以使每个子网上的 SA 和 UA 具有不同范围。例如,在前面的情况下,142 子网上的 UA 和 SA 可能具有一个名为 scope142 的范围。143 子网上的 UA 和 SA 可能具有名为 scope143 的另一个范围,而 144 子网上的 UA 和 SA 可能具有名为 scope144 的第三个范围。可在具有三个接口的 bigguy 中配置 net.slp.interfaces 属性,以使 DA 对这三个子网中的三个范围提供服务。
配置 net.slp.interfaces 属性可使多宿主主机上的 DA 在子网之间桥接服务通知。如果网络中关闭了多宿主路由但在多宿主主机的接口之间启用了单点传送路由,此类配置将很有用。 由于单点传送在接口之间进行路由,因此服务所在子网之外的子网中的主机可在收到服务 URL 时联系服务。没有 DA 时,特定子网上的 SA 服务器只能接收同一子网上的广播,因此,它们无法找到其子网之外的服务。
当网络中未部署多点传送而改用广播时,会出现必须配置 net.slp.interfaces 属性的常见情况。在其他情况下,需要慎重地考虑和规划,以避免不必要的重复响应或无法访问的服务。
传统服务是早于 SLP 的开发和实现的网络服务。行式打印机守护进程 (lpsched)、NFS 文件服务和 NIS/NIS+ 名称服务等 Solaris 服务不包含用于 SLP 的内部 SA。本章介绍通知传统服务的时间和方式。
通过传统服务通知,可使 SLP UA 在网络中查找如下所示的设备和服务。可以查找不包含 SLP SA 的硬件设备和软件服务。例如,当具有 SLP UA 的应用程序需要查找不包含 SLP SA 的打印机或数据库时,可能需要使用传统通知。
可以使用以下任一方法来通知传统服务。
如果软件服务器的源代码可用,则可引入 SLP SA。用于 SLP 的 C 和 Java API 使用起来相对简单。有关 C API 的信息和有关 Java API 的文档,请参见手册页。如果服务是硬件设备,则制造商可能会有可引入 SLP 的更新 PROM。有关更多信息,请与设备制造商联系。
如果没有源代码或包含 SLP 的更新的 PROM,则可编写一个使用 SLP 客户机库通知服务的小型应用程序。此应用程序可用作小型守护进程,可在用来启动和停止服务的同一 Shell 脚本中启动或停止。
Solaris slpd 支持用代理注册文件通知的传统服务。代理注册文件是可移植格式的服务通知的列表。
在主机文件系统或可通过 HTTP 访问的任何网络目录中创建代理注册文件。
确定是否存在用于该服务的服务类型模板。
模板是对服务 URL 和服务类型的属性的说明。模板用于为特定服务类型定义通知的组成部分:
如果存在服务类型模板,请使用该模板来构造代理注册。有关服务类型模板的更多信息,请参见 RFC 2609。
如果没有该服务的服务类型模板,请选择可以准确描述该服务的属性集合。请对通知使用命名授权而非缺省设置。缺省的命名授权只允许用于已标准化的服务类型。有关命名授权的更多信息,请参见 RFC 2609。
例如,假设一个名为 BizApp 的公司有一个用于跟踪软件缺陷的本地数据库。为通知该数据库,该公司可能使用服务类型为 service:bugdb.bizapp 的 URL。命名授权将为 bizapp。
执行以下步骤,以配置 /etc/inet/slp.conf 文件(此文件位于前面步骤创建的注册文件的位置)中的 net.slp.serializedRegURL 属性。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
停止 slpd 和主机上的所有 SLP 活动。
# svcadm disable network/slp |
在 /etc/inet/slp.conf 文件的 net.slp.serializedRegURL 属性中指定代理注册文件的位置。
net.slp.net.slp.serializedRegURL=proxy registration file URL |
例如,如果串行化的注册文件是 /net/inet/slp.reg,则可按如下所示来配置属性:
net.slp.serializedRegURL=file:/etc/inet/slp.reg |
保存更改并关闭文件。
# svcadm enable network/slp |
服务通知由标识服务 URL、可选范围和一系列属性定义的行构成。SLP 守护进程将完全按照与 SA 客户机相同的方式来读取、注册和维护代理通知。下面是来自代理注册文件的通知的示例。
在此示例中,通知了支持 LPR 协议和 FTP 服务器的传统打印机。为了便于说明,添加了行号,但它们不是文件的构成部分。
(1) #Advertise legacy printer. (2) (3) service:lpr://bizserver/mainspool,en,65535 (4) scope=eng,corp (5) make-model=Laserwriter II (6) location-description=B16-2345 (7) color-supported=monochromatic (8) fonts-supported=Courier,Times,Helvetica 9 10 (9) (10) #Advertise FTP server (11) (12) ftp://archive/usr/src/public,en,65535,src-server (13) content=Source code for projects (14) |
对于转义非 ASCII 字符,代理注册文件与配置文件支持相同的约定。有关代理注册文件格式的更多信息,请参见 RFC 2614。
通常,修改源代码来添加 SLP 的方法,优于编写启用 SLP 的服务(该服务使用 SLP API 代表其他服务进行通知)。修改源代码的方法也优于使用代理注册的方法。修改源代码时,可以添加特定于服务的功能并密切跟踪服务的可用性。如果源代码不可用,则编写代表其他服务进行通知的启用 SLP 的帮助器服务的方法,优于使用代理注册的方法。此帮助器服务最好集成到用于控制激活和取消激活服务启动/停止过程中。当没有源代码可用并且编写单独的 SA 不可行时,代理通知通常是第三种选择。
仅当运行 slpd 以读取代理注册文件时,才能维护代理通知。代理通知与服务之间没有直接的联系。如果通知超时或 slpd 停止,代理通知将不再可用。
如果服务关闭,则必须停止 slpd。该序列化注册文件被编辑,以注释掉或删除代理通知,然后 slpd 重新启动。重新启动或重新安装服务时,必须遵循相同的过程。代理通知与服务之间缺少联系是代理通知的主要缺点。
本章介绍 SLP 状态代码和消息类型。列出了 SLP 消息类型及其缩写和功能代码。还介绍了 SLP 状态代码及其说明和功能代码,功能代码用来表示已接收请求(代码 0)或接收器繁忙。
SLP 守护进程 (slpd) 只为单点传送消息返回状态代码。
状态类型 |
状态代码 |
说明 |
---|---|---|
No Error |
0 |
已处理请求,未出现错误。 |
LANGUAGE_NOT_SUPPORTED |
1 |
对于 AttrRqst 或 SrvRqst,在范围内有该服务类型的数据,但使用的不是指定的语言。 |
PARSE_ERROR |
2 |
消息未遵循 SLP 语法。 |
INVALID_REGISTRATION |
3 |
SrvReg 存在问题。例如,生命周期为零或省略了语言标记。 |
SCOPE_NOT_SUPPORTED |
4 |
SLP 消息的范围列表中不包括应答请求的 SA 或 DA 所支持的范围。 |
AUTHENTICATION_UNKNOWN |
5 |
DA 或 SA 接收到来自不受支持的 SLP SPI 的请求。 |
AUTHENTICATION_ABSENT |
6 |
UA 或 DA 期望在 SrvReg 中出现 URL 和属性验证但未收到。 |
AUTHENTICATION_FAILED |
7 |
UA 或 DA 在验证块中检测到验证错误。 |
VER_NOT_SUPPORTED |
9 |
消息中的版本号不受支持。 |
INTERNAL_ERROR |
10 |
DA 或 SA 中出现未知错误。例如,操作系统没有剩余的文件空间。 |
DA_BUSY_NOW |
11 |
UA 或 SA 应使用指数补偿进行重试。 DA 正忙于处理其他消息。 |
OPTION_NOT_UNDERSTOOD |
12 |
DA 或 SA 收到来自强制范围的未知选项。 |
INVALID_UPDATE |
13 |
对于未注册的服务或具有不一致服务类型的服务,DA 收到未设置 FRESH 的 SrvReg。 |
MSG_NOT_SUPPORTED |
14 |
SA 收到 AttrRqst 或 SrvTypeRqst,但不支持它。 |
REFRESH_REJECTED |
15 |
SA 以比 DA 的最短刷新间隔更频繁的频率向 DA 发送 SrvReg 或部分 SrvDereg。 |
消息类型 |
缩写 |
功能代码 |
说明 |
---|---|---|---|
服务请求 |
SrvRqst |
1 |
由 UA 发出,用于查找服务;或由 UA 或 SA 服务器在主动 DA 搜索期间发出。 |
服务应答 |
SrvRply |
2 |
DA 或 SA 对服务请求的响应。 |
服务注册 |
SrvReg |
3 |
允许 SA 注册新通知,利用新增和更改的属性更新现有通知,以及刷新 URL 生命周期。 |
服务注销 |
SrvDereg |
4 |
当通知表示的服务不再可用时,由 SA 用来注销其通知。 |
确认 |
SrvAck |
5 |
DA 对 SA 的服务请求或服务注销消息的响应 |
属性请求 |
AttrRqst |
6 |
由 URL 或服务类型发出,用以请求属性列表。 |
属性应答 |
AttrRply |
7 |
用于返回属性列表。 |
DA 通知 |
DAAdvert |
8 |
DA 对多点传送服务请求的响应。 |
服务类型请求 |
SrvTypeRqst |
9 |
用来查询具有特定的命名授权并且处于特定范围集合中的已注册服务类型。 |
服务类型应答 |
SrvTypeRply |
10 |
作为对服务类型请求的响应返回的消息。 |
SA 通知 |
SAAdvert |
11 |
UA 使用 SAAdvert 在未部署 DA 的网络中搜索 SA 及其范围。 |