我最近查了本书 “UNIX 网络编程,卷。1" Richards Stevens 和我发现除了 TCP 和 UDP 之外还有第三种传输层标准: SCTP.

概括:SCTP 是一种传输层协议,它像 UDP 一样是消息驱动的,但又像 TCP 一样可靠。这里有一个 IBM DeveloperWorks 的简短介绍.

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

为什么 SCTP 如此不为人知?为什么用得不多?

有帮助吗?

解决方案

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

电信领域正在转向更高速度和更可达的环境。这些变化之一是用一些更优雅、快速和灵活的基于 IP 的协议来取代 SS7 协议。

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

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

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

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

其他提示

我们已经正在部署在几个应用SCTP,以及遇到各种家用路由器SCTP支持显著的问题。他们根本就没有正确处理SCTP。相信这主要是一个性能问题(该SCTP协议规范要求校验和被重新计算整个分组而不是只为标头)。

像许多其它有希望的协议SCTP是在水中可悲死直到d-链路和Netgear固定其破碎NAT盒。

SCTP需要在应用程序中更多的设计得到的尽其用。还有比TCP更多的选择,在套接字类API后来,这是年轻的。不过我认为,花时间最多的人去了解它(谁知道TCP的缺点),欣赏它 - 这是一个精心设计的协议,进一步巩固了我们〜30岁的TCP和UDP的知识

一的,需要一些思想的方面是,流。流提供(通常情况下,我认为你可以将其关闭)在它们的订单保证(很像一个TCP连接),但可以有每个SCTP连接多个数据流。如果您的应用程序的数据可以发送到多个流,那么你避免头的线端阻塞,其中接收器饿死由于一个放错地方的分组。有效地不同的对话可以有超过而不影响彼此相同的连接。

另一种有用的另外的是,多归属支持 - 一个连接可以是在多个接口上两端,并将其与故障对应。可以在TCP仿真这一点,但在应用层。

适当的链路心跳,这是首先使用TCP对于非瞬时连接器具的任何应用程序,有免费的。

我个人SCTP的总结是,它没有做任何事情你不能做的另一种方式(在TCP或UDP)有大量的应用支持。它提供的事情是不具有执行该代码(严重)自己的能力。

FYI,SCTP作为支持直径(CF 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.

SCTP 不太为人所知,也没有被广泛使用/部署,因为:

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

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

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

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

p4。最后,互联网上的许多内容几乎都受到 TCP 端口 80 和端口 443 的限制,因此任何类型的 SCTP 往往都会在这些方面失败。因此,你会看到类似的努力 多点TCP IETF 的工作组。

我们许多人将很快采用SCTP,因为它使用的WebRTC datachannels建立在UDP上一个类似TCP可靠层 - 在DTLS通过UDP SCTP:的 https://tools.ietf.org/html/draft-ietf-rtcweb-data-channel-13 #部-6

阅读 SCTP维基百科页面我会说,主要的原因是,SCTP是一个非常年轻的协议(在2000提出),其是目前的主流操作系统(<击>窗,<击> OS X ,<击> Linux的)。

如果“非常年轻”,似乎不恰当的你,想想 IPV6 :“十二月2008年,尽管标志着其10周年作为标准跟踪协议,IPv6的只是在它的一般全球部署方面处于起步阶段。“

SCTP在4G LTE网络,其中直径被用于在AAA中广泛使用。

它可能不太为人所知,但并非没有使用过。就在最近有一个 草稿 发表于 互联网工程任务组 关于 使用 SCTP 作为 HTTP 的传输层协议.

在参照所有关于商业路由器的评论被打破或缺乏SCTP支持,问题是与NAT该SCTP是仍与IETF草案形式。因此,有没有RFC规范为他们实现它。

https://tools.ietf.org/html/draft- IETF-表现-sctpnat-09

SCTP出生太晚了,而且许多情况TCP是不够的。

此外,如我知道大多数其使用的是在电信领域。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top