当前位置:  开发笔记 > 编程语言 > 正文

为什么SCTP没有太多使用/已知

如何解决《为什么SCTP没有太多使用/已知》经验,为你挑选了7个好方法。

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

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

老实说,我以前从未听说过SCTP.我记不起在任何网络书籍中阅读它或在我参加的课程中听到它.阅读提到SCTP的其他stackoverflow问题表明,我并不孤单,因为缺乏这方面的知识.

为什么SCTP如此未知?为什么没用多少?



1> dimba..:

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

电信领域正朝着更高的速度和更加可达的环境发展.其中一个变化是通过一些更优雅,快速和灵活的基于IP的协议来取代SS7协议.

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

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

模仿几十年来积累的SS7网络的所有优势.

在速度,安全性和冗余方面创建比TCP更好的面向连接的协议

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


可能SCTP在公共互联网上使用不多的主要原因是住宅IPv4/NAT网关需要成为SCTP感知,以支持多个同时私有端点和外部主机之间的多路复用关联.一旦IPv6转换开始获得更多动力,寻找SCTP将变得更有用.

2> pehrs..:

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

像许多其他有前途的协议一样,在D-link和Netgear修复他们破坏的NAT盒子之前,SCTP可悲地死在水中.


哇,我不知道这个进入的障碍.你是完全正确的 - 请参阅http://tools.ietf.org/html/draft-ietf-behave-sctpnat-05以了解这个问题.这是同一主题的第3套互联网草案......
@EugeneBeresovksy:我发布这个答案已经有几年了.我的印象是SCTP从那以后没有取得重大进展.它仍然在受控环境中的一些专门应用中使用,但在野外很少见.Windows和Mac OS X仍然缺乏开箱即用的SCTP支持.大多数防火墙和NAT盒破坏的协议缺乏熟悉性和脆弱性使人们不愿意使用它.

3> Bwooce..:

SCTP需要在应用程序中进行更多设计才能充分利用它.有比TCP更多的选项,类似套接字的API后来出现了,而且还很年轻.但是我认为大多数花时间去理解它的人(以及知道TCP的缺点的人)都很欣赏它 - 它是一个设计良好的协议,它基于我们对TCP和UDP的约30年的知识.

需要一些思考的一个方面是流.流提供(通常,我认为你可以关闭)它们内部的订单保证(很像TCP连接)但每个SCTP连接可以有多个流.如果您的应用程序的数据可以通过多个流发送,那么您可以避免由于一个错误的数据包导致接收器挨饿的线头阻塞.可以在同一连接上进行有效的不同对话,而不会相互影响.

另一个有用的补充是多宿主支持 - 一个连接可以跨越两端的多个接口,并且它可以应对故障.您可以在TCP中模拟它,但在应用程序层.

正确的链接心跳,这是任何使用TCP进行非瞬态连接的应用程序首先实现的,是免费的.

我个人对SCTP的总结是,它没有做任何你不能做的事情(在TCP或UDP中),并且有大量的应用程序支持.它提供的是不必自己实现该代码(严重)的能力.

仅供参考,SCTP被授权支持Diameter(参见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.



4> Phil L...:

SCTP不是很知名,也没有大量使用/部署,因为:

广泛:未广泛集成在TCP/IP堆栈中(2013年:在最新的Mac OSX和Windows中仍然缺失)

库:易于使用的语言中很少有高级绑定(免责声明:我是pysctp的维护者,对Python的SCTP easy stack支持)

NAT:根本不能很好地交叉NAT(不到1%的互联网家庭和企业路由器在SCTP上进行NAT).

Popularity:没有一般公共应用程序使用它

编程范例:它改变了一点:它仍然是一个套接字,但你可以将许多主机连接到多个主机(多宿主),数据报是有序且可靠的,erc ......

复杂性:SCTP堆栈实现起来很复杂(由于上述原因)

竞争:多路径TCP即将到来,应该解决多宿主需求/能力,以便人们尽可能避免实施SCTP,等待MTCP

利基:需要SCTP填充是非常奇特的(有序的可靠数据报,多流)并且不需要太多的应用程序

安全性:SCTP规避了安全控制(一些防火墙,大多数IDS,所有DLP,除了CentOS/Redhat/Fedora之外,不会出现在netstat上......)

审计能力:世界上有3家公司经常对SCTP安全进行审计(免责声明:我在其中一家工作)

学习曲线:使用SCTP的工具链不多(检查优秀的withsctp与netcat结合使用或使用socat)

引擎盖下:主要用于电信,每次发送短信,开始在手机上网或打电话,你经常触发流过SCTP的消息(带GSM/UMTS的SIGTRAN/SS7,带LTE/IMS的Diameter)/RCS,S1AP/X2AP与LTE),所以你实际上使用它很多,但你永远不知道它;-)


回复:"利基/ /许多应用程序不需要".Web浏览器将从中受益,请参阅[HTTP2](https://www.mnot.net/talks/http2-expectations/),并试图在TCP之上实现SCTP免费提供的一些内容.大多数HTTP优化技术(spriting,sharding,inlining,concatenation)都会被SCTP冗余(几乎完全 - HTTP1的浪费标题仍未解决).对于具有连接池以启用对数据库或任何其他服务的并发访问的应用程序也是如此.换句话说:很多应用程序都非常需要SCTP的一些功能.
"没有一般的公共应用程序使用它":不再正确,因为WebRTC使用SCTP."安全:SCTP规避安全控制" - 这更多是"安全"控制的问题.如果它确实避免了这些检查,那么恶意软件将成为雷达的绝佳协议.

5> james woodya..:

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

P2.SCTP映射在UDP/IPv4的允许每公网地址更多的私人主机,但在支持IPv4/NAT网关UDP映射是出了名的棘手的建立和保持维持,由于这样的事实,UDP是没有任何明确的状态的连接传输的NAT追踪.

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

P4.最后,许多互联网几乎受限于通过TCP端口80和端口443可以适应的东西,因此任何风味的SCTP都会在那里失去.因此,您会看到像IETF中的MPTCP工作组那样的努力.



6> cjb..:

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



7> IlDan..:

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

如果"非常年轻"对你来说似乎不合适,那就考虑一下IPV6:"尽管将其作为标准跟踪协议标志为10周年,但在2008年12月,IPv6在全球普遍部署方面还处于起步阶段."


根据您链接的维基百科文章,SCTP在Linux,Solaris,FreeBSD,HP-UX等中实现.
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有