让“可靠”变得“更快更安全”的数据传输协议:SCTP

粉丝点名要看的文章,这就来咯!
在《灵魂拷问:tcp&udp彻底搞懂了吗?》里,文档君和大家一起学习到了tcp和udp这2种协议的区别和工作原理。
tcp和udp的优点和缺点都很明显,总之是:各有千秋、旗鼓相当、难分轩轾、互有短长。
聪明的粉丝是善于思考和发问的:有没有一种协议,可以将tcp和udp的优点集于一身?
来吧,今天文档君就和大家一起了解一下sctp,解答各位粉丝的疑问吧!
part1什么是sctp?
sctp(stream control transmission protocol,流控传输协议)的出现,并不是万丈高楼平地起,而是站在tcp这个巨人肩膀上,让数据传输从“可靠”变得“更快更安全”。
假设有2个主机(host)之间想要通过ip通信,sctp在tcp的基础上,进行了下面的一系列改造:
端点端点位于主机上,是一个逻辑实体。简单来说,2个主机之间进行数据传输的话,端点可以看作是“起点”和“终点”。 1个主机可以有多个ip地址和多个开放端口,ip地址+端口号的组合,称为传送地址。 一个传送地址,例如:100.100.10.1:1000,可以唯一标识一个端点。一个端点,可以拥有多个不同的传送地址。例如:端点a可以使用的传送地址包括100.100.10.1:1000、100.100.10.2:1000、100.100.10.1:1001。端点b可以使用的传送地址包括200.200.20.1:2000、200.200.20.2:2000。那么端点a可以使用传送地址100.100.10.1:1000、100.100.10.2:1000,与端点b进行数据传输。 细心的粉丝应该也发现了,对于同1个目的端点,起始端点的多个传送地址之间,端口号可以相同,ip地址必须不相同。 如果将网络世界比作是海洋,主机可以看做是港口,端点就是港口中专营数据进出口的商家,传送地址就是港口中的一个个码头,海量的数据通过码头完成了装载出发和到达卸载。偶联(association)2个端点之间,通过四步握手机制建立的逻辑联系或者通道,叫做偶联。 sctp规定:在任何时刻的2个端点之间,最多只能建立1个偶联。 港口a中的本端端点(商家a),要想与港口b中的对端端点(商家b)进行数据传输,必须握手四次,成功达成共识,相当于签订了一个进行数据传输的合同。 只有成功建立偶联(签订合同)后,2个端点之间才可以进行数据的传输。
流(stream)
流是sctp协议中的一个特殊术语,主要用来指明数据的序列:1个流中包含了多个消息,而且消息之间是有先后顺序的。
在1个偶联中,包含了多个流,每个流,都是从1个端点到另外1个端点的单向逻辑通道。
每个流都有自己专属的流id,不同流之间是相互独立的,每个流可以单独发送数据而不受其他流的影响。
数据是如何从一个码头传输到另外一个码头的?
tcp和sctp各有自己的方式:sctp采用了流,流中的数据是以块为基本单位;tcp采用了包,包中的数据以字节为基本单位。
相当于tcp在传输数据的时候,一艘货船上只装载1件货物。而stcp在传输数据的时候,将多件货物打包成集装箱,一艘货船上可以装载n多个集装箱,而且集装箱之间是有编号的,是顺序排列的。
通路(path)通路是在一个偶联中,数据在传输过程中所经过的路径。这个路径,是可以多条的。通路的数量,取决于一个偶联中的起始端点、目的端点中使用的传送地址的数量。 简单来说,本端端点(商家a)拥有2个码头,对端端点(商家b)也拥有2个码头,那数据要装船启航,就有4条不同的航线可以选择。
path0:本端传送地址1(100.100.10.1:1000)发送sctp分组到对端传送地 址1(200.200.20.1:2000)。
path1:本端传送地址2(100.100.10.2:1000)发送sctp分组到对端传送地 址1(200.200.20.1:2000)。
path2:本端传送地址1(100.100.10.1:1000)发送sctp分组到对端传送地 址2(200.200.20.2:2000)。
path3:本端传送地址2(100.100.10.2:1000)发送sctp分组到对端传送地 址2(200.200.20.2:2000)。
一般情况下,两个端点之间会选择一条航线,作为首选通路。一旦首选通路出现故障,sctp可以将航线自动切换到其他备用的通路上。  part2sctp如何加快数据传输?    在上述改进的基础上,sctp的数据传输效率有了飞跃。 sctp的基本工作步骤如下:
建立偶联:握手四次,成功达成共识。
打开数据流:在建立偶联后,发送open消息来打开1个新的数据流。open消息中包含了流的id、优先级和其他参数。
发送数据:一旦数据流打开,就可以在这个流上发送数据,通过发送user消息来完成。user消息中包含了流id和要发送的数据。
关闭数据流:数据都已经传输完毕,发送1个close消息来关闭数据流。close消息中包含了流id和其他参数。
关闭偶联:发送1个shutdown消息来关闭偶联。shutdown消息中包含了关闭连接的原因和其他参数。
在发送数据的环节上,sctp拥有一些独特的办法:
首先,sctp是面向消息的传输,将上层应用传递下来的用户数据以消息的形式传输,sctp提供消息的拆分、绑定、重组功能。在传输侧,将用户数据装入一个集装箱,这个集装箱叫做sctp分组。 每个sctp分组包括一个公共头和多个块,块分为控制块和数据块,控制块用于sctp的连接控制,包括连接的建立、关闭、传输路径的维护等;数据块包含了应用层的用户数据。
而且如果某个用户数据的长度很短,装在一个集装箱内会很浪费空间。sctp可以将多个用户数据绑定在一起,装在同一个集装箱的数据块中,大大提高了利用率。在接收侧,sctp将一个集装箱的内用户数据,重新组装成完整的用户数据,传递给上层应用。
其次,sctp支持多路复用,即允许在1个偶联中发送多个流。每个流,都是一艘艘装载满数据的货船,每个货船都有自己独特的id,相互之间互不影响。
part3sctp如何让数据传输更安全?    sctp在以下几个方面,对数据传输的安全性、稳定性进行了有效的保障。只是因为建立连接时,多握了一次手
sctp的四次握手流程如下:
本端端点(商家a)发送init消息到对端端点(商家b),向对端端点(商家b)通知本端端点(商家a)的接收窗口大小、地址列表、初始标记及发送的第一个data包的发送序号。
对端端点(商家b)收到init消息后,回送init ack消息给本端端点。init ack消息中除了携带着与init消息相同的自己的连接信息外,还携带有状态的cookie信息。
本端端点(商家a)收到init ack消息后。利用消息中的state cookie生成cookie echo消息,将cookie echo消息发到对端端点(商家b),告诉对端端点(商家b)已收到消息。
对端端点(商家b)在收到合法的cookie echo后,开始进行创建连接tcb(传输控制块)和申请资源的工作,发送cookie ack消息给本端端点,并进入establish状态。对端端点(商家b)在收到cookie ack后,状态变为establish,至此完成连接建立工作。
与tcp的三次握手流程对比,sctp在第2步和第3步中使用了cookie echo和init ack消息,这2个消息都包含了对端端点(商家b)的参数信息和cookie值。 这些参数信息和cookie值用于验证对端端点(商家b)的身份,保证连接的安全性。还因为在传输数据时,多了身份的认证。sctp提供了无差错的传输服务,靠的是在集装箱公共分组头里面,包含了一个验证标签(verification tag)和一个可选的32位校验码(checksum)。
验证标签的值,在建立偶联(签订合同)时,由本端端点(商家a)和对端端点(商家b)共同设置的。 如果收到的集装箱公共分组头中如果没有期望的验证标签值,对端端点(商家b)会认为这个集装箱是危险的或者无效的,将丢弃这个集装箱。
集装箱中的校验码,是通过adler-32算法在数据块的基础上计算出来的32位字符串。本端端点(商家a)把计算后的校验码放在集装箱中,是为了给数据块的一个额外保护,用来避免由网络造成的数据差错。 对端端点(商家b)收到集装箱,也通过adler-32算法在数据块基础上计算出来1个校验码,如果和集装箱里已有的32位校验码一致,说明数据块是没有差错的。 如果两个校验码不一致,说明数据块出错了,对端端点(商家b)也会丢弃这个集装箱。
也因为在通路空闲时,多了心跳的检测。
sctp通过心跳检测功能,定期检查连接的健康状况,从而及时发现和修复连接问题。
当某条通路空闲时,本端端点(商家a)会要求sctp生成相应的心跳消息,并通过该通路发送到对端端点(商家b),而对端端点(商家b)必须立即发回对应的心跳确认消息。
通过这样的方式,sctp精确测量回路时延rtt(round trip time),达到监控偶联的可用情况和保持sctp 偶联的激活状态的目的。
part4sctp的发展趋势如何?   
前面讲过,sctp是在tcp的基础上进行了一些改进。
这是因为tcp在处理多媒体应用时,存在拥塞控制问题和可靠传输问题。
所以早在1990年代中期,人们就开始研究sctp协议,并先后发布了多个版本。
每个新版本,都是对前一个版本的改进,并在2000 年成为 rfc 2960,相关的rfc 3286是介绍性的文档、rfc 4960(2007)是rfc 2960的替代协议。
为了适应不断发展变化的网络标准,sctp也在不断进化,比如:增加了端到端的认证功能、改进了心跳机制,优化了调度算法。
tcp/udp有其先发优势,已经广泛应用在网络的各种场景中。
sctp作为后来者,目前的应用范围有限,却也在越来越多的场景中得到应用,比如:多媒体会议、视频会议。
part5今天大家学到了什么?   
文档君为大家总结了一下,你学会了吗?
站在tcp的肩膀上,sctp有一些自己的特点,比如:端点、偶联、流、通路。
消息传输、多路复用,让数据传输更加有效率。
多一次握手,验证标签和验证码,检测心跳,sctp就想给数据一些稳稳的安全感。
一项技术都是早早出现、慢慢改进、逐步应用,需要经过时间的检验。

hifi耳机是什么_hifi耳机和普通耳机有什么区别
激光焊接在激光复合焊技术的应用
比特币区块空间的独特价值在于哪些方面
协作机器人备受重大厂商关注 发那科、安川电机正试图迎头赶上
华为“头戴式显示装置”专利获授权:导线不易受损
让“可靠”变得“更快更安全”的数据传输协议:SCTP
Digi-Key Electronics 庆祝双11购物节, 无条件为中国客户提供免费送货服务
如何在4 mA至20 mA电流环路变送器中使用LT8618
东芝考虑拒绝英国私募基金CVC的200亿美元收购提案
LED投影展览
江丰电子:公司超高纯铜及铜锰、铜铝合金靶材在客户端认证顺利
天猫精灵方糖魔岩灰与小爱音箱mini对比 性价比谁会更好
基于SHiELD项目的五代机装备激光武器可行性分析
立式智能有线远传水表的工作原理及设计
智能终端操作系统是我国迫在眉睫应解决的短板
决策树的构成要素及算法
如何部署出可以用于商业的区块链网络
直流伺服电机的控制方式_直流伺服电机调速方法
Linux之父谈内核版本管理 稳定压倒一切
国芯思辰|基本半导体碳化硅MOSFET B1M080120HC可替代C2M0080120D降低电机驱动功率损耗,导通延迟20ns