与TCP一样,SCTP也是面向连接的,因而也有关联的建立与终止的握手过程。不过SCTP的握手过程不同于TCP。
四路握手
建立一个SCTP关联的时候会发生下述情形(类似于TCP)。
(1)服务器必须准备好接受外来的关联。这通常通过调用socket、bind和listen函数来完成,称为被动打开。
(2)客户通过调用connect或者发送一个隐式打开该关联的消息进行主动打开。这使得客户SCTP发送一个INIT消息(初始化),该消息告诉服务器客户的IP地址清单、初始序列号、用户标识本关联中所有分组的起始标记、客户请求的外出流的数目以及客户能够支付的外来流的数目。
(3)服务器以一个INIT_ACK消息确认客户的INIT消息,其中含有服务器的IP地址清单、初始序列号、起始标识、服务器请求的外出流的数目、服务器能够支持的外来流的数目以及一个状态cookie。状态cookie包含服务器用于确信本关联有效所需的所有状态,它是数字化签名过的,以确保其有效性。
(4)客户以一个COOKIE_ECHO消息回射服务器的状态cookie。除COOKIE_ECHO外,该消息可能在同一分组中还捆绑了用户数据。
(5)服务器以一个COOKIE_ACK消息确认客户回射的cookie是正确的,本关联于是建立。该消息也可能在同一个分组中还捆绑了用户数据。
以上交换过程至少需要4个分组,因此称之为SCTP的四路握手。图2-6展示了这4个分节。