流控制传输协议 (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