我最近检查了Richards Stevens的书"UNIX Network Programming, Vol. 1",我发现除了TCP和UDP之外还有第三个传输层标准: SCTP 。
总结:SCTP是一种传输级协议,它像UDP一样是消息驱动的,但是像TCP一样可靠。这是short introduction from IBM DeveloperWorks。
老实说,我以前从未听说过SCTP。我记不起在任何网络书籍中阅读它或在我参加的课程中听到它。提及SCTP的阅读other stackoverflow questions表明,我并不孤单,因为缺乏知识。
为什么SCTP如此未知?为什么没用多少?
答案 0 :(得分:90)
实际上,SCTP主要用于电信领域。传统上,电信交换机使用SS7(Signaling System No. 7)来互连电信网络中的不同实体。例如 - 电信提供商的用户数据库(HLR),带有交换机(MSC),用户也连接(MSC)。
电信领域正朝着更高的速度和更加可达的环境发展。其中一个变化是用一些更优雅,快速和灵活的基于IP的协议取代SS7协议。
电信领域非常保守。 SS7网络已在这里使用了几十年。这是一个非常可靠和封闭的网络。这意味着普通用户无法访问它。
相比之下,IP网络是开放的,不可靠,如果电信至少不能处理SS7处理的负载,电信将不会转换为它。这就是SCTP开发的原因。它尝试:
最新版本的Linux已经支持SCTP。
答案 1 :(得分:68)
我们现在已经在几个应用程序中部署了SCTP,并且在各种家用路由器中遇到了SCTP支持的重大问题。他们根本无法正确处理SCTP。我认为这主要是性能问题(SCTP协议规范要求重新计算整个数据包的校验和,而不仅仅是标题)。
像许多其他有前景的协议一样,SCTP在水中可悲地死去,直到D-link和Netgear修复了他们破坏的NAT盒子。
答案 2 :(得分:55)
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.
答案 3 :(得分:40)
SCTP并不是很了解,也没有大量使用/部署,因为:
答案 4 :(得分:15)
P1。直接通过IPv4映射的SCTP需要NAT网关的支持,NAT网关从未在任何地方广泛部署,如果没有它,典型的NAT网关只允许每个公共地址一个私有主机一次使用SCTP。
P2。通过UDP / IPv4映射的SCTP允许每个公共地址使用更多私有主机,但是由于UDP是无连接传输而没有任何显式状态要跟踪NAT,因此IPv4 / NAT网关中的UDP映射在建立和保持维护方面非常棘手。
P3。直接通过IPv6映射的SCTP需要......好...... IPv6。您是否尝试部署IPv6?如果是这样,您是否尝试过购买IPv6防火墙?它支持SCTP吗?负载均衡器怎么样? SSL加速器?
P4。最后,很多互联网几乎都受限于通过TCP端口80和端口443可以适应的东西,因此任何风味的SCTP都会在那里失去。因此,您会看到像IETF中的MPTCP工作组那样的努力。
答案 5 :(得分:13)
我们很多人很快就会使用SCTP,因为WebRTC数据通道使用它来在UDP上创建类似TCP的可靠层 - 通过UDP上的DTLS上的SCTP:https://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-13#section-6
答案 6 :(得分:7)
阅读SCTP Wikipedia page我说主要原因是SCTP是一个非常年轻的协议(2000年提出),目前主流操作系统不支持( Windows ,< strike> OS X , Linux )。
如果“非常年轻”似乎对你不合适,那么请考虑IPV6:“尽管将其作为标准跟踪协议标志为10周年,但在全球普遍部署方面,IPv6仅处于起步阶段。 “
答案 7 :(得分:3)
答案 8 :(得分:3)
SCTP广泛用于4G LTE网络,其中Diameter用于AAA。
答案 9 :(得分:2)
关于商业路由器被破坏或缺乏SCTP支持的所有评论,问题是带有NAT的SCTP仍然是IETF的草案形式。因此没有RFC规范来实现它。
答案 10 :(得分:0)
Sctp出生太晚了,对于很多情况来说TCP足够了。
另外,据我所知,它的大部分用途都是在电信领域。
答案 11 :(得分:-1)
以防万一,您可以找到 SCTP here 的 RFC