我最近检查了Richards Stevens的书"UNIX Network Programming, Vol. 1",我发现除了TCP和UDP之外还有第三个传输层标准:SCTP。
简介:SCTP是一种传输级协议,它像UDP一样是消息驱动的,但像TCP一样可靠。这是一个short introduction from IBM DeveloperWorks。
老实说,我以前从未听说过SCTP。我记不起在任何网络书籍中阅读它或在我参加的课程中听到它。阅读引用SCTP的other stackoverflow questions表明,我并不孤单,因为缺乏这种知识。
为什么SCTP如此未知?为什么没用多少?
实际上,SCTP主要用于电信领域。传统上,电信交换机使用SS7(Signaling System No. 7)来互连电信网络中的不同实体。例如 - 电信提供商的用户数据库(HLR),带有交换机(MSC),用户也连接(MSC)。
电信领域正朝着更高的速度和更加可达的环境发展。其中一个变化是通过一些更优雅,快速和灵活的基于IP的协议来取代SS7协议。
电信领域非常保守。 SS7网络已在这里使用了几十年。这是一个非常可靠和封闭的网络。这意味着普通用户无权访问它。
相比之下,IP网络是开放的,不可靠,如果电信至少不能处理SS7处理的负载,它就不会转换为它。这就是SCTP开发的原因。它尝试:
最新版本的Linux已经支持SCTP。
关于商业路由器被破坏或缺乏SCTP支持的所有评论,问题在于带有NAT的SCTP仍处于草案形式与IETF。因此没有RFC规范来实现它。
Sctp出生太晚了,对于很多情况来说TCP足够了。
另外,据我所知,它的大部分用途都是在电信领域。
我们现在已经在几个应用程序中部署了SCTP,并且在各种家用路由器中遇到了SCTP支持的重大问题。他们根本无法正确处理SCTP。我认为这主要是性能问题(SCTP协议规范要求重新计算整个数据包的校验和,而不仅仅是标题)。
像许多其他有前途的协议一样,在D-link和Netgear修复他们破坏的NAT盒子之前,SCTP可悲地死在水中。
SCTP需要在应用程序中进行更多设计才能充分利用它。有比TCP更多的选项,类似套接字的API后来出现了,而且还很年轻。但是我认为大多数花时间去理解它的人(以及知道TCP的缺点的人)都很欣赏它 - 它是一个设计良好的协议,它基于我们对TCP和UDP的约30年的知识。
需要一些思考的一个方面是流。流提供(通常,我认为你可以关闭)它们内部的订单保证(很像TCP连接)但每个SCTP连接可以有多个流。如果您的应用程序的数据可以通过多个流发送,那么您可以避免由于一个错误的数据包导致接收器挨饿的线头阻塞。可以在同一连接上进行有效的不同对话,而不会相互影响。
另一个有用的补充是多宿主支持 - 一个连接可以跨越两端的多个接口,并且它可以应对故障。您可以在TCP中模拟它,但在应用程序层。
正确的链接心跳,这是任何使用TCP进行非瞬态连接的应用程序首先实现的,是免费的。
我个人对SCTP的总结是,它没有做任何你不能做的事情(在TCP或UDP中),并且有大量的应用程序支持。它提供的是不必自己实现该代码(严重)的能力。
仅供参考,SCTP被授权支持Diameter(参见RADIUS下一代)。请参阅RFC 3588
Diameter clients MUST support either TCP or SCTP, while agents and servers MUST support both. Future versions of this specification MAY mandate that clients support SCTP.
SCTP不是很知名,也没有大量使用/部署,因为:
P1。直接通过IPv4映射的SCTP需要NAT网关的支持,NAT网关从未在任何地方广泛部署,如果没有它,典型的NAT网关只允许每个公共地址一个私有主机一次使用SCTP。
P2。通过UDP / IPv4映射的SCTP允许每个公共地址使用更多私有主机,但是IPv4 / NAT网关中的UDP映射因建立和保持而非常棘手,因为UDP是无连接传输而没有任何显式状态供NAT跟踪。
P3。直接通过IPv6映射的SCTP需要......好...... IPv6。您是否尝试部署IPv6?如果是这样,您是否尝试过购买IPv6防火墙?它支持SCTP吗?负载均衡器怎么样? SSL加速器?
P4。最后,很多互联网几乎都受限于通过TCP端口80和端口443可以适应的东西,因此任何风味的SCTP都会在那里失去。因此,您会看到像IETF中的MPTCP工作组那样的努力。
我们很多人很快就会使用SCTP,因为它被WebRTC数据通道用于在UDP上创建类似TCP的可靠层 - 通过UDP上的DTLS上的SCTP:https://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-13#section-6
阅读SCTP Wikipedia page我会说主要原因是SCTP是一个非常年轻的协议(2000年提出),目前主流操作系统不支持( 视窗 , OS X. , Linux的 )。
如果“非常年轻”对你来说似乎不合适,那么请考虑一下IPV6:“尽管将其作为标准跟踪协议标志为10周年,但在全球普遍部署方面,IPv6仅处于起步阶段。”
SCTP广泛用于4G LTE网络,其中Diameter用于AAA。