为什么SCTP没有太多使用/已知

问题描述 投票:178回答:11

我最近检查了Richards Stevens的书"UNIX Network Programming, Vol. 1",我发现除了TCP和UDP之外还有第三个传输层标准:SCTP。

简介:SCTP是一种传输级协议,它像UDP一样是消息驱动的,但像TCP一样可靠。这是一个short introduction from IBM DeveloperWorks

老实说,我以前从未听说过SCTP。我记不起在任何网络书籍中阅读它或在我参加的课程中听到它。阅读引用SCTP的other stackoverflow questions表明,我并不孤单,因为缺乏这种知识。

为什么SCTP如此未知?为什么没用多少?

networking tcp popularity sctp
11个回答
90
投票

实际上,SCTP主要用于电信领域。传统上,电信交换机使用SS7(Signaling System No. 7)来互连电信网络中的不同实体。例如 - 电信提供商的用户数据库(HLR),带有交换机(MSC),用户也连接(MSC)。

电信领域正朝着更高的速度和更加可达的环境发展。其中一个变化是通过一些更优雅,快速和灵活的基于IP的协议来取代SS7协议。

电信领域非常保守。 SS7网络已在这里使用了几十年。这是一个非常可靠和封闭的网络。这意味着普通用户无权访问它。

相比之下,IP网络是开放的,不可靠,如果电信至少不能处理SS7处理的负载,它就不会转换为它。这就是SCTP开发的原因。它尝试:

  • 模仿几十年来积累的SS7网络的所有优势。
  • 在速度,安全性和冗余方面创建比TCP更好的面向连接的协议

最新版本的Linux已经支持SCTP。


2
投票

关于商业路由器被破坏或缺乏SCTP支持的所有评论,问题在于带有NAT的SCTP仍处于草案形式与IETF。因此没有RFC规范来实现它。

https://tools.ietf.org/html/draft-ietf-behave-sctpnat-09


0
投票

Sctp出生太晚了,对于很多情况来说TCP足够了。

另外,据我所知,它的大部分用途都是在电信领域。


68
投票

我们现在已经在几个应用程序中部署了SCTP,并且在各种家用路由器中遇到了SCTP支持的重大问题。他们根本无法正确处理SCTP。我认为这主要是性能问题(SCTP协议规范要求重新计算整个数据包的校验和,而不仅仅是标题)。

像许多其他有前途的协议一样,在D-link和Netgear修复他们破坏的NAT盒子之前,SCTP可悲地死在水中。


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.

40
投票

SCTP不是很知名,也没有大量使用/部署,因为:

  • 广泛:未广泛集成在TCP / IP堆栈中(2013年:在最新的Mac OSX和Windows中仍然缺失)
  • 库:易于使用的语言中很少有高级绑定(免责声明:我是pysctp的维护者,对Python的SCTP easy stack支持)
  • NAT:根本不能很好地交叉NAT(不到1%的互联网家庭和企业路由器在SCTP上进行NAT)。
  • Popularity:没有一般公共应用程序使用它
  • 编程范例:它改变了一点:它仍然是一个套接字,但你可以将许多主机连接到多个主机(多宿主),数据报是有序且可靠的,erc ......
  • 复杂性:SCTP堆栈实现起来很复杂(由于上述原因)
  • 竞争:多路径TCP即将到来,应该解决多宿主需求/能力,以便人们尽可能避免实施SCTP,等待MTCP
  • 利基:需要SCTP填充是非常奇特的(有序的可靠数据报,多流)并且不需要太多的应用程序
  • 安全性:SCTP规避了安全控制(一些防火墙,大多数IDS,所有DLP,除了CentOS / Redhat / Fedora之外,不会出现在netstat上......)
  • 审计能力:世界上有3家公司经常对SCTP安全进行审计(免责声明:我在其中一家工作)
  • 学习曲线:使用SCTP的工具链不多(检查与netcat结合使用的优秀withsctp或使用socat)
  • 引擎盖下:主要用于电信,每次发送短信,开始在手机上网或打电话,你经常触发通过SCTP传输的消息(SIGTRAN / SS7与GSM / UMTS,Diameter与LTE / IMS / RCS,S1AP / X2AP与LTE),所以你实际上使用它很多,但你永远不知道它;-)

15
投票

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工作组那样的努力。


13
投票

我们很多人很快就会使用SCTP,因为它被WebRTC数据通道用于在UDP上创建类似TCP的可靠层 - 通过UDP上的DTLS上的SCTP:https://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-13#section-6


7
投票

阅读SCTP Wikipedia page我会说主要原因是SCTP是一个非常年轻的协议(2000年提出),目前主流操作系统不支持( 视窗 , OS X. , Linux的 )。

如果“非常年轻”对你来说似乎不合适,那么请考虑一下IPV6:“尽管将其作为标准跟踪协议标志为10周年,但在全球普遍部署方面,IPv6仅处于起步阶段。”


3
投票

它可能不为人所知,但并未使用。最近在draft发布了一个关于使用SCTP作为HTTP传输层协议的IETF


3
投票

SCTP广泛用于4G LTE网络,其中Diameter用于AAA。

© www.soinside.com 2019 - 2024. All rights reserved.