流控制传输协议(SCTP)
转自:http://tieba.baidu.com/f?kz=659391874
摘 要 流控制传输协议(SCTP)是IETF新近提出的一种传输协议,用于在基于IP的网络上传输PSTN信令。本文详细研究了SCTP数据传输过程,特别是SCTP四路握手,并进一步展望了SCTP的发展前景。 关键词 SCTP SS7 over IP 关联 DoS 状态Cookie SYN Flooding 1 引言 在过去的20年内,作为一种可靠的数据传输方式,TCP提供了许多应用服务,但随着IP网的多业务化,尤其是VoIP的发展,TCP出现了很多局限性,例如对于VoIP信令及异步基于事务应用的处理。 不同于TCP的是,SCTP提供了许多对于信令传输很重要的功能,同时,对于其他一些对性能和可靠性有额外需要的应用,它能提供传输优势来满足这些需要。SCTP和TCP最大的区别在于SCTP对多宿(multihoming)和部分有序(partial ordering)的支持。SCTP的多宿使得每个端点可被多个传输地址访问到,选择不同传输地址会导致两个端点间不同的数据路径,理想情况是在每一条路径都建立一条独立的拥塞控制。所以,SCTP的多主机拥塞控制仍需改进。 2 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用户。
|
|
|
2楼 6. 支持多宿 当SCTP传送数据包给目的IP地址时,如果此IP地址是不可达的,SCTP可以将消息重路由给一个交替的IP地址。这样,在关联的一端甚至两端,可容忍网络级错误。 7. 防范拒绝服务(DoS)攻击 DoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。SYN Flooding攻击是DoS攻击的一种实例,是目前效果最好的一种黑客攻击方式。为了抵抗SYN Flooding对目标主机攻击,SCTP在关联初始化阶段实施了一种安全的“Cookie”机制。 8. 支持多种传输模式 严格有序传输(像TCP),部分有序传输(像per-stream)和无序传输(像UDP)。 3 SCTP包结构 SCTP包的结构,一个数据包首部可跟一个或多个可变长的块。块采用“类型—长度—值”(TLV)的格式。源端口、目的端口、校验码的意义同TCP中的意义相似。确认标签保存着在SCTP握手中第一次交换的初始标签的值。在关联中,任何SCTP数据包若不包含这样一个标签,当到达时会被接收端丢弃。 在每个块中,TLV包括块类型、传输处理标记、块长度。不同的块类型可用来传输控制信息或数据。 传输序列号(TSN)和流序列号(SSN)是两种不同的序列号,TSN保证整个关联的可靠性,而SSN保证整个流的有序性,这样,在传输中,将数据的可靠性与有序性独立分开。 4 SCTP数据传输 4.1 SCTP四路握手及抵抗SYN Flooding攻击的原理 一个SCTP关联定义为:[主机A的一组IP地址]+[主机A的端口]+ [主机B的一组IP地址]+[主机B的端口]。 因此,每一端对应组中的任何一个IP地址都可作为相应的源/目的地址来标示本次关联,通过四路握手,两端SCTP主机交换通信状态。 SYN Flooding利用了TCP/IP的固有漏洞,面向连接的TCP三次握手是SYN Flooding存在的基础。SYN Flooding攻击的原理是:恶意的攻击者大量向服务器发送SYN报文,服务器在发出SYN+ACK应答报文后无法收到客户端的ACK报文(第三次握手无法完成),服务器端将为维护一个非常大的半连接列表而消耗非常多的CPU时间和内存资源,还要不断对这个列表中的IP进行SYN+ACK的重试。服务器端将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求,此时从正常客户的角度看来,服务器失去响应。 而在一次SCTP四路握手中,INIT消息的接收端不必保存任何状态信息或者分配任何资源,这样就可防范SYN Flooding等DoS攻击。它在发送INIT-ACK消息时,采用了一种机制——“状态Cookie”,该Cookie具有发送端要建立自己状态所需的全部信息。 SCTP产生一个状态Cookie的过程如下: 1. 使用收到的INIT和发出的INIT- ACK块中的信息创建一个关联的TCB(传输控制块)。 2. 在TCB中,将当前日期设为创建日期,将协议参数“有效Cookie时间”设为生存期间。 3. 根据TCB,收集重建TCB所需的最小信息子集,将该子集和密钥产生一个MAC(信息认证编码)。 4. 结合上述最小信息子集和MAC产生状态Cookie。 5. 在发送完INIT ACK(包含状态Cookie参数)后,发送方必须删除TCB以及任何与新关联有关的本地资源。 INIT和INIT-ACK都必须包含建立初始状态所需的参数:一组IP地址,保证可靠传输的初始TSN,每个被接收的SCTP包中必须含有的初始标签,每一端请求发出的流数目和每一端能支持接收的流数目。交换完这些消息之后,INIT的发送端以COOKIE-ECHO消息的方式发送回状态 Cookie。接收端根据所接收到的COOKIE-ECHO中的状态Cookie,完整地重建自己的状态,并回送COOKIE- ACK来确认关联已建立。COOKIE-ECHO和COOKIE-ACK都可将用户数据消息绑定到各自的包中。
|
|
|