MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Protocols                                                sctp(7P)



NAME
     sctp, SCTP - Stream Control Transmission Protocol

SYNOPSIS
     #include 


     #include 


     s = socket(AFINET, SOCKSTREAM, IPROTOSCTP);


     s = socket(AFINET, SOCKSEQPACKET, IPROTOSCTP);


     s = socket(AFINET6, SOCKSTREAM, IPROTOSCTP);


     s = socket(AFINET6, SOCKSEQPACKET, IPROTOSCTP);


DESCRIPTION
     SCTP is a transport protocol layered above the Internet Pro-
     tocol  (IP), or the Internet Protocol Version 6 (IPv6). SCTP
     provides  a  reliable,  session  oriented,  flow-controlled,
     two-way transmission of data. It is a message- oriented pro-
     tocol and supports  framing  of  individual  messages  boun-
     daries. An SCTP association is created between two endpoints
     for data transfer which is maintained during the lifetime of
     the  transfer. An SCTP association is setup between two end-
     points using a four-way handshake mechanism with the use  of
     a  cookie  to  guard against some types of denial of service
     (DoS) attacks. These endpoints may be represented by  multi-
     ple IP addresses.


     An SCTP message includes a common SCTP  header  followed  by
     one  or  more chunks. Included in the common header is a 32-
     bit field which contains the checksum (computed  using  CRC-
     32c polynomial) of the entire SCTP packet.


     SCTP transfers data payloads in the  form  of  DATA  chunks.
     Each  DATA  chunk  contains  a  Transmission Sequence Number
     (TSN), which governs the transmission of messages and detec-
     tion  of  loss. DATA chunk exchanges follow the Transmission
     Control Protocol's (TCP) Selective ACK (SACK) mechanism. The
     receiver acknowledges data by sending SACK chunks, which not
     only indicate the cumulative TSN range  received,  but  also
     non-cumulative  TSNs received, implying gaps in the received
     TSN sequence. SACKs are sent using the  delayed  ack  method



SunOS 5.11         Last change: 13 April 2004                   1






Protocols                                                sctp(7P)



     similar  to  TCP, that is, one SCTP per every other received
     packet with an upper bound on the delay (when there are gaps
     detected  the  frequence  is increased to one every received
     packet). Flow and congestion control follow TCP  algorithms:
     Slow  Start,  Congestion  Avoidance,  Fast Recovery and Fast
     retransmit. But unlike TCP, SCTP does not support half-close
     connection and "urgent" data.


     SCTP is designed to support a number of functions  that  are
     critical   for  telephony  signalling  transport,  including
     multi-streaming. SCTP allows data  to  be  partitioned  into
     multiple  streams  that  have  the  property  of independent
     sequenced delivery so that message loss in  any  one  stream
     only  affects  delivery within that stream. In many applica-
     tions (particularly telephony signalling), it is only neces-
     sary  to  maintain  sequencing  of messages that affect some
     resource. Other messages may be delivered without having  to
     maintain overall sequence integrity. A DATA chunk on an SCTP
     association contains the Stream  Id/Stream  Sequence  Number
     pair,  in  addition  to the TSN, which is used for sequenced
     delivery within a stream.


     SCTP uses IP's host level addressing and adds its  own  per-
     host  collection of port addresses. The endpoints of an SCTP
     association  are  identified  by  the  combination   of   IP
     address(es)  and an SCTP port number. By providing the abil-
     ity for an endpoint to have multiple IP addresses, SCTP sup-
     ports  multi-homing,  which  makes  an SCTP association more
     resilient in the presence of network failures (assuming  the
     network  is  architected  to  provided  redundancy).  For  a
     multi-homed SCTP association, a single address  is  used  as
     the  primary  address,  which  is  used  as  the destination
     address for normal DATA chunk transfers. Retransmitted  DATA
     chunks  are  sent over alternate address(es) to increase the
     probability of  reaching  the   remote  endpoint.  Continued
     failure  to  send  DATA  chunks over the the primary address
     results in selecting an alternate address  as   the  primary
     address. Additionally, SCTP monitors the reachability of all
     alternate addresses by sending periodic "heartbeats" chunks.
     An  SCTP association supports multi-homing by exchanging the
     available list of addresses  during  association  setup  (as
     part  of its four-way handshake mechanism). An SCTP endpoint
     is associated with a local address using  the  bind(3SOCKET)
     call.  Subsequently,  the  endpoint  can  be associated with
     additional addresses using sctpbindx(3SOCKET). By  using  a
     special  value  of  INADRANY  with  IP  or the unspecified
     address (all  zeros)  with  IPv6  in  the  bind(3SOCKET)  or
     sctpbindx(3SOCKET)  calls,  an endpoint can be bound to all
     available IP or IPv6 addresses on the system.




SunOS 5.11         Last change: 13 April 2004                   2






Protocols                                                sctp(7P)



     SCTP uses a 3-way  mechanism  to  allow  graceful  shutdown,
     where  each  endpoint  has  confirmation  of the DATA chunks
     received by the remote endpoint prior to completion  of  the
     shutdown.  An  Abort  is  provided  for  error cases when an
     immediate shutdown is needed.


     Applications can access SCTP using the socket interface as a
     SOCKSTREAM  (one-to-one  style)  or SOCKSEQPACKET (one-to-
     many style) socket type.


     One-to-one style socket interface supports similar semantics
     as  sockets  for connection oriented protocols, such as TCP.
     Thus,  a  passive  socket  is   created   by   calling   the
     listen(3SOCKET)  system  call after binding the socket using
     bind(3SOCKET). Associations to this passive  socket  can  be
     received  using  accept(3SOCKET) system call. Active sockets
     use the connect(3SOCKET) system call after binding  to  ini-
     tiate  an association. If an active socket is not explicitly
     bound, an implicit binding is performed. If  an  application
     wants  to  exchange data during the association setup phase,
     it   should   not    call    connect(3SOCKET),    but    use
     sendto(3SOCKET)/sendmsg(3SOCKET)  to  implicitly initiate an
     association.  Once  an  association  has  been  established,
     read(2) and write(2) system calls can used to exchange data.
     Additionally,send(3SOCKET), recv(3SOCKET),  sendto(3SOCKET),
     recvfrom(3SOCKET), sendmsg(3SOCKET) and recvmsg(3SOCKET) can
     be used.


     One-to-many socket interface supports similar  semantics  as
     sockets for connection less protocols, such as UDP (however,
     unlike UDP, it does not support broadcast or multicast  com-
     munications).    A  passive  socket  is  created  using  the
     listen(3SOCKET) system call after binding the  socket  using
     bind(3SOCKET).  An  accept(3SOCKET)  call  is  not needed to
     receive associations to this  passive  socket  (in  fact  an
     accept(3SOCKET) on a one-to-many socket will fail). Associa-
     tions are accepted automatically and  notifications  of  new
     associations  are  delivered  in  recvmsg(3SOCKET)  provided
     notifications are  enabled.  Active  sockets  after  binding
     (implicitly or explicitly) need not call connect(3SOCKET) to
     establish  an  association,  implicit  associations  can  be
     created     using    sendmsg(3SOCKET)/recvmsg(3SOCKET)    or
     sendto(3SOCKET)/recvfrom(3SOCKET) calls. Such implicit asso-
     ciations   cannot   be   created   using  send(3SOCKET)  and
     recv(3SOCKET) calls. On an SCTP socket (one-to-one  or  one-
     to-many), an association may be established using sendmsg().
     However, if an association already exists for  the  destina-
     tion address specified in the 'msgname' member of the 'msg'
     parameter, sendmsg() must  include  the  association  id  in



SunOS 5.11         Last change: 13 April 2004                   3






Protocols                                                sctp(7P)



     'msgiov'    member    of   the   'msg'   parameter   (using
     sctpsndrcvinfo structure) for a one-to-many SCTP socket. If
     the  association  id  is  not provided, sendmsg() fails with
     EADRINUSE.  On a one-to-one socket the destination informa-
     tion  in  the  'msg' parameter is ignored for an established
     association.


     A one-to-one style association can be created  from  a  one-
     to-many   association   by   branching   it  off  using  the
     sctppeeloff(3SOCKET) call; send(3SOCKET) and  recv(3SOCKET)
     can be used on such peeled off associations. A close(2) on a
     one-to-many socket will gracefully shutdown all the associa-
     tions represented by that one-to-many socket.


     sctpsendmsg(3SOCKET) andsctprecvmsg(3SOCKET) can  be  used
     to avail of advanced features provided by SCTP.


     SCTP  provides   socket   option   which   are   set   using
     setsockopt(3SOCKET)  and read using getsockopt(3SOCKET). The
     option level is the protocol number for SCTP, available from
     getprotobyname(3SOCKET).  Socket option SCTPNODELAY is used
     to  turn  on/off  any  Nagle  like  algorithm  (similar   to
     TCPNODELAY).  Options  SORCVBUF  and SOSNDBUF are used to
     set the receive and send buffer  respectively.  For  one-to-
     many  style  socket,  SCTPAUTOCLOSE  option  can be used to
     automatically close any association that has been  idle  for
     more  than  the  specified number of seconds. A value of '0'
     indicates that no associations should  be  closed  automati-
     cally. Option SCTPEVENTS is used to specify various notifi-
     cations and ancillary data the user wishes to receive.  SCTP
     also  provides an option - SCTPSTATUS - to retrieve current
     status information about an SCTP association.

MULTIHOMING
     The ability of SCTP to use multiple addresses in an associa-
     tion  can  create  issues  with some network utilities. This
     requires a system adminstrator to be careful in  setting  up
     the system.


     For example, the tcpd(1M) allows an administrator to  use  a
     simple   form  of  address/hostname  access  control.  While
     tcpd(1M) can work with SCTP, the  access  control  part  can
     have some problems. Thetcpd(1M) access control is only based
     on one of the addresses at association setup time.  Once  as
     association  is allowed, no more checking is performed. This
     means that during the life time  of  the  association,  SCTP
     packets  from  different  addresses  of the peer host can be
     received in the system. This may  not  be  what  the  system



SunOS 5.11         Last change: 13 April 2004                   4






Protocols                                                sctp(7P)



     administrator wants as some of the peer's addresses are sup-
     posed to be blocked.


     Another example is the use of IP  Filter,  ipfilter(1M).  IP
     Filter  provides  several functionalities, such as IP packet
     filtering (ipf(1M)) and NAT ipnat(1M)). For  packet  filter-
     ing,  one  issue  is  that a filter policy can block packets
     from some of the addresses of an association while  allowing
     packets from other addresses to go through. This can degrade
     SCTP's performance when failure  occurs.  There  is  a  more
     serious issue with IP address rewrite by NAT. At association
     setup time, SCTP endpoints exchange  IP  addresses.  But  IP
     Filter  is  not  aware  of  this.  So  when NAT is done on a
     packet, it may change the address to  an  unacceptable  one.
     Thus the SCTP association setup may succeed but packets can-
     not go through afterwards when a  different  IP  address  is
     used for the association.

SEE ALSO
     ipfilter(1M),  ipf(1M),   ipnat(1M),   ndd(1M),    ioctl(2),
     read(2),     write(2),    libsctp(3LIB),    accept(3SOCKET),
     bind(3SOCKET),  connect(3SOCKET),   getprotobyname(3SOCKET),
     getsockopt(3SOCKET),     listen(3SOCKET),     recv(3SOCKET),
     recvfrom(3SOCKET),  recvmsg(3SOCKET),   sctpbindx(3SOCKET),
     sctpgetladdrs(3SOCKET),            sctpgetpaddrs(3SOCKET),
     sctpfreepaddrs(3SOCKET),            sctpoptinfo(3SOCKET),
     sctppeeloff(3SOCKET),                sctprecvmsg(3SOCKET),
     sctpsendmsg(3SOCKET),   send(3SOCKET),    sendmsg(3SOCKET),
     sendto(3SOCKET),    socket(3SOCKET),    tcp(7P),    udp(7P),
     inet(7P), inet6(7P), ip(7P), ip6(7P)


     R. Stewart, Q. Xie, K. Morneault, C. Sharp, H. Schwarzbauer,
     T.  Taylor,   I.  Rytina,  M. Kalla, L. Zang, V. Paxson, RFC
     2960, Stream Control Transmission Protocol, October 2000


     L. Ong, J. Yoakum, RFC 3286, An Introduction to Stream  Con-
     trol Transmission Protocol (SCTP), May 2002


     J. Stone, R. Stewart, D.  Otis,  RFC  3309,  Stream  Control
     Transmission  Protocol  (SCTP)  Checksum  Change,  September
     2002.

DIAGNOSTICS
     A socket operation may fail if:

     EPROTONOSUPORT    If  the  socket  type   is   other   than
                        SOCKSTREAM and SOCKSEQPACKET




SunOS 5.11         Last change: 13 April 2004                   5






Protocols                                                sctp(7P)



     ETIMEDOUT          An association was dropped due to  exces-
                        sive retransmissions.


     ECONREFUSED       The remote peer refused  establishing  an
                        association.


     ECONREFUSED


     EADRINUSE         A bind() operation  was  attempted  on  a
                        socket  with  a network address/port pair
                        that has already been  bound  to  another
                        socket.


     EINVAL             A bind() operation  was  attempted  on  a
                        socket  with  an                  invalid
                        network address.


     EPERM              A bind() operation  was  attempted  on  a
                        socket  with a "reserved" port number and
                        the effective user ID of the process  was
                        not the privileged user.





























SunOS 5.11         Last change: 13 April 2004                   6



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™