为什么SCTP使用率不高/不为人所知


190

我最近查看了Richards Stevens的《 UNIX网络编程,第1卷》一书发现除了TCP和UDP之外,还有第三种传输层标准:SCTP

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

老实说,我以前从未听说过SCTP。我不记得在任何网络书籍中都读过它,或者在我上过的课上听过它。阅读其他提到SCTP的stackoverflow问题,这表明我并不孤单,缺乏知识。

为什么SCTP如此未知?为什么用的不多?


4
+1没听说过-谢谢。
罗伯特·韦纳布尔斯2009年

1
任何人都想将SCTP与ZeroMQ进行比较(除了一个是协议,另一个是库-将它们视为解决问题的工具)。
Emil Ivanov

我很好奇:2013年3月1日出了什么问题/与众不同?为什么这一天有很多票?
dmeister

8
@dmeister:因为我把你放在Reddit上。来自达姆施塔特的问候。
Janus Troelsen

32
请不要写3/1/2013。优选“ 2013年3月1日”,“ 2013年3月1日”,“ 2013年3月1日”中的任何一个。只是不要以一种会被误解的方式来写月份和月份。
Zecc 2013年

Answers:


94

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

电信领域正朝着更高的速度和更易到达的环境发展。这些更改之一是用一些更优雅,快速和灵活的基于IP的协议代替SS7协议。

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

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

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

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


特别是,您应该查看IETF的“ SIGTRAN”工作组的输出,该工作组编写了SS7和SCTP之间的映射。
Alnitak

22
SCTP在公共Internet上使用率不高的主要原因可能是住宅IPv4 / NAT网关需要支持SCTP,以支持多个同时专用端点和外部主机之间的多路复用关联。一旦IPv6过渡开始获得更多支持,就希望SCTP变得更加有用。
james woodyatt 2011年

@jameswoodyatt有通过UDP的SCTP的库实现。它解决了消费级路由器的一些问题。
user7610 2014年

1
这根本无法回答问题。詹姆斯的回答比答案实际包含的信息更多。
肯·夏普

@jameswoodyatt我所迷惑的消费级路由器都支持它,甚至有些相当古老的路由器。问题在于它没有通过常规UI公开,因此您必须对系统做一些可怕的事情才能进入可以对其进行配置的位置。我认为这有点疏忽。
珀金斯

70

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

像许多其他有希望的协议一样,直到D-link和Netgear修复损坏的NAT盒之前,SCTP都已死在水中。


7
哇,我不知道这种进入障碍。您是完全正确的-有关 问题的建议方法,请参阅tools.ietf.org/html/draft-ietf-behave-sctpnat-05。这是关于同一主题的第三组Internet草案...
Bwooce

您听起来很悲观-至少对于家用路由器。假设在专业生产环境中使用的路由器确实支持它,那么SCTP看起来仍然非常有用。在许多用例中,网络拓扑不会离开数据中心,因此SCTP应该是完美的。
Eugene Beresovsky

4
@EugeneBeresovksy:自从我发布这个答案已有好几年了。我的印象是,SCTP自那时以来并未取得重大进展。它仍然在受控环境中的一些专业应用中使用,但在野外很少见。Windows和Mac OS X仍然缺少现成的SCTP支持。大多数防火墙和NAT盒都缺乏对协议的熟悉度和脆弱性,使人们不愿意使用它。
pehrs 2014年

@pehrs我想在数据中心内使用它,因此除了操作系统内置的之外,不涉及NAT,也没有防火墙。我希望在Linux服务器环境中它能正常工作。但是即使使用Windows,也有SCTP库-我相信不必修改OS。
Eugene Beresovsky

由于缺乏采用,SCTP通常不会在Linux中启用,但是即使在我的Ubuntu Precise(旧)系统上,它也可以作为可加载模块使用。提供一个希望使用SCTP但又将退回到TCP的应用程序是一个类似于双栈的问题,但更麻烦。
肯·夏普

55

SCTP需要在应用程序中进行更多设计才能充分利用它。除了TCP以外,还有更多的选择,类似Sockets的API后来出现了,而且还很年轻。但是,我认为大多数花时间了解它的人(并且知道TCP的缺点)都赞赏它-它是一个经过精心设计的协议,它建立在我们对TCP和UDP的30多年的知识基础上。

需要考虑的方面之一是流。流在其中提供(通常,我认为您可以将其关闭)一个顺序保证(很像TCP连接),但是每个SCTP连接可以有多个流。如果您的应用程序的数据可以通过多个流发送,那么您可以避免由于一个未正确放置的数据包而导致接收器饿死的行头阻塞。在同一个连接上可以有效地进行不同的对话,而不会互相影响。

另一个有用的补充是多宿主支持-一个连接可以跨越两端的多个接口,并且可以应对故障。您可以在TCP中但在应用程序层上对此进行仿真。

正确的链接心跳是免费的,这是任何使用TCP进行非瞬态连接的应用程序实现的第一件事。

我对SCTP的个人总结是,它没有任何其他您可以通过大量应用程序支持以其他方式(在TCP或UDP中)完成的工作。它提供的功能是不必自己(很难)实现该代码的能力。

仅供参考,Diameter必须支持SCTP(参见RADIUS下一代)。参见RFC 3588

   直径客户端必须支持TCP或SCTP,而代理和
   服务器必须同时支持两者。本规范的未来版本
   要求客户支持SCTP。

43

SCTP并不是很为人所知,也没有被大量使用/部署,因为:

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

14
回复:“利基/很多应用程序不需要”。Web浏览器将从中受益,请参阅HTTP2及其在TCP之上实现的一些尝试,其中SCTP是免费提供的。SCTP将使大多数HTTP优化技术(划分,分片,内联,串联)(几乎完全是HTTP1的浪费头仍未解决)变得多余。对于具有连接池以允许并发访问数据库或任何其他服务的应用程序,情况也是如此。换句话说:许多应用程序都非常需要SCTP的某些功能。
Eugene Beresovsky 2014年

4
“没有通用的公共应用程序使用”:由于WebRTC使用了SCTP,因此不再适用。“安全性:SCTP逃避了安全控制”-这更多是“安全”控制的问题。如果确实避免了这些检查,那么将恶意软件留在雷达下将是一个很好的协议。
Maciej Piechotka '16

14

p1。直接在IPv4上映射的SCTP需要在NAT网关中提供支持,而NAT网关从未在任何地方广泛部署,没有它,典型的NAT网关将只允许每个公共地址一个私有主机一次使用SCTP。

p2。通过UDP / IPv4映射的SCTP允许每个公共地址更多的私有主机,但是众所周知,IPv4 / NAT网关中的UDP映射很难建立和保持,因为UDP是无连接传输,而NAT没有任何明确的状态可以跟踪。

p3。直接在IPv6上映射的SCTP需要...很好... IPv6。您是否尝试部署IPv6?如果是这样,您是否尝试购买IPv6防火墙?它支持SCTP吗?负载均衡器怎么样?SSL加速器?

第4页。最后,很多Internet都受到TCP端口80和443的限制,因此,任何口味的SCTP都将在此处丢失。因此,您会看到像IETF中的MPTCP工作组这样的工作。


“您是否尝试过购买IPv6防火墙?它是否支持SCTP” –通常免费分发iptables 就可以了。我不是网络人,所以我不能说其余的。
Hi-Angel

12

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


忘了提及WebRTC的主要重点是视频和音频流的结合。它不打算用作消息中继。转/冰/眩晕服务是WebRTC之上运行的技术的另一部分。但是这些是WebRTC使用的技术。这些技术不是WebRTC。
TamusJRoyce,

6

阅读SCTP Wikipedia页面时,我想说的主要原因是SCTP是一个非常年轻的协议(于2000年提出),目前不受主流OS(WindowsOS XLinux)支持。

如果您认为“太年轻”不合适,请考虑一下IPV6:“尽管在2008年12月庆祝其成为标准跟踪协议10周年,但IPv6仅在全球范围内才刚刚起步。”


3
根据您链接到的Wikipedia文章,SCTP是在Linux,Solaris,FreeBSD,HP-UX等中实现的。
drrlvn

现在,链接的文章还说它可以在OS X和Windows上运行。
dmeister 2012年


2

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


2
当您说“未使用”时,我想到了该协议的实际用法。但是随后您仅给出了文档草案的示例,这有可能在将来导致实际使用。
Kissaki


-1

Sctp诞生太晚了,在许多情况下,TCP就足够了。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.