SCTP 传输协议以与 TCP 类似的方式为应用层协议提供服务。但是,SCTP 允许单方或双方为多宿主系统的两个系统进行通信。SCTP 连接称为关联。在关联中,应用程序将要传输的数据分为一个或多个消息流,即多流化。SCTP 连接可以转到有多个 IP 地址的端点,这对电话应用程序尤其重要。如果站点使用 IP 过滤器或 IPsec,则 SCTP 的多宿主功能是出于安全考虑。sctp(7P) 手册页介绍了其中一些安全方面的考虑。
缺省情况下,SCTP 包括在 Oracle Solaris : 中,且不需要其他配置。但是,可能需要显式配置某些应用层服务才能使用 SCTP。echo 和 discard 就是这样的应用程序。下一过程说明如何添加使用 SCTP 一对一样式套接字的回显服务。
也可以使用以下过程为 TCP 和 UDP 传输层协议添加服务。
以下任务说明如何将 inetd 守护进程管理的 SCTP inet 服务添加到 SMF 系统信息库。然后,该任务说明如何使用服务管理工具 (Service Management Facility, SMF) 命令添加该服务。
有关 SMF 命令的信息,请参阅《系统管理指南:基本管理》中的“SMF 命令行管理实用程序”。
有关语法信息,请参阅该过程中所引用的 SMF 命令的手册页。
有关 SMF 的详细信息,请参阅 smf(5) 手册页。
执行以下过程之前,请为服务创建清单文件。该过程以 echo 服务的清单 echo.sctp.xml 为例。
使用拥有系统文件的写入权限的用户帐户,登录到本地系统。
编辑 /etc/services 文件并添加新服务的定义。
service-name |port/protocol | aliases |
添加新服务。
转到存储服务清单的目录,然后键入以下内容:
# cd dir-name # svccfg import service-manifest-name |
有关 svccfg 的完整语法,请参阅 svccfg(1M) 手册页。
假定您希望使用当前位于 service.dir 目录中的清单 echo.sctp.xml 添加新的 SCTP echo 服务,应键入以下内容:
# cd service.dir # svccfg import echo.sctp.xml |
验证是否已添加服务清单:
# svcs FMRI |
对于 FMRI 参数,使用服务清单的故障管理资源标识符 (Fault Managed Resource Identifier, FMRI)。例如,对于 SCTP echo 服务,应使用以下命令:
# svcs svc:/network/echo:sctp_stream |
输出应该与如下所示类似:
STATE STIME FMRI disabled 16:17:00 svc:/network/echo:sctp_stream |
有关 svcs 命令的详细信息,请参阅 svcs(1) 手册页。
该输出指明,新的服务清单当前处于禁用状态。
列出服务的属性以确定是否必须进行修改。
# inetadm -l FMRI |
有关 inetadm 命令的详细信息,请参阅 inetadm(1M) 手册页。
例如,对于 SCTP echo 服务,应键入以下内容:
# inetadm -l svc:/network/echo:sctp_stream SCOPE NAME=VALUE name="echo" endpoint_type="stream" proto="sctp" isrpc=FALSE wait=FALSE exec="/usr/lib/inet/in.echod -s" . . default tcp_trace=FALSE default tcp_wrappers=FALSE |
启用新服务:
# inetadm -e FMRI |
验证服务是否已启用:
例如,对于新的 echo 服务,应键入以下内容:
# inetadm | grep sctp_stream . . enabled online svc:/network/echo:sctp_stream |
以下示例给出要使用的命令以及使回显服务使用 SCTP 传输层协议所需的文件项。
$ cat /etc/services . . echo 7/tcp echo 7/udp echo 7/sctp # cd service.dir # svccfg import echo.sctp.xml # svcs network/echo* STATE STIME FMRI disabled 15:46:44 svc:/network/echo:dgram disabled 15:46:44 svc:/network/echo:stream disabled 16:17:00 svc:/network/echo:sctp_stream # inetadm -l svc:/network/echo:sctp_stream SCOPE NAME=VALUE name="echo" endpoint_type="stream" proto="sctp" isrpc=FALSE wait=FALSE exec="/usr/lib/inet/in.echod -s" user="root" default bind_addr="" default bind_fail_max=-1 default bind_fail_interval=-1 default max_con_rate=-1 default max_copies=-1 default con_rate_offline=-1 default failrate_cnt=40 default failrate_interval=60 default inherit_env=TRUE default tcp_trace=FALSE default tcp_wrappers=FALSE # inetadm -e svc:/network/echo:sctp_stream # inetadm | grep echo disabled disabled svc:/network/echo:stream disabled disabled svc:/network/echo:dgram enabled online svc:/network/echo:sctp_stream |