转自:https://blog.csdn.net/qq_38623623/article/details/81290265

TCP拥塞控制

提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性,这就是拥塞控制。
拥塞控制包括四部分:慢启动、拥塞避免、快速重传、快速恢复
发送端向网络一次连续写入的数据量,我们称为SWND(Send Window,发送窗口).但是发送端最终以TCP报文段来发送数据,所以SWND的大小限制了能连续发送的TCP报文段数量。这些TCP报文段的最大长度(仅数据部分)称为SMSS(Sender Maximum Segment Size,发送者最大段大小),其值一般等于MSS。
发送端需要合理的选择SWND的大小,如果SWND太小,会引起明显的网络延迟;反之,如果SWND太大,则容易导致网络拥塞。所以还需要引入一个称为拥塞窗口(Congestion Window,CWND)的状态变量

(1)慢启动
发送方维持一个拥塞窗口CWND的状态变量。它的大小取决于网络的拥塞程度,并且在动态的变化,发送方会让自己的发送窗口等于这个拥塞窗口。
发送方控制拥塞窗口的原则是:
(1)只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。
(2)但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢启动算法:因为不清楚网络状况,所以需要进行试探,将发送窗口逐渐增大,也就是逐渐增大拥塞窗口的数值。在刚开始发送的时候,先把拥塞窗口CWND设置为最大报文段MSS,每收到一个对新报文段的确认后,就把拥塞窗口最多增加一个MSS数值。这种逐步增大的方法可以使分组注入到网络的速率更加合理。【指数增长】

为了防止拥塞窗口过大引起网络拥塞,我们需要设置一个慢开始门限ssthreth状态变量,当cwnd < ssthreth时,使用慢开始算法;当cwnd > ssthrerth时,使用拥塞控制算法;如果两者相等,两个都可以使用。

慢启动的“慢”并不是指CWND增长速率慢而是说在TCP开始发送报文时,先设置CWND=1,使发送端开始时只发送一个报文段进行探测。

(2)拥塞避免
就是让拥塞窗口缓慢增大,即每经过一个往返时间RTT就使cwnd+1,这种线性增长的速率慢很多。
只要发送方判断出网络拥塞,不论是在慢开始还是拥塞控制阶段,都要把慢开始门限值设置为出现拥塞时发送端窗口大小的一半,但不能小于2。然后把cwnd重新置为1,执行慢开始算法。
门限值减半,cwnd重置为1,做目的是减少发送到网络中的分组数,使得发生拥塞的路由器能够有时间能把队列中积压的分组处理掉。
发送端判断网络拥塞的依据:
①传送超时,即TCP重传定时器溢出
②收到重复的确认报文

(3)快重传
快重传算法要求接收方每收到一个失序的报文段后就立即发出重复确认,而不要等到自己发送数据时才进行捎带确认。发送方只要一连收到3个同样的确认报文就应当立即重传数据报,不必等待报文段的重传计时器到期。

(4)快恢复
把慢开始门限减半,“乘法减小”,将cwnd设置为新的慢开始门限值,继续执行拥塞避免算法,“加法增大”

TCP流量控制

如果发送端发送数据太快,接收端来不及接收,可能会丢失数据。所以流量控制是让发送端不要发送太快,要让接收端来得及接收
流量控制是通过大小可变的滑动窗口实现的。
发送端窗口大小不能超过接收端窗口大小的值。TCP窗口单位是字节。
为什么要设置窗口,因为如果TCP发完一次数据等待接收端确认再发下一条数据太慢了。

由图中可知,TCP三次流量控制分别是,第一次窗口大小由400减到300,第二次减到100,第三次减到0。
TCP连接的一方如果收到零窗口通知,就会启动坚持计时器。若坚持计时器的时间到期,就会发送一个零窗口控测报文段,收到报文段的一方就重新设置坚持计时器。

TCP拥塞控制和TCP流量控制相关推荐

  1. ​TCP 拥塞控制详解

    作者:engleliu,腾讯 PCG 开发工程师 本文主要介绍 TCP 拥塞控制算法,内容多来自网上各个大佬的博客及<TCP/IP 详解>一书,在此基础上进行梳理总结,与大家分享.因水平有 ...

  2. TCP流量控制-TCP拥塞控制 拥塞控制与流量控制的区别

    拥塞控制与流量控制的区别: 拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程,涉及所有的主机.所有的路由器,以及与降低网络传输性能有关的所有因素. 相反,流量控制往往是指点对点的通信量的控制 ...

  3. 【计算机网络】传输层 : 总结 ( TCP / UDP 协议 | 寻址与端口 | UDP 协议 | TCP 协议特点 | TCP 连接释放 | TCP 流量控制 | TCP 拥塞控制 ) ★★★

    文章目录 一.传输层 TCP / UDP 协议 ★ 二.寻址端口号 ★ 三.UDP 协议特点 四.UDP 协议首部格式 五.UDP 校验 六.TCP 协议 特点 ★ 七.TCP 报文段首部格式 八.T ...

  4. 计算机网络:TCP滑动窗口的流量控制和拥塞控制

    1. 前言 最近在研究网络通信底层通信原理,所以不得不复习一波计算机网络传输控制协议.那么对于程序开发人员,了解底层网络通信原理,对于我们理解BIO.NIO网络通信十分重要.所以对于程序开发人员来说, ...

  5. 网络协议从入门到底层原理(5)传输层(UDP、TCP - 可靠传输、流量控制、拥塞控制、建立连接、释放连接)

    传输层( Transport) 传输层( Transport) UDP 协议(数据格式.检验和) 端口(Port) TCP TCP - 数据偏移.保留 TCP - 检验和( CheckSum) TCP ...

  6. TCP滑动窗口、流量控制及拥塞控制详解

    一.TCP滑动窗口 TCP虽然是面向字节流的,但是TCP传输的单元确实报文段.一个TCP报文段分为首部和数据部分.TCP首部前20个字节是固定的,后面有4N个字节是可选的.因此,TCP首部最小字节数是 ...

  7. TCP拥塞控制和流量控制区别含义深刻理解

    TCP拥塞控制和流量控制区别含义深刻理解 因为最近学习了TCP/IP协议,学习TCP其中内部的两个很大的特点,就是流量控制和拥塞控制两个优化数据传输的方法,因为两者有很多细节的知识,所以再这里记录一下 ...

  8. 计算机网络传输层(tcp滑动窗口与流量控制、拥塞控制)

    ④ TCP的滑动窗口 TCP的滑动窗口是以字节为单位的,是缓存的一部分,用来暂时存放字节流. 为了便于理解,我们只考虑A向B发送数据,B给出确认的场景.即A有发送窗口,B有接收窗口. 当发送方收到接收 ...

  9. 【计算机网络】传输层 : TCP 拥塞控制 ( 慢开始 | 拥塞避免 | 快重传 | 快恢复 )

    文章目录 一.TCP 拥塞控制 二.TCP 拥塞控制算法 三.慢开始 和 拥塞避免 算法 四.快重传 和 快回复 算法 一.TCP 拥塞控制 TCP 拥塞控制 : ① 拥塞出现表现 : 资源需求总和 ...

最新文章

  1. org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInput........
  2. cf1139D. Steps to One(dp)
  3. Python操作excel进行插入、删除行操作实例演示,利用xlwings库实现
  4. DVWA File Inclusion——Writeup
  5. cisco命令防ping_Cisco路由器命令禁止访问特定网站的四个设置步骤
  6. linux入门怎么学?
  7. python 打印皮卡丘_来简单聊聊python的装饰器呀~
  8. 中级软考-软件设计师(一)
  9. Windows 11 配置使用 Edge 浏览器的 IE 兼容模式(永久)
  10. HTML常用排版标签
  11. K8s实战一:基本概念与命令二
  12. flash player官网地址 建议不要下载flash.cn的
  13. March 7th Wednesday (三月 七日 水曜日)
  14. 组合数据类型综合练习:英文词频统计
  15. 车载以太网工具链,你了解多少?
  16. 【react】createRef
  17. JUC第六讲:ThreadLocal/InheritableThreadLocal详解/TTL-MDC日志上下文实践
  18. element做树形下拉_点睛时刻:移动端需要做SEO优化吗?移动端该怎么做SEO优化?
  19. 怎么取消wps云服务器_云服务器防火墙怎么设置
  20. java对于删除文件失败,的处理方式

热门文章

  1. OstrichNet 简易统计信息收集工具
  2. awk 里面添加单引号
  3. 用c#控制台模拟双色球随机选
  4. SpringMVC自学日志07(整合Mybatic)
  5. Kafka核心源码解析 - LogManager源码解析
  6. JAVA设计模式 - 代理模式
  7. 安居客西安房源爬取 + pyecharts 数据展示
  8. python在windows上安装_在Windows上安装Python | 严佳冬
  9. session对象的使用
  10. dom4j解析xml的简单实用