SCTP(Stream Control Transmission Protocol,流控制传输协议)是IETF(Internet Engineering Task Force,因特网工程任务组)在2000年定义的一个传输层(Transport Layer)协议,是提供基于不可靠传输业务的协议之上的可靠的数据报传输协议。
SCTP的设计用于通过IP网传输SCN(Signaling Communication Network,信令通信网)窄带信令消息。后期广泛用于EPC网络中的S6a/S1/Sgs/Sv等接口中。
SCTP是一个面向连接的流传输协议,它可以在两个端点之间提供稳定、有序的数据传递服务。SCTP可以看做是TCP协议的改进,它继承了TCP较为完善的拥塞控制并改进TCP的一些不足之处:
(1)SCTP与TCP的最大不同之处在于它是多宿主(Multi-homing)连接,而TCP是单地址连接。
(2)一个TCP连接只能支持一个流,一个SCTP连接可以支持多个流(Multi-streaming)。在SCTP协议中,流(Stream)是指从一个SCTP端点到另一端点之间建立的单向逻辑通路,通常情况下所有用户消息在流中按序传递。
(3) SCTP有更好的安全性。
SCTP实际上是一个面向连接的协议,但SCTP偶联的概念要比TCP的连接具有更广的概念,SCTP对TCP的缺陷进行了一些完善,使得信令传输具有更高的可靠性,SCTP的设计包括适当的拥塞控制、防止泛滥和伪装攻击、更优的实时性能和多归属性支持。
(4)SCTP最初是被设计用于在IP上传输电话,把SS7(Signaling System No. 7,七号信令系统)信令网络的一些可靠特性引入IP。IETF的这方面的工作称为信令传输SIGTRAN。与此期间,也提出了这个协议的其他一些用途。
SCTP提供如下服务:
确认用户数据的无错误和无复制传输;
数据分段以符合发现路径最大传输单元的大小;
在多数据流中用户信息的有序发送,带有一个选项,用户信息可以按到达顺序发送;
选择性的将多个用户信息绑定到单个SCTP包;
通过关联的一个终端或两个终端多重宿主支持来为网络故障规定容度。
作为一个传输层协议,SCTP兼有TCP及UDP两者的特点。
SCTP可以称为是TCP的改进协议,但它们之间仍然存在着较大的差别。
(1)首先SCTP和TCP之间的最大区别是SCTP的连接可以是多宿主
连接的,TCP则一般是单地址连接的。在进行SCTP建立连接时,
双方均可声明若干IP地址(IPv4,IPv6或主机名)通知对方本端所
有的地址。若当前连接失效,则可切换到另一个地址,而不需要重
新建立连接。
(2)其次SCTP是基于消息流,而TCP则是基于字节流。所谓基于
消息流,是指发送数据和应答数据的最小单位是消息包(chunk)。
一个SCTP连接(Association)同时可以支持多个流(stream),
每个流包含一系列用户所需的消息数据(chunk)。而TCP则只能支
持一个流。
(3)在网络安全方面,SCTP增加了防止恶意攻击的措施。不同于
TCP连接采用的三次握手机制,SCTP连接采用四次握手机制,
有效的防止了类似于SYN Flooding的防范拒绝服务攻击。
SCTP主要的贡献是对多重联外线路的支持,一个端点可以由多于一
个IP地址组成,使得传输可在主机间或网卡间做到透明的网络容错
备援。
SCTP 功能示意图
1、偶联的建立和关闭
偶联的建立是由 SCTP 用户(如M2UA、M3UA 等)发起请求来启动的。而且建立 过程相对于TCP 连接而言比较复杂,是个“四次握手”过程,并用到了“COOKIE” 的机制。
COOKIE 是一个含有端点初始信息和加密信息的数据块,通信的双方在关 联建立时需要处理并交换,从而增加协议的安全性,防止拒绝服务和伪装等潜在的 攻击。 SCTP 提供了对激活偶联的正常的关闭程序,它必须根据SCTP 用户的请求来执行, 当然SCTP 也提供一种非正常(即中止)程序,中止程序的执行既可以根据SCTP 用户的请求来启动,也可以由SCTP 协议检查出差错来中止。 SCTP 不支持半打开状态(即一端可以在另一端结束后继续发送数据)。无论是哪 个端点执行了关闭程序,偶联的两端都应停止接受从SCTP 用户发来请求原语。
2、流内消息顺序递交
SCTP 提供数据报的顺序传递,顺序传递的数据报必须放在一个“流”中传递。流 是顺序传递的基石。 通过流,SCTP 将数据的确认和传输的有序递交分成两种不同机制。SCTP 使用TSN 机制实现了数据的确认传输,使用流号和SSN(流顺序号)则实现数据的有序递交。 当SCTP 收到数据的SSN 连续的时候,SCTP 就可以将数据向SCTP 用户递交, 而不用等到数据的TSN 号连续以后才向SCTP 用户递交。
当一个流被闭塞时,期望的下一个连续的SCTP 用户消息可以从另外的流上进行递 交。 SCTP 也提供非顺序递交的业务,接收到的用户消息可以使用这种方式立即递交到 SCTP 用户,而不需要保证其接收顺序。
3、用户数据分段
SCTP 通过对传送通路上最大PMTU(Path Maximum TransmissiON Unit)的检测, 实现在SCTP 层将超大用户数据分片打包,避免在IP 层的多次分片、重组,可以减 少IP 层的数据负担。
在发送端,SCTP 可以对大的用户数据报进行分片以确保SCTP 数据报传递到 低层时适合通路MTU(Maximum Transmission Unit)。
在接收端,SCTP 将分片重组为完整的用户数据报,然后传递给SCTP 用户。
4、 证实和避免拥塞
证实和重传是协议保证传输可靠性的策略,SCTP 也一样。证实机制是SCTP 保证 传输可靠性的基石。避免拥塞沿袭了TCP 的窗口机制,进行合适的流量控制。
SCTP 在将数据(数据分片或未分片的用户数据报)发送给底层之前顺序地为 之分配一个发送顺序号(TSN)。
TSN 和SSN(流顺序号)是相互独立的,TSN 用于保证传输的可靠性,SSN 用于保证流内消息的顺序传递。
TSN 和SSN 在功能上使可靠传递和顺序传递分开。接收端证实所有收到的 TSNs,即使其中有些尚未收到。
包重发功能负责 TSN 的证实,还负责拥塞消除。
5、 消息块绑定
如果长度很短的用户数据被带上很大一个 SCTP 消息头,其传递效率会很低,因此, SCTP 将几个用户数据绑定在一个SCTP 报文里面传输,以提高带宽的利用率。
SCTP 分组由公共分组头和一个/多个信息块组成,信息块可以是用户数据,也 可以是SCTP 控制信息。
SCTP 用户能够可选地使用捆绑功能,决定是否将多个用户数据报捆绑在一个 SCTP 分组中。
为提高效率,拥塞/重发时,捆绑功能可能仍被执行,即使用户已经禁止捆绑。
6 、分组的有效性
分组的有效性是 SCTP 提供无差错传输的基石。SCTP 分组的公共分组头包含一个 验证标签(VerificATIon Tag)和一个可选的32 位校验码(Checksum)。 验证标签的值由偶联两端在偶联启动时选择。如果收到的分组中如果没有期望的验 证标签值,接收端将丢弃这个分组,以阻止攻击和失效的SCTP 分组。 校验码由 SCTP 分组的发送方设置,以提供附加的保护,用来避免由网络造成的数 据差错。接收端将丢弃包含无效校验码的SCTP 分组。
7、 通路管理
发送端的 SCTP 用户能够使用一组传送地址作为SCTP 分组的目的地。SCTP 管理 功能可以根据SCTP 用户的指令和当前合格的目的地集合的可达性状态,为每个发 送的SCTP 分组选择一个目的地传送地址。当其他分组业务量不能完全表明可达性 时,通路管理功能可以通过心跳消息来监视到某个目的地地址的可达性,并当任何 对端传送地址的可达性发生变化时,向SCTP 用户提供指示。通路功能也用来在偶 联建立时,向对端报告合格的本端传送地址集合,并把从对端返回的传送地址报告 给本地的SCTP 用户。 在偶联建立时,为每个 SCTP 端点定义一个首选通路,用来正常情况下发送SCTP 分组。
在接收端,通路管理功能在处理SCTP 分组前,用来验证入局的SCTP 分组属于的 偶联是否存在。