unix 网络编程--SCTP

SCTP:Stream Control Transmission Protocol

SCTP维持client和server的一个关系,这个关系可以有多个地址。在两个结点间提供多条传输通道,其中一条堵塞,不会影响其它的通道。

SCTP是message-oriented的,第个独立的数据包都包含长度。

SCTP提供multihoming,一个结点可支持多个IP地址,这样可以提高健壮性。

4步建立连接

  1. server准备好接受连接,passive open。这点和TCP相同。
  2. client调用connect或发送消息进行一个active open,这时client会发送一个INIT告诉server关于client的IP地址列表,初始序列号,初始TAG,number of outbound streams the client is requesting, and number of inbound streams the client can support. 
  3. server发送一个INIT-ACK,除了包含上面的信息,还包含一个state cookie。state cookie包含server需要的所有状态。
  4. client发送一个COOKIE-ECHO作为对state cookie的响应。这些数据也可能和数据一起发送。
  5. server响应一个COOKIE-ACK,表示cookie是正确的,并且association被建立。这些数据也可能和数据一起发送。

client------------------INIT(Ta, J)----------------------------->server

client<---------Ta:INIT-ACK(Tz, K, cookie C )------------server

client---------Tz:COOKIE-ECHO C----------------------->server

client<---------Ta:COOKIE-ACK----------------------------server

TAG Ta 必须出现在每一个对方发送的包里面。对方也同样有一个TAB Tz。cookie中包含所有建立association的状态。

Association Termination

SCTP没有所谓的half-closed。一边终止association.,另一边必须停止发送数据。接收到关闭信息的一方,发送完剩下的数据,关闭自己。

client------------------SHUTDOWN---------------------------->server

client<---------SHUTDOWN-ACK-----------------------------server

client---------SHUTDOWN-COMPLETE-------------------->server

SCTP没有TIME_WAIT,这是因为它使用验证TAG。

SCTP的数据单位为chunk,它包含了type,flags,length。

SCTP Options

SCTP使用parameters and chunks处理可选的属性。

Output

application----------------------------------------------->SCTP--------------------------------------------------->IP--------------------------------------------->datalink

application buffer( any size )-------------------->socket send buffer------------------------------>MTU-sized IPv4/IPv6 packets-------->

SCTP和TCP类似。




你可能感兴趣的:(unix 网络编程--SCTP)