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

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

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

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


当前回答

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

其他回答

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

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

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

p2。通过UDP/IPv4映射的SCTP允许每个公共地址有更多的私有主机,但是IPv4/NAT网关中的UDP映射非常难以建立和维护,因为UDP是一种无连接传输,没有任何显式的状态供NAT跟踪。

p3。SCTP直接映射到IPv6需要…嗯…IPv6。你试过部署IPv6吗?如果是的话,你试过买IPv6防火墙吗?是否支持SCTP?负载均衡器怎么样?SSL加速器?

p4。最后,许多Internet在很大程度上受到限制,只能通过TCP端口80和端口443进行传输,因此任何类型的SCTP都可能在这两个端口上丢失。因此,您可以在IETF中看到像MPTCP工作组这样的努力。

我们中的许多人很快就会使用SCTP,因为WebRTC数据通道使用它在UDP之上创建一个类似tcp的可靠层——SCTP over DTLS over UDP: https://datatracker.ietf.org/doc/html/draft-ietf-rtcweb-data-channel-13#section-6

阅读SCTP维基百科页面,我想说主要原因是SCTP是一个非常年轻的协议(在2000年提出),目前主流操作系统(Windows、OS X、Linux)都不支持它。

如果“非常年轻”对你来说似乎不合适,那么想想IPV6:“2008年12月,尽管已经是标准跟踪协议诞生10周年,IPV6在全球范围内的普遍部署还处于起步阶段。”

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