SCTP(stream control transmission protocol)是一种新的可靠的,面向报文的传输层控制协议。它兼有UDP和TCP的特性,它是可靠的面向报文的协议,它保存报文的边界,同时它检测丢失的数据,重复的数据和时序的数据。它还有拥塞控制和流量控制。

1.SCTP服务

1.1.多流

TCP客户端和TCP服务器的每一次连接都包含一个单一的流,这个方法存在的问题是流的任何一点丢失会阻塞其余的数据传递,但传输文本的时候,还可以接受,但是当传输的是实时数据(音视频)时,就接受不了了。SCTP在每一个连接中提供多流服务(multistream service),SCTP中称为关联。如果多流中某一个被阻塞。其余的流仍然可以传递他们的数据。

1.2.多接口

SCTP关联支持多接口服务(multihoming service),发送主机和接收主机对每一个关联在每一端可定义多个IP地址。在这个容错方法中,当一条通路发生故障时,可以用另一个接口不终端地传递数据。


1.3.面向连接的服务

SCTP是面向连接的协议,在SCTP中,连接被称为关联,站点A的进程要向站点B的进程发送或接收数据时,其步骤如下:
1.连个SCTP彼此建立连接。
2.双方交换数据。
3.终止连接。

1.4.可靠的服务

SCTP是可靠的传输协议。它利用确认机制检测数据是否安全和可靠的到达。

2.SCTP特性

2.1.传输序列号

SCTP的数据单元是数据大块(DATA chunk)。SCTP使用传输序列号(transmission sequence number,TSN)来对数据块进行编号。
TSN所起的作用类似于TCP中的序列号,TSN是32位长,初始值可取0~2^32-1之间的随机数,每个数据大块的头部必须有相应的TSN。

2.2流标识符

在TCP中每一次连接只有一个流,在SCTP中,每次关联可以有多个流。因此需要用流标识符(SI)进行标识。每个数据大块的头部必须有SI。
这样当他们到达目的端时,它可以正确地放入它的流中,SI是从0开始的16位数字。

2.3流序列号

当一个数据大块到达目的SCTP时,它被传递到适合的流中,并按原来序列进行排列。所以除了SI之外,SCTP还用流序列号
(stream sequence number, SSN)对每个流中的每个数据大块进行定义。

2.4分组

SCTP的分组如下:



SCTP分组和TCP段的不同:
1.TCP中控制信息在头部,而在SCTP中,控制信息是在控制大块中的。
2.一个TCP段中的数据作为一个实体处理,而一个SCTP分组可以携带多个数据大块,每个可能属于不同的流。
3.选项可以是TCP段的一部分,而SCTP分组不存在选项,SCTP中的选项是由定义新的大块字节来处理的。
4.TCP头部的强制性部分是20个字节。而SCTP头部仅是12个字节,SCTP头部较短是由于:
a.SCTP序列号(TSN)属于每个数据大块,因此它位于数据大块的头部。
b.确认号和窗口大小都是每个控制大块的一部分。
c.SCTP头部的长度是固定的12个字节。因此不需要头部长度。不存在 用选项生成头部的长度。
d.在SCTP中没有紧急指针。
5.TCP中校验是16位,而在SCTP中是32位。
6.SCTP中确认标签是关联的标识符。而在TCP中是没有的。TCP中的IP地址和端口地址一起定义了一个连接,
    而在SCTP中,用不同的IP地址是实现多接口,定义每个关联都需要唯一的确认标签。
7.TCP端的头部有一个序列号,它定义了数据部分中的第一个字节编号,在SCTP分组可包含多个数据大块,
   用TSN,SI和SSN定义每个数据大块。
8.TCP中有些段携带控制信息(SYN和FIN),它要占用一个序列号,而在SCTP中,控制大块不适用TSN,SI,
   和SSN。这三个标识符仅属于数据大块,而不是属于数据大块的。

下面我们假定进程A用3个流发送11个报文给进程B,前面4个报文用第一个流,其次3个报文用第二个流,最后
的4个报文用第三个流。


3.SCTP关联

3.1.关联建立

SCTP的关联建立(association establishment)要求四次握手(four-way handshake)。正常的情况下,步骤如下:
1客户端发送第一个分组,他是一个INIT大块(INIT chunk)。
2.服务器发送第二分组,它是一个INIT ACK大块。(INIT ACK chunk).
3.客户端发送第三个分组,它包含一个COOKIE ECHO大块(COOKIE ECHO chunk)。这是一个很简单的大块,
它毫不改变地回应由服务器发送的cookie。
4.服务器发送第4个分组,它包含对接受到COOKIE ECHO大块进行确认的COOKIE ACK大块。(COOKIE ACK)。


在SCTP中可以防止TCP的SYN洪泛攻击(关于SYN洪泛攻击可以参见:
http://blog.csdn.net/todd911/article/details/9877163),
当发送方IP地址被确认时,这个策略是推迟资源分配只到接收到第3个分组:如果第一个分组的发送方式一个攻击者,那么服务器
永远都不会接受到第3个分组,cookie丢失了,但是没有分配资源。

3.2.数据传输

下图,客户端发送4个DATA大块,从服务器接收两个DATA大块。



1.客户端发送第一个分组,它携带TSN分别为7105和7106的2个DATA大块。
2.客户端发送第二个分组,它携带TSN分别为7107和7108的两个DATA大块。
3.第三个分组来自服务器,它包含了对收到的客户端的DATA大块进行确认所需要的SACK大块。与TCP相反,SCTP只有按顺序收到的
最后一个TSN进行确认。而不是下一个所期待的。第三个分组还包含了TSN为121的来自服务器的第一个DATA大块。
4.服务器发送另一个携带TSN为122的最后一个DATA大块的分组,但由于接收到来自客户端的最后的DATA大块已经被确认,所以在这个
分组中不包含SACK大块。
5.最后客户端发送一个分组,该分组包含了一个SACK大块,该SACK大块是对接收到来自服务器最后2个数据大块的确认。

3.3.关联终止

客户端和服务器的任一方都可以关闭连接,但是与TCP不同的是,SCTP不允许半关闭的情形,如果有一端关闭了,另一端必须
停止发送新的数据,如果在终止请求队列中还有数据,那么可以将这些数据发送,并关闭关联。

4.流量控制

SCTP使用和TCP类似的窗口机制进行流量控制。

5.差错控制

SCTP使用和TCP类似的确认和重传机制来进行差错控制。

5.1.确认

在SCTP中,使用一个SACK大块向发送方报缺接收方缓冲区的状态。

5.2.重发

像TCP一样,为了控制丢失的或者丢弃的大块,SCTP使用两种策略:使用重发计时器和接收发到统一丢失大块的4个SACK。

6.拥塞控制

SCTP使用和TCP相同的策略进行拥塞控制。关于拥塞控制,会在以后进行说明。

《数据通信与网络》笔记--SCTP的更多相关文章

  1. 《数据通信与网络》笔记--虚电路网络:帧中继和ATM

    在之前的文章中已经介绍过虚电路交换,详细请参见:http://blog.csdn.net/todd911/article/details/9069447 这边介绍下使用虚电路交换的2中WAN技术:帧中 ...

  2. 《数据通信与网络》笔记--TCP中的拥塞控制

    1.拥塞窗口 发送方窗口的大小不仅取决于接收方,而.而且还取决于网络拥塞的情况. 发送方有2种信息:接收方通告的窗口大小和拥塞窗口的大小,实际的窗口大小事这两者中的最小者. 实际窗口大小 = min( ...

  3. 《数据通信与网络》笔记--QoS

    QoS(Quality of Service)服务质量,是网络的一种安全机制, 是用来解决网络延迟和阻塞等问题的一种技术. 1.QoS参数 衡量服务质量QoS的参数主要包括: 端到端延迟(Delay) ...

  4. 《数据通信与网络》笔记--IPSec

    1.IP层的安全:IPSec IP层安全(IP security,IPsec)是由因特网工程任务组(IETF)设计用来为IP层的分组提供安全的一组协议.IPsec帮助 生成经过鉴别的与安全的IP层的分 ...

  5. 《数据通信与网络》笔记--SSL/TLS

    上次简单地介绍了IP层的安全,今天来介绍下在传输层提供安全性最主要的2个协议:安全套接字层(SSL)协议和传输 层安全(TLS)协议.TLS实际上就是SSL的IETF版本. 1.SSL服务 设计安全套 ...

  6. 网络笔记02数据解析 -1-JSON解析

    1.JSON解析 1.JSON介绍 JSON是最网络传输数据最为广泛的数据格式,没有之一,出身草根,是Javascript的子集,专门负责描述数据格式.Javascript是网页开发的一种脚本语言,和 ...

  7. 网络笔记-unity 实现AOP

    该文章来自网络,如有冒犯,请及时联系! 前提 引用以下文件 Microsoft.Practices.ObjectBuilder2.dll Microsoft.Practices.Unity.dll M ...

  8. Android网络笔记

    (1)网络状态: ConnectivityManager负责管理所有连接的服务(如:系统服务,3G/4G,WiFi,蓝牙等).查看网络状态的类是NetWorkInfo,它是通过Connectivity ...

  9. Github上点赞90k的计算机基础、操作系统、网络笔记,赶紧收藏

    最近,有粉丝发消息给我,说想要好好学习计算机,但是找不到门路啊,所以小编打算给大家推荐一些很奈斯的计算机学习的资料,希望大家赶紧收藏起来好好学习. 资料分为四份,给大家展示了部分内容,头条受限,无法全 ...

随机推荐

  1. 1208. Legendary Teams Contest(dfs)

    1208 简单dfs 对于每个数 两种情况 取还是不取 #include <iostream> #include<cstdio> #include<cstring> ...

  2. IIS 10.0 无法安装 URL rewrite重写模块 2.0解决办法

    [问题描述]系统升级到Windows10后,IIS是10.0的,发现无法安装 URLRewrite重写模块 2.0. [解决办法]打开注册表编辑器,在HKEY_LOCAL_MACHINE\SOFTWA ...

  3. UVa 10305 (拓扑排序) Ordering Tasks

    题意: 经典的拓扑排序.有n个任务,然后某些任务必须安排在某些任务前面完成,输出一种满足要求的序列. 分析: 拓扑排序用离散里面的话来说就是将偏序关系拓展为全序关系.我们将“小于”这种关系看做一条有向 ...

  4. 域名下Web项目重定向出现DNS域名解析错误问题

    问题: 项目使用的是阿里云的ESC,前几天为IP地址添加了域名 发现发送正常请求时跳转没问题,但发送重定向请求时,页面就会出现DNS域名解析错误的情况 1.我在Tomcat的server.xml中配置 ...

  5. 使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法

    使用HttpURLConnection下载文件时经常会出现 java.io.FileNotFoundException文件找不到异常,下面介绍下解决办法 首先设置tomcat对get数据的编码:con ...

  6. codeforces 696C PLEASE 概率dp+公式递推+费马小定理

    题意:有3个杯子,排放一行,刚开始钥匙在中间的杯子,每次操作,将左右两边任意一个杯子进行交换,问n次操作后钥匙在中间杯子的概率 分析:考虑动态规划做法,dp[i]代表i次操作后的,钥匙在中间的概率,由 ...

  7. codeforces 690C3 Brain Network

    simple:并查集一下 #include <vector> #include <iostream> #include <queue> #include <c ...

  8. C++小游戏:扑克牌21点

    21点扑克牌游戏: 程序说明:该程序是模拟21点扑克牌游戏,玩家最多可以要5张牌,但是如果牌的点数之和超过21点,则自动出局,在不超过21点的情况下,玩家与庄家比牌的大小,大者为赢家 程序片段分析: ...

  9. Windows安装pomelo过程

    安装总要出点状况的.操作系统是win7 64bit. 为了保证顺利,打开的是VS2012命令行提示.运行 npm install -g pomelo 经过一系列输出,最后安装提示完成了.但是输入 po ...

  10. mysql操作时遇到的小问题

    mysql数据库在程序中执行sql语句时,或者在执行sql时,数据库表可能会有一些特殊的字符,比如说#,.等,这样在执行时 可能会遇到问题 如以下的表名,backup_2014.2.22, 这个表在查 ...