网络行业中的许多人可能无法意识到SCTP存在以及它提供端到端互联网通信的好处。我们在大多数单播通信中使用TCP OVER IP,并且目前通过HTTP传递互联网。SCTP就像TCP,但不同。重要的是要意识到SCTP,如何使用它,也就理解为什么SCTP没有获得更广泛的接受和集成到更多系统。
我们都熟悉Internet协议(IP)及其4层协议套件,包括链路层,Internet层,传输层和应用层。互联网层可以使用IPv4或IPv6,可以在众多链路层技术之上使用,如以太网,PPP,SONET,帧中继,光纤通道,L2TP,FDDI,ARCNET,信鸽,甚至社交网络.
每个人都在数据通信类中学习的第一件事之一是7层OSI模型以及面向连接和无连接协议之间的区别。接下来,您将了解4层IP堆栈以及传输层协议之间的差异传输控制协议(TCP)和用户数据报协议(UDP)。然后,您将熟悉UDP快速而简单地传输数据流的无连接方法。您还将开始了解TCP的面向连接方法、用于拥塞控制的滑动窗口方法、SYN/ACK/FIN/RST标志和可靠的流传输。然而,很少有IT人员熟悉SCTP。
SCTP是什么?
流控制传输协议(SCTP)是一种传输层协议,可用于IP网络的端到端通信。SCTP是由运输区域工作小组(tsvwg)。SCTP已经由IETF在一系列rfc中进行了标准化,这些rfc定义了协议、对其他协议的适用性以及对协议的管理。SCTP最初在2000年10月的RFC 2960中定义,但后来被更新为RFC 4960.2007年9月。
SCTP类似于TCP.在许多方面。它们都是面向单播连接的协议,提供可靠的传输、按顺序发送包和速率自适应拥塞控制。TCP有一个附加的16位校验和(RFC 1071), SCTP有一个32位的CRC (RFC 4960.).
SCTP提供了一些TCP中没有的功能。SCTP是面向消息的,而TCP是面向流的。SCTP可以处理多个并发流和多路流,其中TCP在每个连接上只能处理单个数据流。SCTP的流感知连接控制是其最显著的特性之一。SCTP还提供了多归属,因为端点可以为连接使用多个IP地址。SCTP连接端点可以使用来自不同isp的IP地址来实现网络级容错。如果在连接过程中,其中一个ISP出现故障,连接将使用来自运营ISP的IP地址进行连接。因此,多归属不需要站点拥有自己的AS号,也不需要运行BGP协议。
SCTP可能更能抵抗中间人(MITM)和拒绝服务(DoS)攻击。SCTP在初始连接过程(INIT ACK)中使用cookie机制。SCTP不允许半开放的连接,因此它更能抵御泛滥和伪装攻击。
SCTP还有许多类似的特性UDP..两者都支持不可靠的传输和无序的包传递。与UDP的8字节报头相比,SCTP确实有一个12字节的报头,但是在比较协议之间的性能时,这是可以忽略不计的。
SCTP能够做一些UDP不能做到的事情。SCTP能够处理PMTUD (Path MTU Discovery)和分片。SCTP具有连接检测功能,可以检测丢弃和重复的数据包。因此,并不是每个应用程序都适合TCP或UDP,而SCTP可以同时提供TCP和UDP的最佳功能。
Happy Eyeballs和SCTP
去年《知识产权杂志》上有一篇很棒的文章题为使用IPv6和SCTP提高用户体验“,由丹翼和安德鲁·奥特·努特·斯科赫科,思科系统。本文介绍了快乐的眼球的概念以及如何应用于协商IPv4或IPv6连接以及更喜欢IPv6连接,如果可能的话。如果IPv6连接失败,则应用程序应迅速回落使用IPv4。本文还描述了应用程序应该如何使用SCTP的TCP协商连接,并在可能时更喜欢SCTP。
幸福的眼球技术被整合到谷歌Chrome,火狐浏览器,(不是Microsoft Internet Explorer)和Mac OS X Lion.“快乐眼球”是去年的焦点世界IPv6日和今年的世界IPv6推出准备。
Happy Eyeballs草案改变了,现在它是一个完整的RFC (RFC 6555 -快乐的眼球:成功的双堆栈主机),它不处理SCTP协商。快乐眼球的SCTP部分被分成一个第二稿.该草案描述了客户端尝试使用SCTP和TCP连接服务器的技术,并且如果可能,更喜欢SCTP通信。如果更多主机遵循此行为,则更容易获得SCTP更频繁地使用。
SCTP的实现
SCTP的一个关键挑战是,它需要对节点上的传输堆栈进行更改。可能需要修改应用程序以使用SCTP而不是TCP或UDP,并修改应用程序以处理多个并发流。SCTP对传输路径上的路由器没有任何影响,因为这些路由器只是根据目的地址转发IP包。需要修改客户机和服务器应用程序来处理用于端到端数据交换的SCTP通道。
由于SCTP的实现比TCP部署要少,因此更容易创建SCTP实现列表.想象一下启用tcp的应用程序列表有多长。下面是对SCTP的一些实现的描述。
的特拉华大学协议工程实验室(PEL)在Firefox 3.0.11中实现了SCTP,并为Mozilla提供了一个SCTP补丁。该小组致力于Apache over SCTP和tcpdump对SCTP的支持。这个小组也在努力适应铬来使用SCTP在SCTP Chrome-SPDY.
Cisco IOS 12.4T有支持SCTP释放4.
您可以使用“show sctp统计信息”命令或旧的“show ip sctp统计信息”命令,以查看您的网络是否已转发任何SCTP数据包。NetFlow可以使用SCTP使用SCTP使用“IP Flow-Export Destination SCTP”命令导出流。的IPFlow NetFlow收集器支持使用SCTP接收这些流量的支持。另外,IPFIX还使用SCTP。
许多操作系统,如Linux(LKSCTP),Solaris 10.BSD (RivuS)默认将SCTP集成到他们的基本操作系统中,或者可以有其他的包添加使SCTP。
微软的操作系统本身并不支持SCTP,但是有一个SctpDrv用于SCTP连接的Windows库。
有一个sctp用户空间/ userland库(sctplib),可以在多个操作系统上运行
SCTP称为Java实现OpenJDK:SCTP - SCTP实现。
从使用SCTP中获得最大益处的应用程序在语音和视频通信区域中。这些来自Sigtran七号信令和SIP团体。
有一个NetbricksSigtran堆栈。
还有一些系统使用了利用SCTP的信令系统7。
您可以看到SCTP的一些实现,但SCTP远非自然地实现到每个操作系统和应用程序中。
数据报拥塞控制协议
与SCTP类似,许多人也没有意识到可以与IP一起使用的第四个传输层协议。数据报拥塞控制协议(DCCP)是另一个基于IP的面向连接的传输层协议。DCCP定义于RFC 4340由IETFDCCP工作组.
维基百科上有个很好的表格比较这些传输层协议并展示了它们各自的特点。
DCCP是IP传输协议列表的相对新手。因为它是较新的,它没有被广泛使用的广泛使用SCTP尚未被广泛采用。
那么为什么我们不使用SCTP?
如果SCTP提供了所有这些好处,那么为什么我们不更频繁地使用它呢?
主要原因是SCTP出现在TCP已经确立自己作为IP之上的通用面向连接协议之后。TCP已经站稳了脚跟,而且它现在嵌入得太深了,无法被废黜。此外,SCTP还没有得到足够的推广,没有足够的开发人员了解它的好处或如何正确地使用它。
添加SCTP需要升级IP栈和应用程序,这是一个问题。现在编写的任何使用TCP的应用程序都需要修改以使用SCTP。重写世界的应用程序是不现实的。支持SCTP的服务器应用程序很少,因此支持SCTP的客户端应用程序也很少。我们已经看到了采用IPv6是多么困难。SCTP和IPv6一样陷入了同样的僵局。操作系统、应用程序和网络设备都需要升级以支持IPv6才能使其工作。SCTP只需要应用程序和操作系统支持,但这仍然是一项艰巨的任务。此外,很少有内容提供商的内容启用IPv6,因此很少有最终用户进行IPv6连接。
微软也没有将SCTP集成到他们的操作系统中,这限制了SCTP的使用。微软不打算将SCTP集成到微软的dot-Net框架中,因为缺乏客户的需求。这种逻辑的谬误在于,客户并不要求它,因为他们不知道他们需要它。微软应该比它的用户更聪明,走捷径,把它整合到他们的产品中。
今天,大多数人通过NAT后的HTTP访问Internet。事实是,许多中间机顶盒和防火墙不允许或没有编程与SCTP一起工作。它们只知道如何跟踪TCP连接状态信息。许多入侵防御系统(ips)并不检测SCTP报文是否受到攻击。如果您指定IP协议为132,那么Cisco ASA防火墙可以允许SCTP流量。否则,SCTP不能在访问列表.您可以在Juniper上配置SCTP策略SRX.或者ScreenOS防火墙。还有许多其他的商业级防火墙不支持SCTP。
在IT世界中,有许多最好的想法并不总是得到广泛采用的例子。有很多例子可以说明,在视觉上更有吸引力、营销效果更好的产品面前,优质产品是如何被淘汰的。网络协议也是如此。尽管SCTP可能在许多方面优于TCP和UDP,但它已经输给了TCP,因为它是第一个上市的,并且在很大程度上工作得很好。
斯科特