Bugs

MMORPG game develop.

SCTP vs. TCP

 

1 流控制传输协议(SCTP)发展简介


  随着IP网向多业务网发展,尤其是目前IP电话、IP视频会议等业务的发展,在IP网中传送信令信息成为必然。目前IP网中信令消息的交换通常是使用TCP或UDP完成,但是这两个协议都不能满足电信运营网中信令承载的要求。


  为适应IP网成为电信运营核心网的发展趋势,IETF 的信令传输工作组(SIGTRAN)一直在研究和制定IP网新一代的传输协议,并在IETF RFC 2960中定义了流控制传输协议(SCTP,Stream Control Transmission Protocol)。SCTP是面向连接的可靠传送协议,它向上层应用提供了下列服务:


  · 应用数据的无错误无重复的可靠传输;


  · 根据检测到的MTU长度进行数据包分段处理,避免IP层的分段;


  · 在多个流间的用户消息有序递交,及单用户消息按到达顺序递交的选项;


  · 通过支持关联的多宿主机特性,实现网络级容错。


  SCTP是为传输信令业务流而制定的,它本身所具有的、优于TCP的一些先进协议机制,如选择性重传、无序递交和支持多种网络特性等,使得SCTP能够在一定程度上满足高性能传输的需求。而且,SCTP采用了类同TCP的流量控制机制,不存在类似基于UDP的实时媒体流对TCP性能造成的劣化干扰问题和公平性问题。因此,SCTP将有可能取代TCP,成为下一代IP网上面向连接的可靠传送层协议。


2 TCP的不足


  TCP是目前Internet上应用最广泛的面向连接的传送层协议,它为通信的两端提供了可靠的数据传输,而且提供了流量控制和拥塞控制功能。由于原来IP网提供的是“尽力而为(best-effort)”的服务,因此TCP存在许多不足之处:


  · TCP是面向字节流的。这意味着消息的描述必须由应用来完成,而且要在消息结束时显示通知TCP以迫使其立即发送相应的数据。


  · 许多应用只需要信令信息的部分有序,例如属于同一呼叫或同一会话的消息就是这样。而TCP只提供严格的数据按序传输,这会导致不必要的队头拥塞并使消息的传输时延增大。


  · TCP连接直接由一对传送层地址(IP地址和端口号)识别,无法提供对多宿主机的透明支持。


  · 典型的TCP实现不允许高层应用设定协议控制参数。但是一些应用可能会需要调节传送层协议的属性以满足其要求,例如某些应用有较高的时延要求,而另一些则只要求较高的可靠性。


3 连接与关联


  TCP中的连接是指两个TCP端点通过“三次握手”过程建立的由一对传送层地址(IP地址和端口号)识别的传送通道。


  在SCTP中, TCP中的连接被引申为关联(associ-
ation)。一个关联的两个SCTP端点都向对方提供一个SCTP端口号和一个IP地址列表,这样每个关联都由两个SCTP端口号和两个IP地址列表来识别。在一个关联内的拥塞控制机制与TCP连接的拥塞控制机制类似。


  一个关联是由多个单向的流组成的。各个流之间相对独立,可以单独发送数据而不受其他流的影响,也可以共同实现用户数据的有序递交。流的建立和拆除过程相对独立、简单。而关联的建立过程相对而言就比较复杂,是个“四次握手”过程,而且其中要用到“cookie”的概念。所谓“cookie”实际就是一个含有端点初始信息和加密信息的数据块,它在关联建立时被通信的两端处理并交换。


4 SCTP的多宿主机特性及应用


  SCTP支持传送层的多宿主机服务。当网络发生故障时,多宿主机服务可以增强网络的健壮性(robustness)。在某些应用场合,这个特性非常重要。SCTP对多宿主机服务的支持要求关联的一端或两端在不同的网络接口上分配有多个IP地址。


  一般来说,要在通信的两端实现真正的故障弹性恢复,每个端点都需要有一个以上的IP网络接口,以支持多宿主机服务。在这种情况下,路径使用的数量就是所有端点的网络接口的最小数,此时端点要正确选择自己的源地址才能获得最佳路径。但是,如果端点总是使用同一个源地址,那么端点就同样会出现单点故障。因为当端点选择一个源地址时,它总是选择数据包的源地址来对应网络接口的IP地址,而在网络接口上数据包将受到绑定地址的限制。换句话说,由于绑定地址的限制,端点永远都不能选择不属于该SCTP关联的源地址,同时对端端点也必须认可该SCTP关联使用的任何一个源地址。


  当端点在一个多宿主机上时,如果关联的两端绑定有多个地址,SCTP关联的可用性将大大增强。利用多宿主机这个特性可以在两个SCTP端点间建立冗余的路径,这对那些一直寻求在网络的传送层次就能提供容错机制的应用特别有用。要在SCTP的两个端点间建立冗余路径,要求两个端点的设备都必须有多个接口,并分配多个地址,而且必须配置好路由。


  因此,通过“多宿主机”特性,SCTP提供了较TCP强大得多的路径状态监控功能。SCTP可以监测远端地址的可达性,当远端地址不可达时,它能通过使用备用地址替换主用地址实现故障的自动恢复,而且这一过程不需要上层协议的干预。也就是说,“多宿主机”特性可以使一个关联可以在多个传输路径间选择和切换,从而提高了网络级容错的能力。


5 TCP与SCTP的安全比较


  1. TCP的安全问题


  一些TCP应用被公认会受到DoS攻击。例如,攻击者可以通过发送大量的连接建立请求(TCP-SYN数据包)来攻击目的地,有可能来自伪装的IP地址。被攻击主机将不停地发送SYN-ACK数据包来回复,并进入SYN-received状态,甚至SYN队列将被挤满(例如,等待建立的连接数会达到一个极限),而且它将拒绝新的连接建立请求。


  另外,伪装连接是对TCP的另一个潜在威胁。通过猜测有效的序列号,攻击者将可能伪装成一个合法连接。但是,通过使用一个安全的Hashsum算法,对目前SYN-cookie进行伪装的攻击的可能性只有1/224。例如当使用SYS-cookie时,要成功作为一个伪装的连接时,攻击者将不得不发送224个数据包。


  2. SCTP的安全机制


  SCTP在设计时就充分考虑了TCP的不足。为防止攻击者发送伪装的SCTP数据包到现有的连接中,SCTP的两端都使用一个称为“认证标记”的32bit数据来确保数据包真正属于现有的连接。因此,除了合并属于一个连接的源端口和目的端口的地址外,一个有效的SCTP数据包还必须有一个正确的标记。


  跟TCP不同的是,SCTP要求在连接建立时必须使用“cookie”。对服务器来说,必须交换3个信息包(INIT、INIT-ACK、COOKIE-ECHO),才能建立一个完整的新连接。“cookie”是个长度可变的,包含所有和在服务器端初始化TCB的相关数据,加上使用HMAC来确保它的安全。HMAC是在cookie中用来计算的,是一个保密、服务器所拥有的key。引入这种机制的目的在于增强协议的安全性,防止DoS攻击和伪装等潜在的攻击。


  同使用SYN-cookie的TCP相比较,SCTP被攻击者伪装的可能性大大降低。因为,攻击者不得不去猜测包含在cookie中的HMAC值。可能性小于2128。


  值得注意的是,SCTP仅仅试图来增强网络的可用性,它没有包含任何直接和用户信息认证、完整性和保密功能的协议机制,因为这些特性主要取决于IPSec协议和应用层协议的安全特性。


6 SCTP与TCP的功能及应用比较


  由于SCTP也是一个面向连接的协议,可提供所有TCP能够提供的传送层服务。因此,现有的许多Internet应用将面临选择使用TCP或SCTP,来满足他们对传送层服务的需求。需要注意的是,对处理成本比较敏感的应用,在使用SCTP或TCP得到的服务是不一样的,SCTP可以为应用提供一个单独定制的流传输,而TCP为应用提供的是一对地址。


  当然,SCTP还具有一些TCP所不具备的功能,这样,在某些应用场合,选择SCTP实现传送层服务将是更好的选择。SCTP在一个连接中可以支持多个独立用户信息流的发送。正确使用该功能,可以有效减少所谓的“head-of-line-blocking”问题带来的影响,在TCP中出现该问题,主要是因为数据包的发送有严格的顺序控制。因此,对那些需要在一个连接中同时支持多个逻辑上独立的信息流传送的应用,SCTP就特别有用。
  SCTP保留有应用信息的边界。当应用数据不是连续的字节流,而是要接收端单独处理大块的数据包时,该功能就非常有用。相反,TCP在提供可靠数据流传送的同时,并不能指出应用中包含的大块数据包。


  SCTP支持没有指明应用类别的用户信息的传送,而且能够保证数据的可靠传送。对那些需要发送没有顺序的可靠信息流的应用,或者喜欢使用自身的信息排序机制的应用,SCTP的这个功能就特别有用。

posted on 2008-06-26 11:28 Bugs 阅读(3532) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理