当前位置: 首页 > news >正文

【计算机网络入门】TCP拥塞控制

目录

1. TCP拥塞控制和TCP流量控制的区别

2. 检测到拥塞该怎么办

2.1 如何判断网络拥塞?

3. 慢开始算法 + 拥塞避免算法

4.快重传事件->快恢复算法

5. 总结


1. TCP拥塞控制和TCP流量控制的区别

TCP流量控制是控制端对端的数据发送量。是局部的概念。

TCP拥塞控制是控制整个网络中每台主机的数据发送量。是整体的概念。

2. 检测到拥塞该怎么办

接收窗口代表数据的接收方接收数据的能力;拥塞窗口代表当前网络传输数据的能力。

如果发送了网络拥塞,应该减小拥塞窗口,也就间接减小了发送窗口。每一台主机就会减少数据的发送量,网络拥塞的情况就会有所缓解。 

2.1 如何判断网络拥塞?

①每个报文段发送以后都能得到ACK确认,不拥塞。

②发出的报文段未能按时收到ACK从而超时重传,严重拥塞。

③收到冗余的ACK,引发快重传,有点拥塞。

(假设接收窗口足够大)

3. 慢开始算法 + 拥塞避免算法

严重拥塞的时候,迅速降低拥塞窗口  + 网络不拥塞的时候,调大拥塞窗口

解释

        刚开始发送数据的时候设置拥塞窗口为1,拥塞阈值为16;此时发送一个报文段立即接受ACK,每收到一个ACK就让拥塞窗口的值+1,所以第二次发送两个报文段收到两个ACK那么拥塞窗口的值+2,以此类推,每次拥塞窗口的值会翻倍;知道阈值窗口达到设定的拥塞阈值16。

        达到拥塞阈值之后,在一个RTT内无论有多少个ACK一律全部把拥塞窗口的值+1。当返回16个ACK的时候,拥塞窗口的值+1。

        假如拥塞窗口到了24的时候出现了超时重传,此时网络处于严重拥塞,我们这个时候立即启用慢开始算法,把拥塞窗口降低到1,此时拥塞阈值的值会变成超时重传之前的拥塞窗口的一半也就是12;后面就继续翻倍,当拥塞窗口为8的时候,发送了8个报文段应该收到8个ACK,但是不能超过新的拥塞阈值12,所以只能加4到达阈值,到达阈值之后算法从慢开始变成了拥塞避免算法,后续不论收到多少ACK每次拥塞窗口只加1

4.快重传事件->快恢复算法

有点拥塞的时候,适当减少拥塞窗口。

我们查看上图,在RTT=12的时候此时发生了超时重传,说明网络拥塞特别严重,需要立即启用慢开始算法,把拥塞窗口的值变为1,拥塞阈值变成之前拥塞窗口的一半。但是如果只是收到了冗余ACK发生了快重传,说明网络此时稍微有点拥塞,采用快恢复算法把当前拥塞窗口变为原来的一半即可;拥塞阈值也变成拥塞窗口的一半,这样一来拥塞窗口和拥塞阈值是相等的,就可以使用拥塞避免算法:即无论收到多少个ACK,拥塞窗口只+1。

5. 总结

        一开始我们使用慢开始算法,使得拥塞窗口成倍数增加,当达到拥塞窗口=拥塞阈值的时候,我们需要切换算法为拥塞避免算法。我们需要进行分辨接下来的事件:

事件1:发生超时重传,说明网络非常拥塞,直接启用慢开始算法,把拥塞窗口重新变为1,拥塞阈值变为原来拥塞窗口的一半。

事件2:发生快重传事件,也就是收到多个重复ack,立即重传;说明网络有点拥塞,此时把拥塞窗口调整为原来的一半,拥塞阈值调整到原来拥塞窗口的一半,这样一来拥塞阈值和拥塞窗口相等,就可以开始拥塞避免算法了。

http://www.lryc.cn/news/547199.html

相关文章:

  • 无人机遥控器无线传输技术解析!
  • 修改hosts文件,修改安全属性,建立自己的DNS
  • MySQL零基础教程16—表连接进阶
  • 【软件系统架构】系列三:数据库系统之三
  • lamp平台介绍
  • 826考研
  • 局域网自动识别机器名和MAC并生成文件的命令
  • todo: 使用融云imserve做登录(android)
  • Mac OS升级后变慢了,如何恢复老系统?
  • cursor使用经验分享(java后端服务开发向)
  • 初次使用 IDE 搭配 Lombok 注解的配置
  • vue 安装依赖npm install过程中报错npm ERR! cb() never called!
  • android接入rocketmq
  • libilibi项目优化(1)使用Redis实现缓存
  • The Rust Programming Language 学习 (二)
  • http链接转成https的链接的几种方法
  • STM32——串口通信 UART
  • mybatis日期格式与字符串不匹配bug
  • 文献分享: ConstBERT固定数目向量编码文档
  • 学习记录-用例设计编写
  • 学习工具的一天之(burp)
  • el-tree右键节点动态位置展示菜单;el-tree的节点图片动态根据节点属性color改变背景色;加遮罩层(opacity)
  • K8s 1.27.1 实战系列(一)准备工作
  • 说一下SpringBoot3新特新和JDK17新特性
  • Linux系统服务安全检测手记
  • 鸿蒙与DeepSeek深度整合:构建下一代智能操作系统生态
  • [创业之路-329]:华为铁三角实施的步骤
  • 1.15-16-17-18迭代器与生成器,函数,数据结构,模块
  • java面向对象(详细讲解)
  • 代码随想录二刷|图论2