SCTP:Stream Control Transmission Protocol
SCTP维持client和server的一个关系,这个关系可以有多个地址。在两个结点间提供多条传输通道,其中一条堵塞,不会影响其它的通道。
SCTP是message-oriented的,第个独立的数据包都包含长度。
SCTP提供multihoming,一个结点可支持多个IP地址,这样可以提高健壮性。
4步建立连接
- server准备好接受连接,passive open。这点和TCP相同。
- 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.
- server发送一个INIT-ACK,除了包含上面的信息,还包含一个state cookie。state cookie包含server需要的所有状态。
- client发送一个COOKIE-ECHO作为对state cookie的响应。这些数据也可能和数据一起发送。
- 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类似。