SCTP流控制传输协议

 

1.引言

过去的20年内,作为一种可靠的数据传输方式,TCP提供了许多应用服务,但随着IP网的多业务化,尤其是VoIP的发展,TCP出现了很多局限性,例如对于VoIP信令及异步基于事务应用的处理。

因此,IEFT的信令传输工作组(SIGTRAN)提出了一种面向多媒体通信的流控制传输协议(SCTP),用于在IP网络上传输PSTN信令消息,即通常所说的SS7overIP。目前,IEFT将SCTP传输层协议作为主要研究目的,与TCP和UDP共筑于IP层之上。

同TCP一样,SCTP提供面向连接的、点到点的可靠传输,它继承了TCP强大的拥塞控制、数据包丢失发现等功能,任何在TCP上运行的应用都可被移至SCTP上运行。

不同于TCP的是,SCTP提供了许多对于信令传输很重要的功能,同时,对于其他一些对性能和可靠性有额外需要的应用,它能提供传输优势来满足这些需要。SCTP和TCP最大的区别在于SCTP对多宿(multihoming)和部分有序(partialordering)的支持。SCTP的多宿使得每个端点可被多个传输地址访问到,选择不同传输地址会导致两个端点间不同的数据路径,理想情况是在每一条路径都建立一条独立的拥塞控制。所以,SCTP的多主机拥塞控制仍需改进。

2.STCP协议简介

串流控制传输协议(StreamControlTransmissionProtocol或简写SCTP)是在2000年由IETF的SIGTRAN工作组定义的一个传输层协议。RFC4960详细地定义了SCTP,介绍性的文档是RFC3286。

作为一个传输层协议,SCTP可以理解为和TCP及UDP相类似的。它提供的服务有点像TCP,又同时将UDP的一些优点相结合。是一种提供了可靠、高效、有序的数据传输协议。相比之下TCP是面向字节的,而SCTP是针对成帧的消息。

SCTP主要的贡献是对多重联外线路的支持,一个端点可以由多于一个IP地址组成,使得传输可在主机间或网卡间做到透明的网络容错备援。

SCTP最初是被设计用于在IP上传输电话协议(SS7),把SS7信令网络的一些可靠特性引入IP。IETF的这方面的工作称为信令传输SIGTRAN。

3.SCTP的特点

SCTP处于SCTP用户应用层与IP网络层之间,它运用“关联”(association)这个术语定义交换信息的两个对等SCTP用户间的协议状态。SCTP也是面向连接的,但在概念上,

SCTP“关联”比TCP连接更为广泛:TCP的连接只有一个源地址和一个目的地址,SCTP提供一种方式使得每个SCTP端点能为另一个对等端点提供一组传输地址,即传输地址=一组IP地址+端口号。

在继承TCP特点的基础上,SCTP提供了一些额外的功能:

1) 在多个“流”(stream)中实现用户数据的有序发送

“流”在TCP中指一系列的字节,而在SCTP中是指发送到上层协议的一定系列的用户消息,这些消息的顺序与流内其他消息相关。SCTP用户在建立关联时,可以规定关联支持的流的数目。这个数目是与源端商定的,用户消息与流数目关联。在链路中,SCTP为每个送到对等端的消息分配一个流序号。在接收端,SCTP确保在给定流中消息按顺序发送。同时,当一个流正在等待下一个非顺序的用户消息时,其他流的发送会继续。

2) 根据已发现的路径MTU(最大传输单元)大小进行用户数据分片

为了确保发送到下层的SCTP数据包与路径MTU一致,SCTP对用户消息分片。在接收端,分片被重组后传给上层SCTP用户。

3) 选择性确认(SACK)和拥塞控制

选择性确认用于数据包丢失发现,TCP中确认序号返回的是发送方已成功收到数据字节序号(不包含确认序号所指的字节),而SCTP反馈给发送端的是丢失的并且要求重传的消息序号。

SCTP运用了TCP中的拥塞控制技术,包括慢启动,拥塞避免和快速重传。因此,当和TCP应用共存时,SCTP应用可接收属于SCTP的网络资源部分。

4) 块(chunk)绑定

即多个用户消息可选择地绑定到一个SCTP包上,通过将消息放到一个或多个SCTP数据结构——“块”中,SCTP保留了应用程序的消息框架边界。不同类型的块可绑定到一个SCTP包中,但是控制块必须放在任何一个数据块之前。

5) 路径管理

SCTP路径管理功能主要负责从远端提供的一组传输地址中选择目的传输地址,它根据两个方面来选择目的地址:SCTP用户指示和当前可达的合格目的地。当其他流控制不能提供可达性信息时,路径管理功能定时地扫描链路的可达性,并向SCTP报告远端传输地址所发生的变化。SCTP路径管理功能模块同时还负责在建立链路时,向远端报告可用的本地地址,并把远端返回的传输地址告诉SCTP用户。

6) 支持多宿

当SCTP传送数据包给目的IP地址时,如果此IP地址是不可达的,SCTP可以将消息重路由给一个交替的IP地址。这样,在关联的一端甚至两端,可容忍网络级错误。

7) 防范拒绝服务(DoS)攻击

DoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。SYNFlooding攻击是DoS攻击的一种实例,是目前效果最好的一种黑客攻击方式。为了抵抗SYNFlooding对目标主机攻击,SCTP在关联初始化阶段实施了一种安全的“Cookie”机制。

8) 支持多种传输模式

严格有序传输(像TCP),部分有序传输(像per-stream)和无序传输(像UDP)。

4. SCTP包结构

SCTP包的结构,一个数据包首部可跟一个或多个可变长的块。块采用“类型—长度—值”(TLV)的格式。源端口、目的端口、校验码的意义同TCP中的意义相似。确认标签保存着在SCTP握手中第一次交换的初始标签的值。在关联中,任何SCTP数据包若不包含这样一个标签,当到达时会被接收端丢弃。

在每个块中,TLV包括块类型、传输处理标记、块长度。不同的块类型可用来传输控制信息或数据。

传输序列号(TSN)和流序列号(SSN)是两种不同的序列号,TSN保证整个关联的可靠性,而SSN保证整个流的有序性,这样,在传输中,将数据的可靠性与有序性独立分开。

5. SCTP相关术语

1) 传送地址

传送地址由IP地址、传输层协议类型和传输层端口号定义。由于SCTP在IP上传输,所以一个SCTP传送地址由一个IP地址加一个SCTP端口号决定。SCTP端口号就是SCTP用来识别同一地址上的用户,和TCP端口号是一个概念。比如IP地址10.105.28.92和SCTP端口号1024标识了一个传送地址,而10.105.28.93和1024则标识了另外一个传送地址,同样,10.105.28.92和端口号1023也标识了一个不同的传送地址。

2) 主机和端点

主机(HoST)主机配有一个或多个IP地址,是一个典型的物理实体。

端点(SCTPEndpoint)端点是SCTP的基本逻辑概念,是数据报的逻辑发送者和接收者,是一个典型的逻辑实体。

一个传送地址(IP地址+SCTP端口号)唯一标识一个端点。一个端点可以由多个传送地址进行定义,但对于同一个目的端点而言,这些传送地址中的IP地址可以配置成多个,但必须使用相同的SCTP端口。

3) 偶联和流

偶联(AssociATION)偶联就是两个SCTP端点通过SCTP协议规定的4步握手机制建立起来的进行数据传递的逻辑联系或者通道。SCTP协议规定在任何时刻两个端点之间能且仅能建立一个偶联。由于偶联由两个端点的传送地址来定义,所以通过数据配置本地IP地址、本地SCTP端口号、对端IP地址、对端SCTP端口号等四个参数,可以唯一标识一个SCTP偶联。正因为如此,在GTSOFTX3000中,偶联可以被看成是一条M2UA链路或M3UA链路。

流(Stream)流是SCTP协议的一个特色术语。SCTP偶联中的流用来指示需要按顺序递交到高层协议的用户消息的序列,在同一个流中的消息需要按照其顺序进行递交。严格地说,“流”就是一个SCTP偶联中,从一个端点到另一个端点的单向逻辑通道。一个偶联是由多个单向的流组成的。各个流之间相对独立,使用流ID进行标识,每个流可以单独发送数据而不受其他流的影响。

4) 通路(Path)和首选通路(PrimaryPath)

通路(Path)通路是一个端点将SCTP分组发送到对端端点特定目的传送地址的路由。如果分组发送到对端端点不同的目的传送地址时,不需要配置单独的通路。

首选通路(PrimaryPath)首选通路是在默认情况下,目的地址、源地址在SCTP分组中发到对端端点的通路。

如果可以使用多个目的地地址作为到一个端点的目的地址,则这个SCTP端点为多归属。如果发出SCTP分组的端点属于多归属节点时,如果定义了目的地址、源地址,能够更好控制响应数据块返回的通路和数据包被发送的接口。一个SCTP偶联的两个SCTP端点都可以配置多个IP地址,这样一个偶联的两个端点之间具有多条通路,这就是SCTP偶联的多地址性。SCTP偶联的多地址性是SCTP与TCP最大的不同。

6. SCTP功能

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(PathMaximumTransmissiONUnit)的检测,实现在SCTP层将超大用户数据分片打包,避免在IP层的多次分片、重组,可以减少IP层的数据负担。

在发送端,SCTP可以对大的用户数据报进行分片以确保SCTP数据报传递到低层时适合通路MTU(MaximumTransmissionUnit)。

在接收端,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分组的公共分组头包含一个验证标签(VerificATIonTag)和一个可选的32位校验码(Checksum)。验证标签的值由偶联两端在偶联启动时选择。如果收到的分组中如果没有期望的验证标签值,接收端将丢弃这个分组,以阻止攻击和失效的SCTP分组。校验码由SCTP分组的发送方设置,以提供附加的保护,用来避免由网络造成的数据差错。接收端将丢弃包含无效校验码的SCTP分组。

7) 通路管理

发送端的SCTP用户能够使用一组传送地址作为SCTP分组的目的地。SCTP管理功能可以根据SCTP用户的指令和当前合格的目的地集合的可达性状态,为每个发送的SCTP分组选择一个目的地传送地址。当其他分组业务量不能完全表明可达性时,通路管理功能可以通过心跳消息来监视到某个目的地地址的可达性,并当任何对端传送地址的可达性发生变化时,向SCTP用户提供指示。通路功能也用来在偶联建立时,向对端报告合格的本端传送地址集合,并把从对端返回的传送地址报告给本地的SCTP用户。在偶联建立时,为每个SCTP端点定义一个首选通路,用来正常情况下发送SCTP分组。

在接收端,通路管理功能在处理SCTP分组前,用来验证入局的SCTP分组属于的偶联是否存在。

7. SCTP数据传输

1) SCTP四路握手及抵抗SYNFlooding攻击的原理

一个SCTP关联定义为:[主机A的一组IP地址]+[主机A的端口]+[主机B的一组IP地址]+[主机B的端口]。因此,每一端对应组中的任何一个IP地址都可作为相应的源/目的地址来标示本次关联,通过四路握手,两端SCTP主机交换通信状态。

SYNFlooding利用了TCP/IP的固有漏洞,面向连接的TCP三次握手是SYNFlooding存在的基础。SYNFlooding攻击的原理是:恶意的攻击者大量向服务器发送SYN报文,服务器在发出SYN+ACK应答报文后无法收到客户端的ACK报文(第三次握手无法完成),服务器端将为维护一个非常大的半连接列表而消耗非常多的CPU时间和内存资源,还要不断对这个列表中的IP进行SYN+ACK的重试。服务器端将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应。

而在一次SCTP四路握手中,INIT消息的接收端不必保存任何状态信息或者分配任何资源,这样就可防范SYNFlooding等DoS攻击。它在发送INIT-ACK消息时,采用了一种机制——“状态Cookie”,该Cookie具有发送端要建立自己状态所需的全部信息。

SCTP产生一个状态Cookie的过程如下:

1. 使用收到的INIT和发出的INIT-ACK块中的信息创建一个关联的TCB(传输控制块)。

2. 在TCB中,将当前日期设为创建日期,将协议参数“有效Cookie时间”设为生存期间。

3. 根据TCB,收集重建TCB所需的最小信息子集,将该子集和密钥产生一个MAC(信息认证编码)。

4. 结合上述最小信息子集和MAC产生状态Cookie。

5. 在发送完INITACK(包含状态Cookie参数)后,发送方必须删除TCB以及任何与新关联有关的本地资源。

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

由此可见,采用以上这种方式,即使接收再多的INIT消息,接收端也没有任何资源的消耗:它既不分配任何系统资源,也不保存此次新关联的状态,它只是把相应重建状态所用的状态Cookie作为参数,包含在每一个回送的INIT-ACK消息中,最后该状态Cookie会被COOKIE-ECHO消息发送回来。

2) SCTP数据交换

在两个SCTP主机间的正常数据交换。SCTP主机发送SACK块,用来确认每一个收到的SCTP包。因为SACK能完整地描述接收端的状态,因此,依据SACK,发送端能做出重传判决。SCTP支持类似于TCP中的快速重传和time-out重传算法。

对于数据包丢失发现,SCTP和TCP采用截然不同的机制:当TCP发现接收序号有缺口时,会等到该缺口被填上后,才发送序列号高于丢失数据包的数据。然而,SCTP即使发现接收序号有缺口或顺序错乱,仍会发送后面的数据。

3) SCTP关闭关联

作为面向连接的传输协议,SCTP也运用三路握手来关闭一个关联,但与TCP有一点不同:一个TCP终端在“关联关闭”的过程中能够保持连接开启,并从对端接收新的数据,而SCTP不支持TCP的这种“半关闭”状态。

1.主机A发出“关闭”(SHUTDOWN)块来终止与主机B的关联,主机A进入“SHUTDOWN-PENDING”状态,对应的动作是:不再接受上层应用的数据,只发送队列中剩余的数据,进入“SHUTDOWN-SENT”状态。

2.主机B一旦接收到“关闭”块,就进入“SHUTDOWN-RECEIVED”状态,同主机A一样,不再接受上层应用的数据,只发送队列中剩余的数据。

3. 主机A再次发送“关闭”块,通知主机B所发送的剩余数据已到达,并且重申了关联正在关闭。

4. 当第二次收到“关闭”块时,主机B发送“确认关闭”块。

5. 主机A随后发送“关闭结束”块,完成本次关联的关闭。

8.SCTP在工业以太网通信技术中的应用

随着自动化领域的信息化不断加深,工业以太网应用的广度和深度不断扩展。社会对关键基础设施的依赖不断加强,工业以太网在这些领域发挥越来越重要的作用。自动控制的应用向高精尖发展,工业控制方面的要求越来越高,在某些高危领域的应用甚至是极端苛刻的。而另一方面,工业以太网通信所处的环境将越来越多样化、复杂化,受干扰和入侵攻击的概率加大。因此,工业以太网通信要求有足够的高实时性、高可靠性、抗干扰、抗网络故障、抗截取、抗伪造性能,保证高质量的控制数据通信。

如前所述,现有的工业以太网方案还面临着巨大的信息安全风险,下一代通用传输协议SCTP提供了一些UDP和TCP所不具备的新特性。用SCTP替换现有工业以太网协议中UDP和TCP,构建基于SCTP的工业以太网通信将更加有优势,表现在以下几个方面:

(1)利用SCTP偶联的多宿主特性,在工业以太网的端点建立网络级冗余方案,还可以采取不同的媒体通信手段,大幅度提高网络的可靠性。

(2)多流控制能有效地减少通信延迟,这样控制数据能够通过单独的流通道来传递,其他非控制数据流走其他的多个流通道,这样控制数据不会被其他通信阻塞,从而获得更好的实时性能。另外,接收端发现发生数据丢失时,通过SACK机制SCTP直接给发送端反馈要求重传的消息序号,并且支持无序递交,有利于快速重传。

(3) 增加的安全机制有助于工业以太网抵御synflood和匿名攻击。

基于SCTP的工业以太网通信是可行性的,因为:

首先,SCTP和TCP,UDP一样是基于IP的通用传输层协议,而且更加先进。以太网解决方案SCTP协议已经成为IETF的正式标准,已经有部分计算机操作系统提供SCTP的支持,在电信行业,NGN中关键的Sigtran协议栈正是基于SCTP传输层协议的,这些足以证明SCTP协议本身的成熟性。

其次,具体到工业以太网而言,涉及到的端设备包括控制器的以太网模块、工控机板卡、OPC软件、HMI软件等,只需要对它们进行改造,将原本基于UDP和TCP的通信协议和服务应用实现转到基于SCTP上来即可。因为网络的通信对于控制网络的应用而言是透明的,因此,这种升级和改变带来了通信服务质量的提升,而对于控制业务本身没有任何影响。

最后,由于基于SCTP的工业以太网只是对原有工业以太网协议的变化,因此,不会带来巨大成本压力。

9. 总结

SCTP是为传输信令业务流而开发的,但它所具有的一些优于TCP的先进协议机制,如选择性确认、快速重传、无序递交等,使它又满足高性能传输的需求,这会给它带来更为宽广的应用需求。目前,已有各种操作系统支持SCTP,如Linux、AIX、Solaris、Windows、FressBSD。在不同协议实现间的互操作性测试的成功,揭示着SCTP正走向商业产品之路。

IEFT正在致力于SCTP进一步的修改,使其更能满足下一代应用的需求,例如支持IPv6地址,解决对端对于IPv6的site-local、link-local地址无连通性的问题,以及在已存在的关联中动态地增加或删除IP地址而无需重启该关联。

SCTP作为新一代基于IP层的通用传输协议,更能满足工业以太网通信的需要。但是,还应该认识到将SCTP应用到工业以太网通信中并不能解决目前面临的所有信息安全问题,其他的一些针对SCTP的建议,诸如在SCTP通信中应用ESP,IPSEC等技术手段保证通信数据的机密性和完整性等,还需针对工业以太网的实际情况做进一步的分析和研究工作。尽管如此,随着研究的深入和业界的探索,SCTP一定会应用于工业以太网络,更好地提升自动化的信息安全。

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值