《数据通信与网络》笔记--SCTP

2024-04-14 22:08

本文主要是介绍《数据通信与网络》笔记--SCTP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904153

相关文章

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个