我最近看了Richards Stevens写的“UNIX网络编程,Vol. 1”,我发现除了TCP和UDP之外还有第三个传输层标准:SCTP。

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

老实说,我以前从未听说过SCTP。我不记得在任何网络书籍中读到过它,也不记得在我上的课上听说过它。阅读其他提到SCTP的stackoverflow问题表明,我并不是唯一一个缺乏这种知识的人。

为什么SCTP如此不为人知?为什么不怎么使用呢?


当前回答

事实上,SCTP主要用于电信领域。传统上,电信交换机使用SS7 (Signaling System No. 7)实现电信网络中不同实体之间的互连。例如,电信供应商的用户数据库(HLR),通过交换机(MSC),用户也被连接(MSC)。

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

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

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

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

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

其他回答

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

和许多其他有前途的协议一样,SCTP在D-link和Netgear修复它们坏掉的NAT盒子之前已经不幸地死在水里了。

SCTP不是很为人所知,也不是经常使用/部署,因为:

Widespread: Not widely integrated in TCP/IP stacks (in 2013: still missing natively in latest Mac OSX and Windows. 2020 update: still not in Windows nor Mac OS X) Libraries: Few high level bindings in easy to use languages (Disclaimer: i'm maintainer of pysctp, SCTP easy stack support for Python) NAT: Doesn't cross NAT very well/at all (less than 1% internet home & enterprise routers do NAT on SCTP). Popularity: No general public app use it Programming paradigm: it changed a bit: it's still a socket, but you can connect many hosts to many hosts (multihoming), datagram is ordered and reliable, erc... Complexity: SCTP stack is complex to implement (due to above) Competition: Multipath TCP is coming and should address multihoming needs / capabilities so people refrain from implementing SCTP if possible, waiting for MTCP Niche: Needs SCTP fills are very peculiar (ordered reliable datagrams, multistream) and not needed by much applications Security: SCTP evades security controls (some firewalls, most IDSes, all DLPs, does not appear on netstat except CentOS/Redhat/Fedora...) Audit-ability: Something like 3 companies in the world routinely do audits of SCTP security (Disclaimer: I work in one of them) Learning curve: Not much toolchain to play with SCTP (check the excellent withsctp that combines nicely with netcat or use socat, 2020 edit: nmap supports it for a few years now ) Under the hood: Used mostly in telecom and everytime you send SMS, start surfing the net on your mobile or make phone calls, you're often triggering messages that flow over SCTP (SIGTRAN/SS7 with GSM/UMTS, Diameter with LTE/IMS/RCS, S1AP/X2AP with LTE), so you actually use it a lot but you never know about it ;-) 2020 edit: it's being removed from the core 5G network (no more Diameter, HTTP/2 instead) and will be only used in the 5G radio access network between antennas and core.

事实上,SCTP主要用于电信领域。传统上,电信交换机使用SS7 (Signaling System No. 7)实现电信网络中不同实体之间的互连。例如,电信供应商的用户数据库(HLR),通过交换机(MSC),用户也被连接(MSC)。

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

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

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

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

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

它可能不为人所知,但也不是没有被使用过。最近,IETF发布了一份关于使用SCTP作为HTTP传输层协议的草案。

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

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