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

时间:2009-07-23 13:02:51

标签: networking tcp popularity sctp

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

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

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

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

12 个答案:

答案 0 :(得分:90)

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

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

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

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

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

最新版本的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并不是很了解,也没有大量使用/部署,因为:

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

答案 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)

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

答案 8 :(得分:3)

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

答案 9 :(得分:2)

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

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

答案 10 :(得分:0)

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

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

答案 11 :(得分:-1)

以防万一,您可以找到 SCTP here 的 RFC