SCTP简介

SCTP简介SCTP(StreamControlTransmissionProtocol)是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。SCTP是可以确保数据传输的,和TCP类似,也是通过确认机制来实现的。和TCP不同的是:1.TCP是以字节为单位传输的,SCTP是以数据块为单位传输的TCP接收端确认的是收到的字节数,SCTP接收端确认

大家好,又见面了,我是你们的朋友全栈君。

 

SCTP (Stream Control Transmission Protocol)是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。

SCTP是可以确保数据传输的,和TCP类似,也是通过确认机制来实现的。和TCP不同的是:

1. TCP是以字节为单位传输的,SCTP是以数据块为单位传输的

TCP接收端确认的是收到的字节数,SCTP接收端确认的是接收到的数据块。SCTP的这种数据块(被称为DATA CHUNK)通常会携带应用的一个数据包,或者说是应用要发送的一个消息。

在实际的应用中,TCP发送方的可以将应用程序需要发送的多个消息打包到一个TCP包里面发出去。比如,应用程序连续调用两次send()向对端发送两条消息,TCP协议可能把这两条消息都打包放在同一个TCP包中。接收端在收到这个TCP包时,回给对端的ACK只是表明自己接收到了多少个字节,TCP协议本身并不会把收到的数据重新拆散分成两条应用层消息并通知应用程序去接收。事实上,应用程序可能只需要调用一次receive(),就会把两条消息都收上来,然后应用需要根据应用程序自己定义的格式去拆成两条消息。

与TCP不同,SCTP是将应用程序的每次调用sendmsg()发送的数据当作一个整体,放到一个被称为DATA CHUNK的数据块里面,接收端也是以DATA CHUNK为单位接收数据,并重新组包,通知应用程序接收。通常,应用程序每次调用recvmesg()都会收到一条完整的消息。

在SCTP的发送端,多条短的应用层消息可以被SCTP协议打包放在同一个SCTP包中,此时在SCTP包中可以看到多个DATA CHUNK。另一方面,一条太长(比如,超过了路径MTU)的应用层消息也可能被SCTP协议拆分成多个片段,分别放在多个DATA CHUNK并通过不同的SCTP包发送给对端。这两种情况下,SCTP的接收端都能重新组包,并通知应用程序去接收。

2. TCP通常是单路径传输,SCTP可以多路径传输

TCP的两端都只能用一个IP来建立连接,连接建立之后就只能用这一对IP来相互收发消息了。如果这一对IP之间的路径出了问题,那这条TCP连接就不可用了。

SCTP不一样的地方是,两端都可以绑定到多个IP上,只要有其中一对IP能通,这条SCTP连接就还可以用。

SCTP简介SCTP简介

体现在socket API中,TCP只能bind一个IP,而SCTP可以bind到多个IP。

3. TCP是单流有序传输,SCTP可以多流独立有序/无序传输

一条SCTP连接里面,可以区分多条不同的流(stream),不同的流之间的数据传输互不干扰。这样做理论上的好处是,如果其中某一条流由于丢包阻塞了,那只会影响到这一条流,其他的流并不会被阻塞。但是实际上,如果某一条流由于丢包阻塞,其他的流通常也会丢包,被阻塞,最后导致所有的流都被阻塞,SCTP连接中断。

SCTP简介

在同一条stream里面,SCTP支持有序/无序两种传输方式,应用程序在调用sendmsg()的时候,需要指定用哪一条stream传输,以及指定这条要发送的消息是需要有序传输还是无序传输的。如果在传输过程中丢包,则有序传递模式可能会在接收端被阻塞,而无序传输模式不会在接收端被阻塞。

SCTP简介

4. TCP连接的建立过程需要三步握手,SCTP连接的建立过程需要四步握手

TCP连接建立过程,容易受到DoS攻击。在建立连接的时候,client端需要发送SYN给server端,server端需要将这些连接请求缓存下来。通过这种机制,攻击者可以发送大量伪造的SYN包到一个server端,导致server端耗尽内存来缓存这些连接请求,最终无法服务。

SCTP的建立过程需要四步握手,server端在收到连接请求时,不会立即分配内存缓存起来,而是返回一个COOKIE。client端需要回送这个COOKIE,server端校验之后,从cookie中重新获取有效信息(比如对端地址列表),才会最终建立这条连接。这样,可以避免类似TCP的SYN攻击。

应用程序对此感知不到,对应用程序来说,不管是TCP还是SCTP,都只需要在server端listen一个socket,client调用connect()去连接到一个server端。

5. SCTP有heartbeat机制来管理路径的可用性

SCTP协议本身有heartbeat机制来监控连接/路径的可用性。

前面说过,SCTP两端都可以bind多个IP,因此同一条SCTP连接的数据可以采用不同的IP来传输。不同的IP传输路径对应一条path,不同的path都可以由heartbeat或者是数据的传输/确认来监控其状态。

如果heartbeat没相应,或者是数据在某条path超时没收到确认导致重传,则认为该path有一次传输失败。如果该path的连续传输失败次数超过path的连续重传次数,则认为该path不可用,并通知应用程序。如果一条连接的连续传输次数超过设定的“连接最大重传次数”,则该连接被认为不可用,该连接会被关闭并通知应用程序。

下一节将描述SCTP协议是如何实现上述功能的。


 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147868.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 除法取整_java 除法运算只保留整数位的4种方式

    java 除法取整_java 除法运算只保留整数位的4种方式1.情景展示根据提供的毫秒数进行除法运算,如果将毫秒数转换成小时,小时数不为0,则只取整数位,依此类推…2.情况分析可以使用3个函数实现Math.floor(num)  只保留整数位Math.rint(num)  余数四舍五入Math.ceil(num)  取整位,再+1举例:doublenum=3.1415926;System.out.println(Math.floor…

    2022年6月5日
  • UpdatePanel 用法

    UpdatePanel 用法局部更新是ajax技术的最基本,也是最重要的用法,今天大概把asp.netajax中的局部更新控件updatepanel的用法记录下,大家可以共同探讨UpdatePanel控制页面的局部更新,这个更新功能依赖于scriptManger控件的EnablePartialRendering属性,如果这个属性设置为false局部更新会失去作用(scriptManger控件的EnablePartia

    2022年7月23日
  • win32怎么用_win32function failed

    win32怎么用_win32function failedHWNDhwndFound//=FindWindow(_T("RC352_Win32"),NULL); =GetConsoleWindow();

    2022年8月5日
  • Google发布开源Java程序 给力CSS

    Google发布开源Java程序 给力CSS

    2021年8月21日
  • win7系统opc服务器配置,win7 设置opc服务器

    win7系统opc服务器配置,win7 设置opc服务器win7设置opc服务器内容精选换一换创建媒体处理服务配置项。媒体处理服务配置项用于媒体处理服务中获取相关授权。参数和对应说明如表1。MpcConfigmpcConfig=newMpcConfig();mpcConfig.setEndPoint(“endPoint”);//设置转码节点地址mpcConfig.setProjectId(华为云帮助中心,为用户提供产品简介、价格说明、购买…

    2022年6月20日
  • 推荐 四种优秀的数据库设计工具[通俗易懂]

    推荐 四种优秀的数据库设计工具[通俗易懂]点击“终码一生”,关注,置顶公众号每日技术干货,第一时间送达!众所周知,良好的数据库设计能够大幅减少后期的运维工作,同时也能最大程度地减少软件项目出错的可能。由于我们所面临的真实项目需求往往五花八门,因此需要找到合适的设计工具,来实现事半功倍的效果。本文将从如下四个方面和您一起比较四种优秀数据库设计工具的各自优缺点。 用户界面 可支持的数据库 数据工具 售价 1、DbSchema官网:https://dbschema.com

    2022年7月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号