IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> tcp拥塞控制整理 -> 正文阅读

[网络协议]tcp拥塞控制整理

tcp拥塞控制相关整理

每次面试的时候都会被聊到这个话题,但每当要说时,就发现并不能侃侃而言。

按照自己的理解整理tcp拥塞控制一些知识,参考网络,做汇总笔记,如有不对,请指正~

概述tcp

tcp是流式,可靠的传输控制协议。

1:流式传输: 计算机数据的本质是0/1序列(文本流),tcp协议实现了端口到端口的通信,虚拟了文本流的通信。

? 但是,传输层的下一层是网络层,即ip层,会把数据打包发送,ip层的MTU长度限制,会使tcp协议将数据切割成片段,打包依次发送。

2:可靠传输:为了保证数据的可靠传输,tcp采用ack回复+重新发送机制保证(网络中丢包问题)

3:思考:ack和重新发送机制,必然影响到tcp的传输效率,tcp如何在传输可靠与传输效率上做控制的?

==》传输可靠:ack和重传机制

==》传输效率:拥塞控制(发送方)和流量控制(接收方)

拥塞控制和流量控制

拥塞控制:防止过多的数据注入网络,避免网络数据负载过大。(作用与发送方)(慢启动 拥塞避免 快重传 快恢复)

流量控制:告知发送方,接收方可以接收到的数据缓冲区大小,保证数据能完整接收到。(作用于接收方)

流量控制(作用于接收端)

让发送端发送频率不那么快,保证接收端能来得及接收。

tcp协议中定义了一个16位的窗口大小(65535字节),描述了接收方接收窗口大小。

tcp的发送方发送窗口大小,不能大于接收端发回的窗口大小。(如果接收方窗口大小返回0,就停止发送,直到发送非零窗口大小(如果这个报文丢失会死锁?定时器解决,零窗口探测))

tcp滑动窗口(连续ARQ协议):

tcp流量控制是通过滑动窗口实现的:连续ARQ协议

回退N帧ARQ协议

? ==》接收端丢弃第一个没接收到的数据包后面的所有包,

? ==》发送端收到NACK后,从NACK中指示的包

选择性重传ARQ协议

? ==》发送端连续发送数据包但对每个数据包都设有个一个计时器

? ==》当在一定时间内没有收到某个数据包的ACK时,发送端只重新发送那个没有ACK的数据包。

tcp滑动窗口概念:

发送方的拥塞窗口:一般就是我们所说的滑动窗口

接收窗口:tcp首部字段中的一个16bit的字段,描述当前套接字的接收窗口大小。

本质是描述接收方的tcp数据缓冲区大小,在tcp首部中含有一个16bit的字段,发送方会根据这个数据计算自己能发送的数据的长度。

如果接收方窗口大小为0,则发送方停止发送数据。

tcp滑动窗口的实现:

tcp拥塞窗口大小:采用慢启动和拥塞控制算法机制控制,参考下文。

这里有几个概念,一直很模糊:

? 接收窗口(RWND):tcp首部中一个16bit字段(可扩展),ack回复中会带该字段,描述了接收窗口大小,发送方发送数据要小于该值,达到限流。

? 拥塞窗口(CWND):发送方维护的一个窗口大小,是动态变化的,通过慢启动,拥塞避免控制方案。

? 发送窗口(swnd):取拥塞窗口和接收窗口中的较小值,一般和拥塞窗口 值大小一样。

? 慢启动门限(ssthresh):通过慢启动对阻塞窗口进行控制使,cwnd小于ssthresh时成倍数增长,大于ssthresh时加1控制,该值一开始限定,也是动态变化的。

? 最大报文段长度(MSS): tcp这里一般用MTU的值,其实要协商的,一般MSS值为1460,我们所描述的拥塞窗口大小,是以此为单位的

总结:流量控制即,通过拥塞窗口和接收窗口,控制发送数据的大小。

拥塞控制(作用与发送端)

拥塞控制作用于网络,防止过多的数据注入网络,造成网络负载过大(路由器缓冲区等可以造成网络阻塞)。

tcp拥塞控制方法:

? 1:慢启动,拥塞避免

? 2:快重传,快恢复

慢启动,拥塞避免(这里得拥塞窗口和发送窗口一直相等变化)

拥塞窗口:发送方维持了一个动态变化的窗口,取决于网络的拥塞情况。

慢启动和拥塞避免算法(描述了网络的拥塞状况),主要控制了对拥塞窗口的限制。

慢启动算法:

在主机开始时,逐步探测网络状况,改变发送窗口的大小,加倍增长。

拥塞避免算法:

在慢启动的基础上,当发送窗口大于慢启动门限值时,使用该算法改变窗口大小。 加1

判断网络出现拥塞:

在改变发送窗口进行数据传输时,如果没有按时收到确认,可以认为时网络拥塞,这时候,把慢启动门限值降为当前拥塞窗口值得一半,重置拥塞窗口的大小为1,重新进行慢启动运算。

慢启动算法和拥塞避免算法控制“发送窗口改变”:

1:初始化时,拥塞窗口cwnd为1,慢启动门限定位为16

2:采用慢启动算法,实现数据得传输,如果没有发送网络拥塞,发送窗口以2的倍数增长(单位时MSS)(如果发送网络拥塞时,依次执行第5步)。

3:当下一次发送窗口(即拥塞窗口)的值大于慢启动门限值(ssthresh),改为拥塞避免算法,每次发送窗口+1

4:继续进行传输数据,发送窗口(拥塞窗口)值一直在变化,增大。

5:当发送窗口增大到出现网络拥塞时(没有按时收到ack),把慢启动门限值修改为当前拥塞窗口的1/2, 重置当前发送窗口为1,重新开始慢启动,依次第二步循环。 ===》即发生超时重传的场景

在这里插入图片描述

注意:这里在滑动窗口的基础上,有已经接收到对端回复,发送但没有接收到对端ack回复,待发送的数据等数据的维护,以及滑动窗口的移动。

快重传算法和快恢复算法

快重传和快恢复时配合使用,一般发生快重传时,就会触发执行快恢复。

快重传:

发送方只要连续收到三个重复确认的序号,会立即重发没有收到的报文。

tcp认为这种情况不严重,只丢失了一部分数据,进入快恢复算法:

? 1:改变拥塞窗口值为原来的一半(这里的拥塞窗口和发送窗口一样)

? 2:改变慢启动门限为拥塞窗口值(第一步计算后的),

? 3: 继续执行拥塞避免算法。

? 在这里插入图片描述

汇总

发送窗口,拥塞窗口,接收窗口

? ===》发送窗口 是拥塞窗口和接收窗口中的较小值,一般和拥塞窗口一致,因为接收窗口一般很大

我们通常所说的窗口大小,以MSS(最大报文段长度为单位)

流量控制: 通过接收窗口(tcp首部16bit的字段,可扩展)限制,使接收端能正常接收到数据(该值为0停止发送)。

拥塞控制(调整拥塞窗口,对发送数据进行控制,发送窗口动态变化的,慢启动门限也动态变化):

? ==》使用慢启动和拥塞避免算法,

? ==》快重传和快恢复算法

拥塞窗口的基础上,内部有已经发送,允许发送,还没有不允许发送,数据包的一个控制,延迟ack等的控制。

除此之外,tcp其他可靠性通过定时器实现:

? ==》建立连接定时器,重传定时器(RTO),坚持定时器(persist timer),延迟定时器(Delayed ACK),保活定时器(Keep Alive),FIN_WAIT_2定时器,TIME_WAIT定时器

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 10:15:37  更:2021-11-27 10:16:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/6 8:15:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码