我最近查看了Richards Stevens的《 UNIX网络编程,第1卷》一书,发现除了TCP和UDP之外,还有第三种传输层标准:SCTP。
简介:SCTP是一种传输级协议,它像UDP一样是消息驱动的,但是像TCP一样可靠。这是IBM DeveloperWorks的简短介绍。
老实说,我以前从未听说过SCTP。我不记得在任何网络书籍中都读过它,或者在我上过的课上听过它。阅读其他提到SCTP的stackoverflow问题,这表明我并不孤单,缺乏知识。
为什么SCTP如此未知?为什么用的不多?
我最近查看了Richards Stevens的《 UNIX网络编程,第1卷》一书,发现除了TCP和UDP之外,还有第三种传输层标准:SCTP。
简介:SCTP是一种传输级协议,它像UDP一样是消息驱动的,但是像TCP一样可靠。这是IBM DeveloperWorks的简短介绍。
老实说,我以前从未听说过SCTP。我不记得在任何网络书籍中都读过它,或者在我上过的课上听过它。阅读其他提到SCTP的stackoverflow问题,这表明我并不孤单,缺乏知识。
为什么SCTP如此未知?为什么用的不多?
Answers:
实际上,SCTP主要用于电信领域。传统上,电信交换机使用SS7(7号信令系统)来互连电信网络中的不同实体。例如-电信提供商的订户数据库(HLR),带有交换机(MSC),订户也已连接(MSC)。
电信领域正朝着更高的速度和更易到达的环境发展。这些更改之一是用一些更优雅,快速和灵活的基于IP的协议代替SS7协议。
电信领域非常保守。SS7网络在这里已经使用了数十年。这是一个非常可靠且封闭的网络。这意味着普通用户无权访问它。
相反,IP网络是开放的并且不可靠,如果电信网络至少不能处理SS7所处理的负载,它就不会转换为IP网络。这就是开发SCTP的原因。它尝试:
最新版本的Linux已经具有SCTP支持。
现在,我们已经在多个应用程序中部署了SCTP,并且在各种家用路由器中的SCTP支持方面遇到了重大问题。他们只是无法正确处理SCTP。我认为这主要是一个性能问题(SCTP协议规范要求重新计算整个数据包而不仅仅是报头的校验和)。
像许多其他有希望的协议一样,直到D-link和Netgear修复损坏的NAT盒之前,SCTP都已死在水中。
SCTP需要在应用程序中进行更多设计才能充分利用它。除了TCP以外,还有更多的选择,类似Sockets的API后来出现了,而且还很年轻。但是,我认为大多数花时间了解它的人(并且知道TCP的缺点)都赞赏它-它是一个经过精心设计的协议,它建立在我们对TCP和UDP的30多年的知识基础上。
需要考虑的方面之一是流。流在其中提供(通常,我认为您可以将其关闭)一个顺序保证(很像TCP连接),但是每个SCTP连接可以有多个流。如果您的应用程序的数据可以通过多个流发送,那么您可以避免由于一个未正确放置的数据包而导致接收器饿死的行头阻塞。在同一个连接上可以有效地进行不同的对话,而不会互相影响。
另一个有用的补充是多宿主支持-一个连接可以跨越两端的多个接口,并且可以应对故障。您可以在TCP中但在应用程序层上对此进行仿真。
正确的链接心跳是免费的,这是任何使用TCP进行非瞬态连接的应用程序实现的第一件事。
我对SCTP的个人总结是,它没有任何其他您可以通过大量应用程序支持以其他方式(在TCP或UDP中)完成的工作。它提供的功能是不必自己(很难)实现该代码的能力。
仅供参考,Diameter必须支持SCTP(参见RADIUS下一代)。参见RFC 3588
直径客户端必须支持TCP或SCTP,而代理和 服务器必须同时支持两者。本规范的未来版本 要求客户支持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加速器?
第4页。最后,很多Internet都受到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页面时,我想说的主要原因是SCTP是一个非常年轻的协议(于2000年提出),目前不受主流OS(Windows,OS X和Linux)支持。
如果您认为“太年轻”不合适,请考虑一下IPV6:“尽管在2008年12月庆祝其成为标准跟踪协议10周年,但IPv6仅在全球范围内才刚刚起步。”
关于有关商用路由器损坏或缺乏SCTP支持的所有评论,问题在于带有NAT的SCTP仍是IETF的草案形式。因此,他们没有RFC规范来实现它。