关于流传输协议SCTP的研究

时间:2022-10-23 10:16:47

关于流传输协议SCTP的研究

摘要:流控制传输协议(Stream Control Transmission Protocol,sctp)是一种可靠的传输协议,它在两个端点之间提供稳定、有序的数据传递服务,并且可以保护数据消息边界。与TCP和UDP不同,SCTP通过多地址主机(Multi-homing)和多流(Multi-streaming)功能提供这些收益,这两种功能均可提高可用性。

关键词:流控制传输协议;多地址;多流;关联

中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)28-0067-03

The Research of Stream Control Transport Protocol

XIONG Wei1,2

(1.Department of Computer Engineering,Chongqing University,Chongqing 400044,China;work and Information Security Center,Chongqing Institute of Communication,Chongqing 400035,China)

Abstract: SCTP(Stream Control Transport Protocol),standardized by the Internet Engineering Task Force(IETF)is a new general-purpose transport protocol which fit to transmit stream media because of it’s new advantages such as multi-stream transport, unordered deliver and so on. In this issue, we describe the design an operation of SCTP, includes the basic datagram format and the concept of Chunk, Association, Stream, etcetera.

Key words: SCTP; multi-homing; mulit-streaming; association

1 引言

随着高速网络的发展和新需求的出现,现代网络面临的核心问题是多媒体数据业务和实时通信量的传输,以及如何为这些业务提供相应的服务质量保证。基于IP的包交换网络为了支持多媒体等流式通信量采用了多种技术:如采用高性能的交换机和路由器提升网络容量、IP多播传输、允许用户预留网络容量,并为各种业务类型分配优先级以及新的运输层协议等,前三者都是网络层的功能,而运输层协议则是通过运输层通信端点之间的协作来为多媒体网络应用服务。传统的传输层协议TCP由于严格的顺序递交和确认重传带来了额外的传输流量和较大的时延,UDP又因为过于简单,缺少必要的可靠传输保证,容易导致网络拥塞甚至崩溃。流控制传输协议SCTP(Stream Control Transport Protocol),作为一种新的协议,利用其新特性在可靠服务和传输效率之间取得平衡,达到应用所期望的性能。

2 SCTP(Stream Control Transport Protocol)的基本特性

SCTP是在IP网络上使用的一种可靠的通用传输层协议。尽管SCTP协议最初是为发送电话信号而设计的(RFC 2960),但带来了一个意外的收获:它通过借鉴 UDP 的优点解决了TCP的某些局限。经过不断的研究和扩展,SCTP已经逐渐发展成为一种通用的传输层协议,并在许多网络操作系统如BSD,Linux中得到了初步实现。SCTP除了具有TCP同样的功能之外,还具有更新的设计思想和更灵活的数据包格式,能更好的扩展以满足某些应用的需求。其主要特征如下:

1) 内建多地址主机支持:SCTP中的一对连接称为关联(Association),关联两端的主机节点(Endpoint)可以有多个网络地址,从而使一个SCTP关联可以通过多条网络路径进行数据传输,见图1。

2) 保留应用层消息边界:SCTP保留上层数据信息的边界,上层数据信息称为“消息”,传输的基本单位为有意义的数据段。

3) 单个关联(Association)多流机制:SCTP允许用户在每个关联中定义子流,数据在子流内按序传输。

3 SCTP的数据包格式

SCTP提供了灵活的数据块格式,每个SCTP数据报都由一个Common Header(基本首部)和若干Chunk(数据块)组成。

图2左边显示了SCTP的基本数据报文格式。其中基本首部提供了源端口和目的端口,用于完成典型的传输层协议端口复用功能,验证标记对一个SCTP连接提供安全验证,保存着在SCTP通过握手建立连接时第一次交换的初始标签的值。在一次连接中,任何SCTP数据包若不包含这样一个标签,到达时会被接收端丢弃。校验和是对整个数据包的校验。在首部后是一系列Chunks(块)。Chunk是组成SCTP报文的基本结构,有多种类型,不同类型的块可用来传输不同的控制信息或数据;同时首部中的flags标记字段提供了额外的控制信息。丰富的Chunk类型使SCTP可以采用不同类型的Chunk实现各种传输控制机制。

4 SCTP的消息(message)和流(stream)

下面给出SCTP协议中数据的基本载体数据块的格式描述,如图3。

SCTP协议将上层数据信息称为用户消息(user message),在传输中SCTP保留上层数据信息的边界,传输的基本单位为有意义的数据段。因此SCTP称为“面向消息”的传输协议。

SCTP提出了数据流的概念,如图4所示,每个数据块中不仅有传输序号TSN,还携带了流标识SID(Stream ID)和流序号SSN(Stream Sequence Number)。用户可以在一个连接中建立多个流,每个流分配一个SID,每个流队列中的用户数据由流序号SSN表明顺序。在SCTP中引入一个连接多个流的机制解决了使用TCP传输时出现的队首阻塞问题。允许某些应用程序根据需求将逻辑上不相关的数据分离为多个流进行传输往往很有意义,如一个多媒体视频会议系统中的多路语音信号在各自的流中传输,彼此之间不会互相阻塞。

如图4所示,节点根据应用程序的要求维护不同的发送队列,当接到上层的消息后根据MTU等网络情况决定是否拆解并转化为Data Chunk进行传输。并且将会设置Data Chunk中flags字段的相应位,flags字段共三位,其中的U位为是否按序递交用户消息的标志,B,E位分别代表本Data Chunk包含一个用户消息的开始或结束,如果本数据块包含一条完整的用户消息,则BE都置为1,如包含消息中间的内容则都置为0。连接的对端收到DataChunk后根据流序号SSN和flags字段重组用户消息交给应用层。

SCTP提供按序递交和无序递交两种选择,Data Chunk中的flags字段中的U位就表明了该数据所需要的服务是按序递交或是无序递交。当采用无序递交时,SCTP就具有了类似UDP的一些特征,能够尽快的将数据发往上层,适用于一些实时应用。

实际上,通过引入流和无序递交机制,SCTP实现了严格有序传输(类似TCP),部分有序传输(部分流内无序递交)和无序传输(类似UDP)。

5 SCTP的基本传输机制

5.1 连接的建立

SCTP在传输前首先建立连接,称为一个关联,通过四次握手,两端SCTP主机交换地址信息和其他通信状态。如图5所示。

请求连接者发出INIT请求,INIT消息的接收端不必保存任何状态信息或者分配任何资源,这样就可防范SYN Flooding等DoS攻击。它在发送响应INIT的INIT-ACK消息时,采用了一种机制―“状态Cookie”,该Cookie具有发送端要建立连接所需的全部信息。

INIT和INIT-ACK都必须包含建立初始状态所需的参数:一组IP地址,初始TSN,被接收的SCTP包中必须含有的初始标签,每一端请求发出的流数目和每一端能支持接收的流数目。交换完这些消息之后,INIT的发送端以COOKIE-ECHO消息的方式发送回状态Cookie。接收端根据所接收到的COOKIE-ECHO中的状态Cookie,完整地重建自己的状态,并回送COOKIE-ACK来确认关联已建立。注意COOKIE-ECHO和COOKIE-ACK都可将用户数据消息绑定到各自的包中,可以加快数据的发送。

5.2 传输过程

在建立连接以后,接收方收到数据要发回确认,接收方维护一个累计已确认数据序号Cm-TSN(Cumulative Transport Sequence Number),定时器到期未收到确认则重传数据包,因此SCTP和TCP一样,可以提供有连接的可靠传输服务。通过对数据携带的一个传输序号TSN(Transport Sequence Number)进行选择确认(Selective ACK)。如图6。

在SCTP中,TSN保证整个关联的可靠性,而SID/SSN保证整个流的有序性,实现了在传输中将数据的可靠性与有序性独立分开。TSN类似于TCP中的确认序号,然而在TCP中,确认序号既用于确认保证可靠传输,又用于接收方排序,而在SCTP中TSN与SID/SSN各司其职。

SCTP可以在一个连接中传输多条数据流,允许应用程序根据需要传输多个性质不同的流,而接收方对每个流按其SID/SSN进行处理,互不干扰,当一个流正在等待下一个非顺序的用户消息时,其他流的发送会继续。

对于数据包丢失的发现,SCTP即使发现接收序号有缺口或顺序错乱,仍会发送后面的数据。从图6可以看出,当序号为7的数据未到达时,发送端依然进行后续包的传送。

SCTP选择确认的特点还在于SACK Chunk的设计,实际上TCP的ACK机制也能提供一定的选择确认信息,然而SCTP的SACK机制通过SACK Chunk提供了更多的数据确认信息。图7显示了SACK Chunk的格式。

如图7所示,在SCTP SACK确认块中包含了在一定的时间内尽可能多的信息,将已收到的连续数据称为Gap,通过若干包含起始和终止传输序号(TSN)的Gap字段表示那些已收到的连续数据块,通过若干Duplicate TSN字段表示每个重复收到的数据包,当对方端点接收到SACK Chunk后就可以根据这些信息做出是否重传或调整发送窗口,清空缓存等工作。

6 SCTP的多地址和多路径支持

SCTP通过多地址支持实现传输的路径冗余。当连接中至少有一个端点使用多个IP地址时,就形成了多条可能的传输路径,其中主要使用一条作为主传输路径,其他的作为冗余路径在必要时启用。具体过程如下:

通信方在发送的INIT或INIT-ACK消息中列出自己所具有的IP地址,通过一定的机制选择特定的一对地址形成的地址对(pair)作为主路径进行数据传输,其余可能的地址对作为冗余路径。

在传输的过程中定时利用Heartbeat/HeartbeatACK消息块来监测和更新主路径和冗余路径的路径状态(active或inactive)。具体操作是通过统计每条路径上的数据传输次数(包括DATA和HEARTBEAT),如果次数达到一定的上限,该路径的状态就成为inactive。可以选用另一路径用于传输,实现了网络层的容错。

在SCTP目前的研究和实现中多路径特性只用于网络容错,也就是主路径失效时启动备份路径,更进一步的考虑是利用SCTP的多址特性实现负载分担(LoadSharing)。

7 SCTP的可扩展性

作为一个仍在发展和改进的协议,SCTP的设计者从设计之初就充分考虑了协议的可扩展性。下面简单分析SCTP的一个具体扩展:确认序号移动通告。

多媒体数据的特点是可以允许少量数据的丢失,对重传引入的延时和效率问题十分敏感。例如在流媒体视频传输中,迟到的重传数据往往已经无效,重传就没有必要。为在可靠性和实时性之间取得平衡,SCTP引入了一种新的Chunk类型(见图8),称为“确认序号移动通告”(Forward Cumulative TSN chunk)。

在采用PR-SCTP的系统中,发送方在接收方请求重传时将根据一定的策略,决定是否有必要重传该数据,如果发送方认为数据不太重要或已经过时,则发送确认序号移动通告Fwd-CmTSN,指示接收方修改累计确认序号Cm-TSN,接收方在收到确认序号移动通告时则会向前增大Cm-ACK的值,放弃该数据,不再请求重传而继续后续数据的传输。由于STCP中TSN只负责重传保证可靠传输,为了通知接收方哪些数据已放弃,确认序号移动通告中还可以携带这些放弃数据的流号和流序号。

确认序号移动通告保留了确认重传机制的同时,“跳过”某些(不太重要的)数据,实现了部分可靠的传输,为某些不需要完全可靠传输的应用程序提供了很大的灵活性。

8 结束语

总之,作为一种新的传输层协议,SCTP和传统协议相比有更多的优点。从2000年10月份才成为RFC规范以后,开始进入所有的主流操作系统,包括 GNU/Linux、BSD和Solaris。在Microsoft?R Windows?R 操作系统上也有第三方的商业包可以使用。在获得高可用性的同时,应用程序也已经开始使用SCTP作为自己的主要传输机制。诸如FTP和HTTP之类的传统应用程序已经在SCTP的特性基础上进行了构建。其他一些协议也正在开始使用SCTP,例如会话初始化协议(Session Initiation Protocol,SIP)和通用通道信号系统7(SS7)。在商业领域中,也可以在Cisco的IOS中找到SCTP的影子。

随着SCTP被吸纳到2.6版本的Linux内核中,现在可以构建并部署高可用性、高可靠性的网络应用程序。作为一种基于IP的协议,SCTP不但可以无缝地替换TCP和UDP,而且扩展了很多新服务,并且对安全性也有了很大的提高。从发展的趋势来看,SCTP它提供了更加高效和适用的传输机制,有重要的研究意义和广阔的发展前景。

参考文献:

[1] Stewart R.Stream Control Transmission Protocol[Z].RFC 2960,2000.

[2] Stewart R,Xie QB.Stream Control Transmission Protocol[Z].A Reference Guide.

上一篇:超媒体学习中信息的组织和获取 下一篇:M1750 ADA生成的ALI信息剖析