流控制传输协议 (Stream Control Transmission Protocol, SCTP) 以与 TCP 类似的方式为应用层协议提供服务。但是,SCTP 允许单方或双方为多宿主系统的两个系统进行通信。SCTP 连接称为关联。在关联中,应用程序将要传输的数据分为一个或多个消息流,也称为多流化。SCTP 连接可以转到有多个 IP 地址的端点,这对电话应用程序尤其重要。如果站点使用 IP 过滤器或 IPsec,则 SCTP 的多宿主功能是出于安全考虑。sctp(7P) 手册页介绍了其中一些安全方面的注意事项。
缺省情况下,SCTP 包括在 Oracle Solaris 中,且不需要其他配置。但是,可能需要显式配置某些应用层服务才能使用 SCTP。echo 和 discard 就是这样的应用程序示例。以下过程说明如何添加使用 SCTP 一对一样式套接字的回显服务。可以使用同一过程为 TCP 和 UDP 添加服务。
以下任务说明如何将 inetd 守护进程管理的 SCTP inet 服务添加到 SMF 系统信息库。然后,该任务说明如何使用 SMF 命令添加该服务。
开始之前
执行以下过程之前,请为服务创建清单文件。该过程以 echo 服务的清单 echo.sctp.xml 为例。
请参见 pfedit(1M) 手册页。
service-name port/protocol aliases
# cd dir-name # svccfg import service-manifest-name
例如,可以按照以下方式,使用位于 service.dir 目录中的清单 echo.sctp.xml 添加新 SCTP echo 服务:
# cd service.dir # svccfg import echo.sctp.xml
# svcs FMRI
对于 FMRI 参数,使用服务清单的故障管理资源标识符 (Fault Managed Resource Identifier, FMRI)。
# inetadm -l FMRI
# inetadm -e FMRI
以下示例给出要使用的命令以及使 echo 服务使用 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