系统管理指南:网络服务

第 3 部分 SLP 主题

本节提供用于服务定位协议 (Service Location Protocol, SLP) 服务的概述、规划、任务和参考信息。

第 7 章 SLP(概述)

服务定位协议 (Service Location Protocol, SLP) 为已启用 SLP 的网络服务的搜索和调配提供了与平台无关的便捷框架。本章介绍用于 IP 内联网的 SLP 体系结构和 SLP 的 Solaris 实现。

SLP 体系结构

本节概括了 SLP 的基本操作,并介绍了 SLP 管理中所用的代理和进程。

只需进行少量配置或无需进行任何配置,SLP 便可自动提供下面的所有服务。

此外,还可以根据需要执行以下操作,以管理和调整 SLP 操作。

SLP 设计摘要

SLP 库向网络识别的代理告知通知服务,以便在网络中搜索这些服务。SLP 代理负责维护有关服务类型和位置的最新信息。这些代理也可以使用代理注册来通知未直接启用 SLP 的服务。有关更多信息,请参见第 10 章,引入传统服务

客户机应用程序依赖于 SLP 库,该库可直接向通知服务的代理发出请求。

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(参考)

图 7–1 SLP 基本代理和进程

文中对该图形进行了说明。

下图显示在框架中部署 DA 时用于实现 SLP 体系结构的基本代理和进程。

图 7–2 用 DA 实现的 SLP 体系结构代理和进程

文中对该图形进行了说明。

部署 DA 时,网络中发送的消息较少,因此 UA 可以更快速地检索信息。当网络规模增大或者不支持多点传送路由时,DA 是基本要素。DA 用作已注册的服务通知的高速缓存。SA 发送注册消息 (SrvReg),其中列出它们向 DA 通知的所有服务。然后,SA 将在应答中收到确认 (SrvAck)。服务通知将由 DA 刷新,或到期(根据为通知设置的生命周期)。UA 搜索到 DA 后,会向 DA 单点传送请求,而不向 SA 多点传送请求。

有关 Solaris SLP 消息的更多信息,请参阅第 11 章,SLP(参考)

SLP 实现

在 Solaris SLP 实现中,表 7–1 中的 SLP SA、UA、DA、SA 服务器、范围和其他体系结构组件将部分映射到 slpd 中,部分映射到应用程序进程中。SLP 守护进程 slpd 会组织一些脱离主机的 SLP 交互,以执行以下操作:

可以通过设置 net.slpisDA 属性,将 slpd 也配置为用作 DA。请参见第 9 章,管理 SLP(任务)

有关 SLP 守护进程的更多信息,请参见 slpd(1M)

除了 slpd 之外,通过 C/C++ 和 Java 客户机库(libslp.soslp.jar)也可访问 UA 和 SA 客户机的 SLP 框架。客户机库可提供以下功能:

要在 slpd 与提供上述服务的客户机库之间启用进程内通信,不必进行任何特殊设置。但是,必须在装入客户机库之前先运行 slpd 进程,该库才能正常运行。

在下图中,服务提供商计划中的 SLP 客户机库使用 SA 功能。服务提供商计划使用 SLP 客户机库来向 slpd 注册和注销服务。服务客户机计划中的 SLP 客户机库使用 UA 功能。该服务客户机计划使用 SLP 客户机库来发出请求。SLP 客户机库或者向 SA 多点传送请求,或向 DA 单点传送请求。此通信对应用程序是透明的,但以单点传送方式发送请求时速度更快。设置不同的 SLP 配置属性会对客户机库的行为产生影响。有关详细信息,请参见第 9 章,管理 SLP(任务)slpd 进程可以处理所有 SA 功能,例如应答多点传送请求和向 DA 注册。

图 7–3 SLP 实现

文中对该图形进行了说明。

其他 SLP 信息源

请参阅以下文档,了解有关 SLP 的详细信息:

第 8 章 规划和启用 SLP(任务)

本章介绍有关规划和启用 SLP 的信息。以下各节讨论了 SLP 配置和启用 SLP 的过程。

SLP 配置注意事项

SLP 守护进程已预先配置为使用缺省属性。如果您的企业使用缺省设置可以正常运行,则 SLP 部署实际上不需要进行任何管理。

但在某些情况下,可能要修改 SLP 属性,以调整网络运行或激活某些功能。例如,通过一些配置更改可以启用 SLP 日志。SLP 日志和 snoop 跟踪中的信息有助于确定是否需要进行其他配置。

SLP 配置属性驻留在 slp.conf 文件中,该文件位于 /etc/inet 目录中。如果决定更改缺省属性设置,请参阅第 9 章,管理 SLP(任务)中的相应过程。

在修改 SLP 配置设置之前,请考虑以下与网络管理的关键方面有关的问题:

确定需要重新配置的内容

可以使用启用 SLP 的 snoop 实用程序和 SLP 日志实用程序,确定是否需要重新配置以及需要修改的属性。例如,您可能需要通过重新配置某些属性来执行以下操作:

使用 snoop 监视 SLP 活动

snoop 实用程序是一种用于提供网络通信流量信息的被动管理工具。此实用程序自身只生成最小流量,并可使您在活动发生时监视网络中的所有活动。

snoop 实用程序可提供对实际 SLP 消息流量的跟踪。例如,在运行带有 slp 命令行参数的 snoop 时,该实用程序将在跟踪中显示有关 SLP 注册和注销的信息。通过检查哪些服务正在注册以及正在发生的重新注册活动量,可以使用此信息测量网络负载。

snoop 实用程序对于观察企业中 SLP 主机之间的通信流量也很有用。运行带有 slp 命令行参数的 snoop 时,可以监视以下类型的 SLP 活动,以确定是否需要重新配置网络或代理:

使用 snoop-V(详细)命令行参数,可以获得注册生命周期和 SrvReg 中的刷新标志值,以确定是否应减少重新注册数量。

还可以使用 snoop 来跟踪其他种类的 SLP 通信流量,例如:

有关 snoop 的更多信息,请参阅 snoop(1M)


提示 –

结合使用 netstat 命令和 snoop,以查看流量和拥塞统计信息。有关 netstat 的更多信息,请参阅 netstat(1M)


Procedure如何使用 snoop 来运行 SLP 跟踪

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 运行带有 slp 命令行参数的 snoop


    Brief Mode:
    
    # snoop slp
    

    在缺省的简短模式下运行 snoop 时,屏幕中会显示正在运行的输出。SLP 消息会被截断,以便每个 SLP 跟踪的消息占一行。


    Verbose Mode:
    
    # snoop -v slp
    

    冗余模式下运行 snoop 时,snoop 会在屏幕中显示正在运行的、未缩写的输出,该输出将提供以下信息:

    • 服务 URL 的完整地址

    • 所有服务属性

    • 注册生命周期

    • 所有安全参数和标志(如果可用)


    注 –

    可将 slp 命令行参数用于其他 snoop 选项。


分析 snoop slp 跟踪

在以下示例中,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
  1. 显示 slphost1 上的 slpd,该守护进程通过向 SLP 多点传送组地址进行多点传送,执行活动目录代理搜索来搜索目录代理。 在跟踪显示中,用于主动搜索的消息编号 24487 在方括号中表示。

  2. 表示来自跟踪 1 的主动搜索请求 24487 由 slpd 应答,该守护进程作为 DA 在主机 slphost2 上运行。 slphost2 中的服务 URL 已被截断,以便显示在一行中。DA 已发送 DA 通知作为对多点传送目录代理搜索消息的应答,如跟踪 1 和 2 中匹配的消息编号所示。

  3. 显示 slphost1 中的 UA 对于其他 DA 的多点传送。 由于 slphost2 已对请求做出应答,因此它将禁止再次响应,不会进行其他的 DA 应答。

  4. 重复上一行中显示的多点传送操作。

  5. 在向 slphost2 中的 DA转发 SA 客户机注册的 slphost1 上显示 slpdslphost1slphost2 上的 DA 进行回显服务器的单点传送服务注册 (SrvReg)。

  6. 显示 slphost2slphost1 SrvReg 的响应,该响应带有指示注册已成功的服务确认 (SrvAck)。

    snoop 跟踪中不显示运行 SA 客户机的回显服务器与 slphost1 上的 SLP 守护进程之间的流量。缺少此信息的原因是 snoop 操作通过网络回送执行。

  7. 在注销回显服务通知的 slphost1 上显示回显服务器。slphost1 中的 SLP 守护进程会将注销转发给 slphost2 上的 DA。

  8. 显示 slphost2slphost1 的响应,该响应带有指示取消注册成功的服务确认 (SrvAck)。

    第 5、6、7 和 8 行的消息编号后附加的 /tcp 参数指示通过 TCP 进行了消息交换。

下一步执行的操作

监视 SLP 通信流量后,可以使用从 snoop 跟踪中收集的信息来确定是否需要对 SLP 缺省值进行任何重新配置。使用第 9 章,管理 SLP(任务)中的相关信息来配置 SLP 属性设置。有关 SLP 消息和服务注册的更多信息,请参阅第 11 章,SLP(参考)

第 9 章 管理 SLP(任务)

以下各节介绍用于配置 SLP 代理和进程的信息和任务。

配置 SLP 属性

SLP 配置属性控制网络交互、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 配置文件:基本元素

每次重新启动 SLP 守护进程时,/etc/inet/slp.conf 文件都会定义并激活所有 SLP 活动。该配置文件由以下元素组成:

配置属性

所有基本 SLP 属性(如 net.slp.isDAnet.slp.DAHeartBeat)都按以下格式命名。


net.slp.<keyword>

SLP 行为由 slp.conf 文件中的一个属性或一组属性的值来定义。在 SLP 配置文件中,属性的结构类似于关键字-值对。如以下示例所示,关键字-值对由属性名称和相关设置组成。


<property name>=<value>

每个属性的关键字都是指属性名称。值可为属性设置数值(距离或时间)、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]


Procedure如何更改 SLP 配置

使用此过程可以更改 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]

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. 根据需要在 /etc/inet/slp.conf 文件中编辑属性设置。

    有关 SLP 属性设置的一般信息,请参阅配置属性。有关可能需要更改 slp.conf 属性的不同情况的示例,请参见此过程之后的各节。请参见 slp.conf(4)

  5. 保存更改并关闭文件。

  6. 重新启动 slpd 以激活更改。


    # svcadm enable network/slp
    

    注 –

    当您停止或启动 slpd 时,SLP 守护进程将从配置文件中获取信息。



示例 9–1 设置 slpd 以将其用作 DA 服务器

slpd.conf 文件中将 net.slp.isDA 属性设置为 True,以通过更改 SA 服务器缺省值来将 slpd 用作 DA 服务器。


net.slp.isDA=True

在每个区域中,不同属性可以控制配置的不同方面。以下各节介绍了可能需要更改 SLP 配置中所用的缺省属性设置的不同情况。


修改 DA 通知和搜索频率

在下列情况下,可以修改用于控制 DA 通知和搜索请求的时间的属性。

本节中的过程说明如何修改以下属性。

表 9–2 DA 通知时间和搜索请求属性

属性 

说明 

net.slp.passiveDADetection

布尔值,它指定 slpd 是否侦听未经请求的 DA 通知

net.slp.DAActiveDiscoveryInterval

一个值,它指定 slpd 对新 DA 执行主动搜索的频率

net.slp.DAHeartBeat

一个值,它指定 DA 多点传送未经请求的 DA 通知的频率

将 UA 和 SA 限制为静态配置的 DA

有时可能需要将 UA 和 SA 限制为从 slp.conf 文件的静态配置信息中获取 DA 地址。在下一个过程中,可以修改两个属性,以使 slpd 只从 net.slp.DAAddresses 属性中获取 DA 信息。

Procedure如何将 UA 和 SA 限制为静态配置的 DA

使用以下过程可以更改 net.slp.passiveDADetectionnet.slp.DAActiveDiscoveryInterval 属性。


注 –

只能在执行 UA 和 SA(限制为静态配置)的主机上使用此过程。


  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slp.conf 文件中将 net.slp.passiveDADetection 属性设置为 False,以禁用被动搜索。此设置会使 slpd 忽略未经请求的 DA 通知。


    net.slp.passiveDADetection=False
  5. net.slp.DAActiveDiscoveryInterval 属性设置为 -1,以禁用初始和定期的主动搜索。


    net.slp.DAActiveDiscoveryInterval=-1
  6. 保存更改并关闭文件。

  7. 重新启动 slpd 以激活更改。


    # svcadm enable network/slp
    

为拨号网络配置 DA 搜索

如果 UA 或 SA 通过拨号网络与 DA 分隔,则可配置 DA 搜索,以减少或消除搜索请求和 DA 通知的数量。激活拨号网络时,通常需要收费。最大程度地减少多余呼叫可以降低使用拨号网络的成本。


注 –

使用将 UA 和 SA 限制为静态配置的 DA中介绍的方法可以完全禁用 DA 搜索。


Procedure如何为拨号网络配置 DA 搜索

使用以下过程,可以通过增大 DA 心跳周期和主动搜索间隔来减少未经请求的 DA 通知和主动搜索。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slpd.conf 文件中增大 net.slp.DAHeartbeat 属性的值。


    net.slp.DAHeartbeat=value
    
    value

    一个 32 位整数,用于设置被动 DA 通知心跳的秒数

    缺省值 = 10800 秒(3 小时)

    值的范围 = 2000–259200000 秒

    例如,在执行 DA 的主机上,可将 DA 心跳设置为大约 18 小时:


    net.slp.DAHeartbeat=65535
  5. slpd.conf 文件中增大 net.slp.DAActiveDiscoveryInterval 属性的值。


    net.slp.DAActiveDiscoveryInterval value
    
    value

    一个 32 位整数,用于设置 DA 主动搜索查询的秒数

    缺省值 = 900 秒(15 分钟)

    值的范围 = 300–10800 秒

    例如,在执行 UA 和 SA 的主机上,可将 DA 主动搜索间隔设置为 18 小时:


    net.slp.DAActiveDiscoveryInterval=65535
  6. 保存更改并关闭文件。

  7. 重新启动 slpd 以激活更改。


    # svcadm enable network/slp
    

为常用分区配置 DA 心跳

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 在分区修复后恢复到高速缓存之前的延迟。

Procedure如何为常用分区配置 DA 心跳

使用以下过程可以更改 net.slp.DAHeartBeat 属性,从而缩短 DA 心跳周期。


注 –

如果 DA 搜索已完全禁用,则必须在执行 UA 和 SA 的主机上的 slp.conf 中设置 net.slp.DAAddresses 属性,主机才能访问正确的 DA。


  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. net.slp.DAHeartBeat 值减小为 1 小时(3600 秒)。缺省情况下,DA 心跳周期设置为 3 小时(10800 秒)。


    net.slp.DAHeartBeat=3600
  5. 保存更改并关闭文件。

  6. 重新启动 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 重新注册

SA 在生命周期到期之前,需要定期刷新其服务通知。如果 DA 需要处理来自许多 UA 和 SA 的大量负载,则频繁刷新会导致 DA 过载。如果 DA 过载,UA 请求将开始超时,然后将被删除。UA 请求超时可能有多种原因。在您断定 DA 过载是导致 UA 请求超时的原因之前,应先使用 snoop 跟踪来检查已进行服务注册的服务通知的生命周期。如果生命周期很短并且重新注册频繁发生,则超时很可能是由频繁重新注册引起的。


注 –

如果未设置 FRESH 标志,则注册服务时就会造成服务的重新注册。有关服务注册消息的更多信息,请参见第 11 章,SLP(参考)


Procedure如何减少 SA 重新注册

使用以下过程可以增大 SA 的最短刷新间隔,以减少重新注册。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. 增大 net.slp.DAAttributes 属性的 min-refresh-interval 属性的值。

    缺省的最短重新注册周期是零。缺省值零允许 SA 在任意时刻注册。在以下示例中,该间隔增大到 3600 秒(1 小时)。


    net.slp.DAAttributes(min-refresh-interval=3600)
  5. 保存更改并关闭文件。

  6. 重新启动 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 多点传送时,必须对路由器进行正确配置,以将包限制到内联网的特定子段。

Procedure如何配置多点传送生存时间属性

使用以下过程可以重置 net.slp.multicastTTL 属性。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slpd.conf 文件中更改 net.slp.multicastTTL 属性。


    net.slp.multicastTTL=value
    
    value

    小于或等于 255 的正整数,用于定义多点传送 TTL


    注 –

    通过减小 TTL 值可以缩小多点传送传播的范围。如果 TTL 值为 1,包将限制到子网。如果该值为 32,包将限制到该站点。不过,术语站点不是由 RFC 1075 定义的,RFC 1075 探讨了多点传送 TTL。大于 32 的值表示在 Internet 上的理论路由,不应使用。如果路由器正确配置了 TTL,则小于 32 的值可用来将多点传送限制到一组可访问的子网。


  5. 保存更改并关闭文件。

  6. 重新启动 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 消息。

Procedure如何配置包大小

使用以下过程通过调节 net.slp.MTU 属性来更改缺省包大小。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slpd.conf 文件中更改 net.slp.MTU 属性。


    net.slp.MTU=value
    
    value

    一个 16 位整数,用于指定网络包大小(以字节为单位)

    缺省值 = 1400

    值范围 = 128–8192

  5. 保存更改并关闭文件。

  6. 重新启动 slpd 以激活更改。


    # svcadm enable network/slp
    

配置仅限广播路由

设计 SLP 的目的是使用多点传送来进行服务搜索(不存在 DA 时)和 DA 搜索。如果网络不部署多点传送路由,则可通过将 net.slp.isBroadcastOnly 属性设置为 True 来将 SLP 配置为使用广播。

与多点传送不同,广播包缺省情况下不在子网中传播。因此,在非多点传送网络中没有 DA 的服务搜索只适用于单个子网。此外,在使用广播的网络中部署 DA 和范围时,需要考虑特殊的注意事项。多宿主主机上的 DA 可在禁用多点传送的多个子网之间桥接服务搜索。有关在多宿主主机上部署 DA 的更多信息,请参见 DA 放置和范围名称指定

Procedure如何配置仅限广播路由

使用以下过程可将 net.slp.isBroadcastOnly 属性更改为 True

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slpd.conf 文件中将 net.slp.isBroadcastOnly 属性更改为 True


    net.slp.isBroadcastOnly=True
  5. 保存更改并关闭文件。

  6. 重新启动 slpd 以激活更改。


    # svcadm enable network/slp
    

修改 SLP 搜索请求的超时

在以下两种情况下,可能需要更改 SLP 搜索请求的超时:

更改缺省超时

高网络延迟可以导致 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.multicastTimeoutsnet.slp.DADiscoveryTimeouts。这些属性的超时值之和等于 net.slp.multicastMaximumWait 值。

Procedure如何更改缺省超时

使用以下过程可以更改用于控制超时的 SLP 属性。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slpd.conf 文件中更改 net.slp.multicastMaximumWait 属性。


    net.slp.multicastMaximumWait=value
    
    value

    32 位整数,它列出为 net.slp.multicastTimeoutsnet.slp.DADiscoveryTimeouts 设置的值之和

    缺省值 = 15000 毫秒(15 秒)

    值范围 = 1000 至 60000 毫秒

    例如,如果确定多点传送请求需要等待 20 秒(20000 毫秒),则需要调整为 net.slp.multicastTimeoutsnet.slp.DADiscoveryTimeouts 属性列出的值,使两者之和等于 20000 毫秒。


    net.slp.multicastMaximumWait=20000
    
    net.slp.multicastTimeouts=2000,5000,6000,7000
    
    net.slp.DADiscoveryTimeouts=3000,3000,6000,8000
  5. 如果需要,请在 slpd.conf 文件中更改 net.slp.datagramTimeouts 属性:


    net.slp.datagramTimeouts=value
    
    value

    32 位整数的列表,它以毫秒为单位指定将单点传送数据报传输实现到 DA 时的超时

    缺省值 = 3000,3000,3000

    例如,可将数据报超时增大到 20000 毫秒,以避免频繁超时。


    net.slp.datagramTimeouts=2000,5000,6000,7000

    在高性能网络中,可以减小多点传送和单点传送 UDP 数据报传输的超时界限。如果减小超时界限,则同时会减小满足 SLP 请求所需的延迟。

  6. 保存更改并关闭文件。

  7. 重新启动 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 秒)。

Procedure如何配置随机等待界限

使用以下过程在 slp.conf 文件中更改 net.slp.RandomWaitBound 属性。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slpd.conf 文件中更改 net.slp.RandomWaitBound 属性:


    net.slp.RandomWaitBound=value
    
    value

    用于计算在尝试联系 DA 之前的随机等待时间的上限

    缺省值 = 1000 毫秒(1 秒)

    值范围 = 1000 至 3000 毫秒

    例如,可将最长等待时间延长至 2000 毫秒(2 秒)。


    net.slp.randomWaitBound=2000

    延长随机等待界限时,注册中将出现更长的延迟。SA 可以用新搜索到的 DA 以更慢的速度完成注册,以避免冲突和超时。

  5. 如果需要,请在 slpd.conf 文件中更改 net.slp.datagramTimeouts 属性:


    net.slp.datgramTimeouts=value
    
    value

    32 位整数的列表,它以毫秒为单位指定将单点传送数据报传输实现到 DA 时的超时

    缺省值 = 3000,3000,3000

    例如,可将数据报超时增大到 20000 毫秒,以避免频繁超时。


    net.slp.datagramTimeouts=2000,5000,6000,7000

    在高性能网络中,可以减小多点传送和单点传送 UDP 数据报传输的超时界限。此设置可减小满足 SLP 请求时的延迟量。

  6. 保存更改并关闭文件。

  7. 重新启动 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 将在重新启动时列显错误消息。

Procedure如何配置范围

使用以下过程在 slp.conf 文件中为 net.slp.useScopes 属性添加范围名称。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slpd.conf 文件中更改 net.slp.useScopes 属性:


    net.slp.useScopes=<scope names>
    
    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
  5. 保存更改并关闭文件。

  6. 重新启动 slpd 以激活更改。


    # svcadm enable network/slp
    

部署 DA

本节介绍 DA 在运行 SLP 的网络中的战略部署。

只需具有基本代理(UA 和 SA),无需部署 DA 或配置范围,SLP 便可正常运行。缺少特定配置的所有代理都使用 default 范围。DA 用作服务通知的高速缓存。部署 DA 会减少在网络中发送的消息数,并可缩短接收消息响应所需的时间。此功能使 SLP 可以适应更大型的网络。

部署 SLP DA 的原因

部署 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

如果以下任何条件成立,则请在您的企业中部署 DA:

Procedure如何部署 DA

使用以下过程在 slp.conf 文件中将 net.slp.isDA 属性设置为 True


注 –

只能为每个主机指定一个 DA。


  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slpd.conf 文件中将 net.slp.isDA 属性设置为 True


    net.slp.isDA=True
  5. 保存更改并关闭文件。

  6. 重新启动 slpd 以激活更改。


    # svcadm enable network/slp
    

放置 DA 的位置

本节针对不同的情况对放置 DA 的位置提供了建议。

为负载平衡放置多个 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 来支持一个新范围。

SLP 和多宿主

多宿主服务器在多个 IP 子网中用作主机。该服务器有时可以有多个网络接口卡,并可用作路由器。包括多点传送包在内的 IP 包将在接口之间进行路由。在有些情况下,会禁用接口之间的路由。以下各节介绍如何为此类情况配置 SLP。

用于 SLP 的多宿主配置

无需进行任何配置,slpd 便可侦听缺省网络接口上的多点传送和 UDP/TCP 单点传送。如果在多宿主机器的接口之间启用了单点传送和多点传送路由,则无需进行附加配置。这是因为到达另一接口的多点传送包已正确路由至缺省接口。因此,对 DA 或其他服务通知的多点传送请求将到达 slpd。如果由于某种原因未打开路由,则需要进行配置。

何时配置非路由的多个网络接口

如果下面的任何一个条件存在,都可能需要配置多宿主机器。

接口之间的多点传送路由被禁用时,通常是因为网络中尚未部署多点传送。在此情况下,广播通常用于不基于 DA 的服务搜索和个别子网上的 DA 搜索。通过将 net.slp.isBroadcastOnly 属性设置为 True 来配置广播。

配置非路由的多个网络接口(任务列表)

表 9–5 配置非路由的多个网络接口

任务 

说明 

参考 

配置 net.slp.interfaces 属性

设置此属性,以使 slpd 侦听指定接口上的单点传送和多点传送/广播 SLP 请求。

配置 net.slp.interfaces 属性

安排代理服务通知,以使子网上的 UA 获得具有可访问地址的服务 URL 

将代理通知限制到正在运行 slpd(它与单个子网而非多宿主主机连接)的机器。

多宿主主机上的代理通知

放置 DA 并配置范围,以确保 UA 和 SA 之间的可访问性 

在具有一个接口主机名或地址的多宿主主机上配置 net.slp.interfaces 属性。

在多宿主主机上运行 DA 但配置范围,以使每个子网上的 SA 和 UA 使用不同的主机。 

DA 放置和范围名称指定

配置 net.slp.interfaces 属性

如果设置了 net.slp.interfaces 属性,slpd 将侦听该属性所列接口而非缺省接口上的单点传送和多点传送/广播 SLP 请求。

通常,设置 net.slp.interfaces 属性时同时会通过设置 net.slp.isBroadcastOnly 属性来启用广播,原因是网络中尚未部署多点传送。但是,如果已经部署多点传送,而多点传送未在此特定多宿主主机上路由,则多点传送请求可从多个接口到达 slpd。当包的路由由与子网(接口为这些子网提供服务)连接的另一台多宿主主机或路由器处理时,会出现此情况。

出现此类情况时,发送请求的 SA 服务器或 UA 将收到来自多宿主主机上的 slpd 的两个响应。然后,客户机库对响应进行过滤,客户机将看不到这些响应。但这些响应在 snoop 跟踪中可见。


注 –

如果关闭单点传送路由,则所有子网都无法访问多宿主主机上的 SA 客户机通知的服务。如果这些服务无法访问,SA 客户机可以执行以下操作:


SA 客户机库不执行任何操作来确保已对可访问的 URL 进行通知。服务计划(它可能处理也可能不处理多宿主主机)将负责确保已对可访问的 URL 进行通知。

在禁用单点传送路由的多宿主主机上部署服务时,请使用 snoop 来确定服务是否可以正确处理来自多个子网的请求。此外,如果计划在多宿主主机上部署 DA,请参见 DA 放置和范围名称指定

Procedure如何配置 net.slp.interfaces 属性

使用以下过程在 slp.conf 文件中更改 net.slp.interfaces 属性。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  3. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  4. slpd.conf 文件中更改 net.slp.interfaces 属性:


    net.slp.interfaces=value
    
    value

    网络接口卡的 IPv4 地址或主机名的列表,DA 或 SA 应在该网络接口卡上侦听端口 427 上的多点传送、单点传送 UDP 和 TCP 消息

    例如,具有三个网络接口卡和已关闭的多点传送路由的服务器将连接至三个子网。这三个网络接口的 IP 地址为 192.147.142.42192.147.143.42192.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 地址或可解析的主机名。


  5. 保存更改并关闭文件。

  6. 重新启动 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 在所有接口上都通知代理。142144 子网中的机器将接收 URL 以响应服务请求,但无法访问 oldprinter 服务。

对此问题的解决方案是用只与 143 子网连接的机器(而非多宿主主机)上运行的 slpd 来执行代理通知。只有 143 子网上的主机可以获得通知,以作为对服务请求的响应。

DA 放置和范围名称指定

为了确保客户机获得可访问的服务,在具有多宿主主机的网络中进行 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 属性的常见情况。在其他情况下,需要慎重地考虑和规划,以避免不必要的重复响应或无法访问的服务。

第 10 章 引入传统服务

传统服务是早于 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 的服务

如果没有源代码或包含 SLP 的更新的 PROM,则可编写一个使用 SLP 客户机库通知服务的小型应用程序。此应用程序可用作小型守护进程,可在用来启动和停止服务的同一 Shell 脚本中启动或停止。

SLP 代理注册

Solaris slpd 支持用代理注册文件通知的传统服务。代理注册文件是可移植格式的服务通知的列表。

Procedure如何启用 SLP 代理注册

  1. 在主机文件系统或可通过 HTTP 访问的任何网络目录中创建代理注册文件。

  2. 确定是否存在用于该服务的服务类型模板。

    模板是对服务 URL 和服务类型的属性的说明。模板用于为特定服务类型定义通知的组成部分:

    • 如果存在服务类型模板,请使用该模板来构造代理注册。有关服务类型模板的更多信息,请参见 RFC 2609。

    • 如果没有该服务的服务类型模板,请选择可以准确描述该服务的属性集合。请对通知使用命名授权而非缺省设置。缺省的命名授权只允许用于已标准化的服务类型。有关命名授权的更多信息,请参见 RFC 2609。

      例如,假设一个名为 BizApp 的公司有一个用于跟踪软件缺陷的本地数据库。为通知该数据库,该公司可能使用服务类型为 service:bugdb.bizapp 的 URL。命名授权将为 bizapp

  3. 执行以下步骤,以配置 /etc/inet/slp.conf 文件(此文件位于前面步骤创建的注册文件的位置)中的 net.slp.serializedRegURL 属性。

  4. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  5. 停止 slpd 和主机上的所有 SLP 活动。


    # svcadm disable network/slp
    
  6. 在更改配置设置之前,先备份缺省的 /etc/inet/slp.conf 文件。

  7. /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
  8. 保存更改并关闭文件。

  9. 重新启动 slpd 以激活更改。


    # svcadm enable network/slp
    

使用 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。


表 10–1 SLP 代理注册文件说明

行号 

说明 

1 和 10 

注释行以井号 (#) 开头,不影响文件操作。从注释行开头一直到结束的所有字符都将被忽略。 

2、9 和 14 

限定通知的空行。 

3 和 12 

具有用逗号分隔的三个必需字段和一个可选字段的服务 URL: 

  • 通知的通用或 service:URL。有关如何形成 service: URL 的说明,请参见 RFC 2609。

  • 通知的语言。在前面的示例中,此字段指定为英语,即 en。语言是 RFC 1766 语言标记。

  • 注册的生命周期,以秒为单位度量。生命周期限制为 16 位的无符号整数。如果生命周期小于最大值 65535,slpd 将使通知超时。如果生命周期为 65535,slpd 将定期刷新通知,并且在 slpd 退出之前,一直将生命周期视为永久。

  • (可选)服务类型字段-如果使用此字段,它将定义服务类型。如果定义了服务 URL,则可更改通知 URL 所用的服务类型。在前面的代理注册文件示例中,第 12 行包含一个通用 FTP URL。可选类型字段会使 URL 以服务类型名称 src-server 来进行通知。缺省情况下,类型名称中不会添加 service 前缀。

范围指定。 

可选行由标记 scope、后面的等号和以逗号分隔的范围名称列表组成。范围名称由 net.slp.useScopes 配置属性定义。此列表中只应包括为主机配置的范围。如果未添加范围行,则在配置了 slpd 的所有范围内进行注册。范围行必须紧随 URL 行之后。否则,系统会将范围名称识别为属性。

5–8 

属性定义。 

在可选的范围行之后,批量服务通知中包含属性/值列表对行。每个对都包含属性标记,其后是等号以及属性值或以逗号分隔的值列表。在前面的代理注册文件示例中,第 8 行显示了具有多个值的属性列表。所有其他列表都是单值。属性名称和值的格式与在线 SLP 消息的格式相同。 

通知传统服务时的注意事项

通常,修改源代码来添加 SLP 的方法,优于编写启用 SLP 的服务(该服务使用 SLP API 代表其他服务进行通知)。修改源代码的方法也优于使用代理注册的方法。修改源代码时,可以添加特定于服务的功能并密切跟踪服务的可用性。如果源代码不可用,则编写代表其他服务进行通知的启用 SLP 的帮助器服务的方法,优于使用代理注册的方法。此帮助器服务最好集成到用于控制激活和取消激活服务启动/停止过程中。当没有源代码可用并且编写单独的 SA 不可行时,代理通知通常是第三种选择。

仅当运行 slpd 以读取代理注册文件时,才能维护代理通知。代理通知与服务之间没有直接的联系。如果通知超时或 slpd 停止,代理通知将不再可用。

如果服务关闭,则必须停止 slpd。该序列化注册文件被编辑,以注释掉或删除代理通知,然后 slpd 重新启动。重新启动或重新安装服务时,必须遵循相同的过程。代理通知与服务之间缺少联系是代理通知的主要缺点。

第 11 章 SLP(参考)

本章介绍 SLP 状态代码和消息类型。列出了 SLP 消息类型及其缩写和功能代码。还介绍了 SLP 状态代码及其说明和功能代码,功能代码用来表示已接收请求(代码 0)或接收器繁忙。


注 –

SLP 守护进程 (slpd) 只为单点传送消息返回状态代码。


SLP 状态代码

表 11–1 SLP 状态代码

状态类型 

状态代码 

说明 

No Error 

已处理请求,未出现错误。 

LANGUAGE_NOT_SUPPORTED 

对于 AttrRqst 或 SrvRqst,在范围内有该服务类型的数据,但使用的不是指定的语言。 

PARSE_ERROR 

消息未遵循 SLP 语法。 

INVALID_REGISTRATION 

SrvReg 存在问题。例如,生命周期为零或省略了语言标记。 

SCOPE_NOT_SUPPORTED 

SLP 消息的范围列表中不包括应答请求的 SA 或 DA 所支持的范围。 

AUTHENTICATION_UNKNOWN 

DA 或 SA 接收到来自不受支持的 SLP SPI 的请求。 

AUTHENTICATION_ABSENT 

UA 或 DA 期望在 SrvReg 中出现 URL 和属性验证但未收到。  

AUTHENTICATION_FAILED 

UA 或 DA 在验证块中检测到验证错误。 

VER_NOT_SUPPORTED 

消息中的版本号不受支持。 

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。  

SLP 消息类型

表 11–2 SLP 消息类型

消息类型 

缩写 

功能代码 

说明 

服务请求 

SrvRqst

由 UA 发出,用于查找服务;或由 UA 或 SA 服务器在主动 DA 搜索期间发出。 

服务应答 

SrvRply

DA 或 SA 对服务请求的响应。 

服务注册 

SrvReg

允许 SA 注册新通知,利用新增和更改的属性更新现有通知,以及刷新 URL 生命周期。 

服务注销 

SrvDereg

当通知表示的服务不再可用时,由 SA 用来注销其通知。 

确认 

SrvAck

DA 对 SA 的服务请求或服务注销消息的响应 

属性请求 

AttrRqst

由 URL 或服务类型发出,用以请求属性列表。 

属性应答 

AttrRply

用于返回属性列表。 

DA 通知 

DAAdvert

DA 对多点传送服务请求的响应。 

服务类型请求 

SrvTypeRqst

用来查询具有特定的命名授权并且处于特定范围集合中的已注册服务类型。 

服务类型应答 

SrvTypeRply

10 

作为对服务类型请求的响应返回的消息。 

SA 通知 

SAAdvert

11 

UA 使用 SAAdvert 在未部署 DA 的网络中搜索 SA 及其范围。