流控制传输协议SCTP

流控制传输协议SCTP

SCTP提供的服务与UDPTCP提供的类似。

SCTP在客户和服务器之间提供关联,并像TCP那样给应用提供可靠性,排序,流量控制以及全双工的数据传送。SCTP使用关联一词取代连接是为了避免这样的内涵:一个连接只涉及两个IP地址之间的通信,一个关联指代两个系统之间的一次通信,它可能因为SCTP支持多宿而涉及不止两个地址。

TCP不同的是,SCTP是面向消息的,它提供各个记录的按序递送服务。与UDP一样,由发送端写入的每条记录的长度随数据一起传送给接收端应用。

SCTP能够在所连接的端点之间提供多个流,每个流各自可靠地按序传递消息。一个流上某个消息的丢失不会阻塞同一关联其他流上消息的投递。这种做法与TCP正好相反,就TCP而言,在单一字节流中任何位置的字节丢失都将阻塞该连接上其后所有数据的递送,直到该丢失被修复为止。

SCTP还提供多宿特性,使得单个SCTP端点能够支持多个IP地址。该特性可以增强应对网络故障的健壮性。一个端点可能有多个冗余的网络连接,每个网络又可能有各自接入因特网基础设施的连接。当该端点与另一个端点建立一个关联后,如果它的某个网络或某个跨越因特网的通路发生故障,SCTP就可以通过切换到使用已与该关联相关的另一个地址来规避所发生的故障。

SCTP关联的建立和终止

TCP一样,SCTP也是面向连接的。因此也有关联的建立与终止的握手过程。不过SCTP的握手过程不同于TCP

四路握手

建立一个SCTP关联的时候会发生如下情形。

  • 服务器必须准备好接受外来的关联。这通常通过调用socketbindlisten这三个函数来完成,称为被动打开。
  • 客户通过调用connect或者发送一个隐式打开该关联的消息进行主动打开,这使得客户SCTP发送一个INIT消息(初始化),该消息告诉服务器客户的IP地址清单,初始序列号,用户表示本关联中所有分组的起始标记,客户请求的外出流的数目以及客户能够支持的外来流的数目。
  • 服务器以一个INIT ACK消息确认客户的INIT消息,其中含有服务器的IP地址清单,初始序列号,起始标记,服务器请求的外出流的数目,服务器能够支持的外来流的数目以及一个状态cookie。状态cookie包含服务器用于确信本关联有效所需的所有状态,它是数字化签名过的,以确保其有效性。
  • 客户以一个COOKIE ECHO消息回射服务器的状态cookie。除COOKIE ECHO外,该消息可能在同一个分组中还捆绑了用户数据。
  • 服务器以一个COOKIE ACK消息确认客户回射的cookie是正确的,本关联于是建立。该消息也可能在同一个分组中还捆绑了用户数据。

在这里插入图片描述

SCTP的四路握手在很多方面类似于TCP的三路握手,差别在于作为SCTP整体一部分的cookie的生成。INIT承载一个验证标记 T a T_a Ta和一个初始序列号 J J J。在关联的有效期内,验证标记 T a T_a Ta必须在对端发送的每个分组中出现。初始序列号 J J J用作承载用户数据的DATA块的起始序列号。对端也在INIT ACK中承载一个验证标记 T Z T_Z TZ,在关联的有效期内,验证标记 T Z T_Z TZ也必须在其发送的每个分组中出现。除了验证标记 T Z T_Z TZ和初始序列号K外,INIT的接收端还在作为相应的INIT ACK中提供一个cookie C。该cookie包含设置本SCTP关联所需的所有状态,这样服务器的SCTP栈就不必保存所关联客户的有关信息。

四路握手过程结束时,两端各自选择一个主目的地址。当不存在网络故障时,主目的地址将用作数据要发送的默认目的地。

关联终止

SCTP不像TCP那样允许“半关闭”的关联。当一端关闭某个关联时,另一端必须停止发送新的数据。关联关闭请求的接收端发送完已经排队的数据(如果有的话)后,完成关联的关闭。

在这里插入图片描述
SCTP没有类似于TCPTIME_WAIT状态,因为SCTP使用了验证标记。所有后续块都在捆绑他们的SCTP分组的公共首部标记了初始的INIT块和INIT ACK块中作为起始标记交换的验证标记;由来自旧连接的块通过所在SCTP分组的公共首部间接携带的验证标记对于新连接来说是不正确的。因此,SCTP通过放置验证标记值就避免了TCPTIME_WAIT状态保持整个连接的做法。

观察分组

在这里插入图片描述
本例中,客户在COOKIE ECHO块所在分组中捎带了它的第一个DATA块,服务器则在作为应答的COOKIE ACK块所在分组中捎带了数据。

SCTP分组中信息的单位称为块。块是自描述的,包含一个块类型,若干个块标记和一个块长度。这样做方便了多个块的绑缚,只要把他们简单的组合到一个SCTP外出消息中。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值