基金项目:国家自然科学基金项目(90204003);国家“863计划”项目(2001AA112071)
流控制传输协议(SCTP)是传输层协议,和目前广泛应用的传输控制协议(TCP)、数据报协议(UDP)处于同一层次,使用下层网络层的无连接包转发服务,并向上层应用层提供端到端的传输服务[1]。SCTP于2000年10月成为IETF的标准(即RFC2960),现在正受到越来越多的关注和广泛深入的研究[2]。
SCTP最先用于IP网中传输PSTN信令,在成为标准之后,IETF致力于把它作为一种通用的协议推广。因为SCTP能实现TCP及其各种主流改进版本的所有功能,并且弥补了TCP、UDP的一些不足,同时还具备一些更适宜数据健壮传输的新特点,所以正在获得越来越广泛的应用。同时,SCTP协议本身也在不断完善和扩充[3],其作为一种通用传输协议的优点正在越来越多地显现出来。
1 SCTP的特点
和TCP类似,SCTP是面向连接、端到端、全双工、带有流量和拥塞控制的可靠传输协议。SCTP的连接称为关联。SCTP的关联通过4次握手建立。相对于TCP的3次握手建立连接,SCTP的关联能够抵御拒绝服务(DoS)攻击,从而提高了安全性。数据只有在关联建立之后与关联关闭之前才可发送。SCTP的关联通过3次握手关闭,不支持类似TCP的半关闭连接。也就是在任何一方关闭关联后,对方即不再发送数据。
1.1 面向消息的传输
SCTP是一种面向消息的传输协议,从上层应用传递下来的数据以消息的形式传输。SCTP提供消息的定界功能。在接收端,数据以消息的形式递交。为便于传输,SCTP提供消息的拆分和组装,以及消息的捆绑传输功能。
SCTP的数据传输基本单位是块。每个SCTP包包括一个SCTP公共头部、一个或多个块。块有两种基本类型:控制块和数据块。控制块用于SCTP的连接控制,包括连接的建立、关闭、传输路径的维护等;数据块传送应用层的用户数据。上层用户的每一个消息均被封装在一个数据块中,如果消息长度大于传输路径的最大传输单元(MTU),消息将被拆分成多个数据块传输,在接收端再组装起来向上层提交,这样每一个SCTP包封装一个数据块。如果消息长度较小,在1个MTU大小的限制下,在同一个SCTP包里可以捆绑多个消息,也即多个数据块共用一个公共头部,从而提高传输效率。数据块可以和控制块封装在同一个SCTP包里传输,这种捆绑受MTU大小的限制。
RFC2960定义了13种块类型,包括1种数据块和12种控制块。为实现新功能扩展,可以定义新的块类型。块包括块参数,用于协助完成块功能。块和块参数都是采用类型-长度-值(TLV)的结构定义的。用这种结构定义新的块类型及块参数类型来实现SCTP新功能非常方便。SCTP包括较完善的容错机制,如果通信双方的某一方不支持对端的某项扩展功能,可以通过容错和报错机制保证关联的健壮性。体现了SCTP的良好可扩展性。
1.2 多穴主机
SCTP的一个主要特点是支持多穴主机。SCTP关联的每个端点都可以拥有多个网络层地址。SCTP可以支持不同的网络层协议,为描述方便,本文以IP作为网络层协议来说明,即每个SCTP端点可以拥有多个IP地址用于数据传输。
对多穴主机的支持是为了在网络级提高容错能力。如果接收端是多穴主机,那么对于发送端来说每一个接收端的IP地址代表着一条通往对端的路径,这样发送端可以选择任一条路径来发送数据。SCTP规定任何时间都有一条路径作为首选路径来发送数据,其他路径作为备份路径。如果首选路径因接口故障或者网络拥塞等原因而失效,SCTP可以自动切换到另外一条路径来发送,避免单点失效,从而提高整个关联的容错能力。多穴主机之间的SCTP关联如图1所示。主机A到主机B有两条路径,A是多穴主机,这里只考虑不同的IP地址对应不同的网络接口的情况,A有两个网络接口,选择哪个接口来发送数据是A自身的路由策略问题(源地址选择问题)。
1.3 多流
SCTP的另一主要特点是多流。SCTP消息在不同的流内发送,这也是流传输控制协议名称的由来。从发送端到接收端可以有多个流,在同一流内发送的消息有序,而不同流之间的消息无序,因此不同流之间的消息传输是相对独立的。在某一个流内由于数据传输失败而引起的阻塞不会影响其他流的消息递交。多流特性可以帮助解决TCP中的队头阻塞(HOL)问题。因为TCP传输是按字节严格有序的,先行传送的字节如果丢失或损坏,即使后续的字节正确地被接收到也不能向上层递交,必须在接收端缓冲起来,直到先行字节由于重传而全部正确接收到后才可以提交,并且释放缓冲区。
图2描述了一个用3个流发送消息的SCTP实例。发送端有3个出流,相应的接收端就有3个入流。图2中给出了发送从1到9的9个消息实例。其中消息1、2、3在同一个流,4、5、6在同一个流,7、8、9在同一个流,分别在各自流内有序。由于消息1没有正确接收,造成消息2、3不能向上层协议(ULP)提交。然而从4到9的消息由于在不同的流中,则可以提交给ULP。这种流机制提供了无序递交功能,提高了传输效率。
此外,SCTP还定义了无序消息。如果消息带有无序标志,则不论它在哪个流中(在具体实现中,数据块中的流号不被解析),只要被正确接收,都提交给ULP,从而实现和流无关的无序递交。
1.4 流量、拥塞和错误的控制
SCTP仍然采用类似TCP的流量控制和拥塞控制机制,但又有所增强。整个传输分为慢启动阶段和拥塞避免阶段。与TCP不同的是,SCTP的拥塞窗口初始值可以是2个MTU,可以比TCP获得更快的窗口增长。SCTP的拥塞控制采用了选择确认(SACK)快速重传和快速恢复机制,是TCP各种主流改进机制的集成。但是由于SCTP采用了块结构和控制块机制,可以比TCP更大地提升传输性能。例如SCTP在移动通信的切换中表现得比TCP SACK更优越[4]。 由于SCTP有多个通往对端的路径,在发送端对每一个路径都有一套拥塞控制参数和控制用的数据结构。这类似于有多个通往对端的TCP连接,SCTP为多条路径的流量控制和拥塞控制提供统一的管理机制。消息可以在不同的路径上传输,流管理和路径管理是正交的,即相对独立。
每个路径有一个错误计数器,当某一路径上的错误达到一个门限时,该路径将会被标记为不活动的(Inactive),SCTP把传输转移到另一条路径上进行。同时SCTP对整个关联设置一个错误计数器,每个路径上的错误计数时,整个关联的错误计数也要增加,只要对端返回确认,则关联错误计数器清零(不管是对哪条路径返回的确认)。如果关联错误计数器达到一个门限值,则整个关联被非正常关闭。由此可见,多路径带来比TCP更好的网络级容错机制。
2 SCTP、TCP、UDP的特点和适用性比较
表1给出了SCTP、TCP、UDP这3种协议的特点比较[5]。TCP用于对数据的可靠传输,但是其HOL问题限制了数据的递交;UDP提供非可靠数据传输,对TCP不友好,容易造成网络拥塞;SCTP的功能特点规定了它的适用性:适于无序和有序消息的可靠传输,同时通过对多穴主机的支持实现网络级的容错[6]。
SCTP最先用于传送信令,其多流特性对电话信令的传输尤其适合,因为不是所有的信令消息都需要严格有序。只有那些与相同资源相关的信令(如同一呼叫,同一信道)才需要有序,而且由于其网络级容错特点(类似于提供迂回路由),可以保证信令传输的更高可靠性。IETF正在研究会话启动协议(SIP)在SCTP上的传输。
SCTP本身的包结构有一定的头开销,在效率最高的情况下,也就是每个SCTP包只包含一个数据块的情况下,其头开销为:公共头部12个字节,数据头部为16个字节。如果SCTP包包含n 个数据块,不包含控制块,则其头部开销为:12 B+n×16 B (n≥1)。
使用SCTP的通信系统开销不一定比使用TCP传输协议的通信系统大,因为SCTP有消息定界功能,而TCP没有消息定界功能,这部分开销往往加在TCP的应用层上。
3 SCTP的研究方向和应用进展
目前IETF致力于把SCTP作为一种通用的传输协议。对SCTP本身的研究集中在对其功能完善和扩展上,主要是从两个本质特点入手:多路径和多流。同时,对SCTP应用的研究主要集中在两个方面:在移动网络中的应用和对多媒体的传输。
3.1 SCTP的扩展
3.1.1 动态地址配置扩展和移动SCTP
SCTP的一个本质特点是多路径,也即支持多穴主机。通信双方主机在关联建立之初交换彼此的IP地址集,在整个关联生存期间使用这个固定的地址集。IETF的SCTP动态地址配置扩展(Addip)[7]允许端点在关联建立之后改变自己的IP地址并通知对端。Addip有3个功能:增删IP地址并通知对端,设置对端的首选地址,传递应用层参数。Addip通过定义两个新的控制块类型、6种参数类型以及5种错误原因来实现。Addip的动态地址配置功能赋予了SCTP更大的灵活性,它允许主机热插拔网络接口卡,可以通知对端自己最希望在哪个接口进行通信。
移动SCTP[8]是SCTP增强的移动功能,它的功能直接建立在Addip功能的基础上,在没有移动IP支持的情况下实现移动性,并且和移动IP兼容。在移动环境中,移动主机移动到新的小区时会被分配一个临时地址,这个地址在移动IP中称为转交地址。移动SCTP主机可以通过Addip功能通知对端主机自己有了新的地址,原来的地址不可用。这样可以在新的地址上保持关联。
Addip和移动SCTP都是IETF的草案,均处于进一步研究过程中。
3.1.2 SCTP的部分可靠性
TCP和SCTP保证了数据传输的完全可靠性,UDP不保证数据传输的可靠性。SCTP的部分可靠性扩展(PRSCTP)标准弥补了两者之间的空白[9],为数据传输提供用户规定的可靠性。因为SCTP支持相对独立的多流传输,这就为给每个流提供不同的传输质量提供了可能。PRSCTP允许为每个流定义重传次数来保证其不同级别的可靠性。在可靠性较低的流内,由于强制向前推移累积确认点,减少了重传次数,从而提高了SCTP的实时性能。
3.2 SCTP的应用
作为一种通用协议,SCTP可以承载文件传输协议(FTP)、超文本传输协议(HTTP)等TCP主流应用。FTP分控制连接和数据连接,在SCTP中用不同的流来分别传送控制信息和数据,有比TCP更明显的优势。对HTTP的传输上,由于Web页面中包含不同的对象,而这些对象往往没有次序关系,因此尤其适合多流的传输。如果Web服务器是多穴主机,那么它的Web服务由于SCTP的传输会更可靠。
SCTP在移动环境下的应用包括在卫星网络和自组网(Ad Hoc)中的应用。波音公司的研究人员分别考察了SCTP在传输大文件和小文件时与TCP的性能比较,得出了在某些情况下SCTP性能较优,而有些情况下性能较差的结论。纽约州立大学的研究人员研究了SCTP在Ad Hoc网上的应用,发现SCTP同样会遇到TCP在Ad Hoc上的问题,如隐暴终端问题。
PRSCTP由于提供不同级别的可靠性,特别适于多媒体的传输,例如MPEG-4。控制信息可以放在可靠性最高的流中传输,而媒体信息可以降低其可靠性以保证其实时性。
目前SCTP存在的问题是缺乏杀手锏级应用。所有这些应用都可以采用已有的TCP或UDP,虽然SCTP可以提供更优的传输,但是存在和TCP/UDP互通的问题。互通问题虽然不是技术难点,但在TCP/UDP已经广泛部署的现状下,影响了SCTP的推行。
3.3 SCTP功能的改进
SCTP的功能改进集中在多路径和多流上。SCTP规定在重传时要选择不同的路径,而研究表明重传如果选择在原来的路径,也就是当前路径上,可以获得更好的吞吐量。在多路径所提供的故障倒换和恢复中,目前的倒换机制比较保守,首选路径出错达到一定门限就发生倒换。一种自适应的两阶段倒换机制可以提高对路径状况的适应性,减少必要的倒换,提高SCTP性能[10]。此外还有一些SCTP标准本身的缺陷所带来的问题,比如路径切换中窗口的不合理增长和多余的快速重传问题。这些已经有了相应的解决方案,可望在下一个SCTP版本中得到实施。另外一个SCTP的多路径研究热点是多路径同时传输(CMT)。这需要在每个路径上同时执行拥塞控制机制,相关的问题是传输层的负荷分担和负载均衡。
除了承载不同的应用,针对多流的研究主要是对每个流所传送的QoS的研究。SCTP可以赋予每个流不同的优先级,在网络出现拥塞等问题时对某些流作优先调度。SCTP流和优先级的对应问题在进一步研究之中。
4 结论
SCTP是一种新型的传输协议,它有两个主要特点:多路径和多流;它是面向消息的传输协议,提供消息的定界功能。SCTP还提供类似TCP增强的流量控制和拥塞控制功能以及更安全的关联建立。通过对SCTP特点的分析,可以得出以下结论:SCTP不仅适用于信令的传输,还是一种非常有前景的通用协议,可望在下一代互联网和移动互联网中得到进一步发展和应用。
5 参考文献
[1] IETF RFC3286. An Introduction to the Stream Control Transmission Protocol (SCTP) [S]. 2002.
[2] IETF RFC2960. Stream Control Transmission Protocol [S]. 2000.
[3] Stewart R. Stream Control Transmission Protocol (SCTP) Implementer’s Guide [S]. IETF Internet Draft, work in progress, 2003.
[4] Fu Shaojian, Mohammed Atiquzzaman. Improving End-to-End Throughput of Mobile IP Using SCTP [C]. High Performance Switching and Routing’2003, 2003:171—176.
[5] Armando L, Caro J. SCTP: A Proposed Standard for Robust Internet Data Transport [J]. IEEE Computer, 2003,11: 56—63.
[6] IETF RFC3257. Stream Control Transmission Protocol Applicability Statement [S]. 2002.
[7] Stewart R. Stream Control Transmission Protocol (SCTP) Dynamic Address Reconfiguration [S]. IETF Internet Draft, work in progress, 2004.
[8] Riegel M, Tuexen M. Mobile SCTP [S]. IETF Internet Draft, work in progress. 2003.
[9] IETF RFC3758. Stream Control Transmission Protocol (SCTP) Partial Reliability Extension [S]. 2004.
[10] Armando L, Caro J. Using SCTP Multihoming for Fault Tolerance and Load Balancing [J]. ACM SIGCOMM Computer Communications Review, 2002,32(3):23.
收稿日期:2004-02-16
[摘要] 文章介绍了流控制传输协议(SCTP)的主要特点:支持多穴主机,支持消息的无序递交,提供端到端的可靠性,提供面向消息的传输,提供相对TCP增强的流量控制和拥塞控制,提供更好的安全性和可扩展性;分析了SCTP的主要应用,强调作为一种通用的传输层协议SCTP是今后发展的方向;综合考察了当前SCTP的研究进展,并给出了相关结论,认为SCTP是一种功能强大的传输层协议。
[关键词] 流控制传输协议;传输层协议;多流
[Abstract] The Stream Control Transmission Protocol (SCTP) features in supporting multihoming, multistreaming, end-to-end reliability, message-oriented transmission, enhanced flow control and congestion control, higher security and better scalability compared with the Transmission Control Protocol (TCP). According to the analysis of SCTP’s main applications, it is emphasized that SCTP is expected to become a general transport layer protocol. It can be concluded from current study on SCTP that SCTP is a powerful and promising transport layer protocol.
[Keywords] SCTP; transport layer protocol; multistreaming