(考研湖科大教书匠计算机网络)第五章传输层-第五节:TCP拥塞控制

news2024/9/22 19:43:12
  • 获取pdf:密码7281
  • 专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航

文章目录

  • 一:拥塞控制概述
  • 二:拥塞控制四大算法
    • (1)慢开始和拥塞避免
      • A:慢启动(slow start)
      • B:拥塞避免(congestion avoidance)
      • C:总结
    • (2)快重传和快恢复
      • A:快重传(fast retransmit)
      • B:快恢复(fast recovery)
    • (3)总结

本节对应视频如下

  • 【计算机网络微课堂(有字幕无背景音乐版)】:TCP拥塞控制

一:拥塞控制概述

拥塞控制:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。这种情况就叫做拥塞。在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降,这便是拥塞控制的作用如下图,横坐标是输入负载,代表单位时间内输入给网络的负载数量,纵坐标是吞吐量,代表单位时间内从网络输出的分组量

具有理想拥塞控制的网络

  • 在吞吐量达到饱和之前,网络吞吐量应该等于所输入的负载,故吞吐量是45度的斜线
  • 当输入负载超过某一限度时,由于网络资源受限,吞吐量就不再增长而保持水平,也就是吞吐量达到饱和,这就表明输入的负载中有一部分损失掉了,例如输入到网络中的某些分组被某个结点丢弃了

在这里插入图片描述

对于实际情况中的网络

  • 随着输入负载的增大,网络吞吐量的增长率逐渐减小,也就是在网络吞吐量还未达到饱和之前,就已经有一部分输入分组被丢弃了
  • 当网络吞吐量明显小于理想吞吐量时,网络就进入了轻度拥塞状态
  • 当输入负载达到某一数值时,网络吞吐量反而随输入负载的增大而减小,这时网络就进入了拥塞状态
  • 当输入负载继续增大到某一数值时,网络的吞吐量就减小为0,此时网络便瘫痪了

在这里插入图片描述

因此进行拥塞控制是非常有必要的,实际的拥塞控制曲线应该尽量接近理想的拥塞控制曲线

在这里插入图片描述

二:拥塞控制四大算法

下面我们介绍四种拥塞控制算法的基本原理,假定如下条件

  • 数据是单方向传送,而另一个方向只传送确认
  • 接收方总是有足够大的缓存空间,因而发送方发送窗口的大小由网络的拥塞程度来决定
  • 最大报文段MSS的个数为讨论问题的单位,而不是以字节为单位

如下图,发送方向接收方发送TCP数据报文段,接收方收到后给发送方发送TCP确认报文段

在这里插入图片描述

(1)慢开始和拥塞避免

发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化

  • 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;只要网络出现拥塞,拥塞窗口就减少一些
  • 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)

发送方将拥塞窗口作为发送窗口swnd,即swnd = cwnd。同时还需要维护一个慢开始门限ssthresh状态变量

  • cwnd < ssthresh:使用慢开始算法;
  • cwnd > ssthresh:停止使用慢开始算法而改用拥塞避免算法;
  • cwnd = ssthresh:既可使用慢开始算法,也可使用拥塞避免算法

为了更清晰地展示出拥塞控制过程,我们还可以绘制出一副拥塞窗口随传输轮次变化的图

  • 横坐标为传输轮次:是指发送方给接收方发送数据报文段后,接收方给发送方发回相应的确认报文段,一个传输轮次所经历的时间其实就是往返时间(并非固定)。使用传输轮次是为了强调把拥塞窗口所允许发送的报文段都连续发送出去并收到了对已发送的最后一个报文段的确认
  • 纵坐标是拥塞窗口:它会随网络拥塞程度以及所使用拥塞控制算法动态变化

在这里插入图片描述

在TCP双方建立连接逻辑关系时,拥塞窗口的值会设置为1,另外还需要设置ssthresh初始值为16

在这里插入图片描述

A:慢启动(slow start)

慢启动:发送方每收到一个对新报文段的确认时就把拥塞窗口值+1,然后开始下一轮传输,当拥塞窗口值增长到慢开始门限时就改为执行拥塞避免算法

如下图,发送刚当前拥塞窗口值为1,而发送窗口等于拥塞窗口,因此发送方当前只能发送一个TCP数据报文段

  • 发送方发送0号数据报文段
  • 接收方收到后,给发送方发回对0号报文段的确认报文段
  • 发送方收到该确认报文段后,将拥塞窗口值+1变为2
  • 这意味着发送方现在可以发送1-2号共两个数据报文段
  • 接收方收到后,给发送方发回对1-2号报文段的确认报文段
  • 发送方收到该确认报文段后,将拥塞窗口值+2变为4
  • 这意味着发送方现在可以发送3-6号共三个数据报文段
  • 接收方收到后,给发送方发回对3-6号报文段的确认报文段
  • 发送方收到该确认报文段后,将拥塞窗口值+4变为8
  • 这意味着发送方现在可以发送7-14号共八个数据报文段
  • 接收方收到后,给发送方发回对7-14号报文段的确认报文段
  • 发送方收到该确认报文段后,将拥塞窗口值+8变为16

在这里插入图片描述

发送方当前的拥塞窗口值已经增大到了慢开始门限值,之后需要启动拥塞避免算法

B:拥塞避免(congestion avoidance)

拥塞避免:和慢启动不同,拥塞避免在每个传输轮次结束后,拥塞窗口只能线性+1

如下图

  • 发送方现在可以发送15-30号共16个数据报文段
  • 接收方收到后,给发送方发回对15-30号报文段的确认报文段
  • 发送方收到该确认报文段后,将拥塞窗口值+1变为17
  • 发送方现在可以发送31-47号共17个数据报文段
  • 接收方收到后,给发送方发回对31-47号报文段的确认报文段
  • 发送方收到该确认报文段后,将拥塞窗口值+1变为18

在这里插入图片描述

重复上述过程很多次,发送方将171-194号共24个数据报文段发送后,其中有些报文段丢失了,这必然会造成发送方对这些丢失报文段的超时重传,发送方判断网络可能出现了堵塞,进行以下工作

  • 将慢开始门限更新为发生拥塞时的一半,对于本例更新为12

  • 将cwnd值减少为1,并重新开始执行慢开始算法
    在这里插入图片描述

  • 当慢开始执算法执行到拥塞窗口值增大到新的慢开始门限时,就停止使用慢开始算法,转而执行拥塞避免算法
    在这里插入图片描述

C:总结

TCP发送方一开始使用慢开始算法,让拥塞窗口值从1开始按指数规律增大,当拥塞窗口值增大到慢开始门限值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口按线性+1的规律增大。当发生超时重传时,就判断网络很可能发生了拥塞,于是采取相应措施

  • 将慢开始门限更新为发生拥塞时的一半
  • 将cwnd值减少为1,并重新开始执行慢开始算法

拥塞窗口值又从1开始按指数规律增大,当增大到新的慢开始门限值时,停止使用慢开始算法,转而执行拥塞避免算法,让拥塞窗口按线性+1的规律增大

在这里插入图片描述

(2)快重传和快恢复

慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法(TCP Tahoe版本)。1990年又增加了两个新的拥塞控制算法(改进TCP的性能),这就是快重传和快恢复(TCP Reno版本) 。这是因为个别报文段会在网络中丢失,但实际上网络并未发生拥塞

  • 这将导致发送方超时重传,并误认为网络发生了拥塞;
  • 发送方把拥塞窗口cwnd又设置为最小值1,并错误地启动慢开始算法,因而降低了传输效率

A:快重传(fast retransmit)

快重传:使发送方尽快进行重传,而不是等超时重传计时器超时再重传。采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。具体来说

  • 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认
  • 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认
  • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的超时重传计时器超时再重传

对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞(进而降低拥塞窗口cwnd为1)。使用快重传可以使整个网络的吞吐量提高约20%

如下图

  • 发送方发送1号数据报文段

  • 接收方收到后给发送方发回对1号报文段的确认

  • 在该确认报文段到达发送方之前,发送方还可以将发送窗口内的2号数据报文段发送出去

  • 接收方收到后给发送方发回对2号报文段的确认

  • 在该确认报文段到达发送方之前,发送方还可以将发送窗口内的3号数据报文段发送出去,但是该报文丢失了

  • 接收方自然不会给发送方发回针对该报文段的确认
    在这里插入图片描述

  • 发送方还可以将发送窗口内的4号数据报文段发送出去

  • 接收方收到后发现这不是按序到达的报文段,因此给发送方发回针对2号报文段的重复确认,表明现在希望收到的是3号报文段但是未收到,而是收到了未按序到达的报文段
    在这里插入图片描述

  • 发送方还可以将发送窗口内的5号数据报文段发送出去

  • 接收方收到后发现这不是按序到达的报文段,因此给发送方发回针对2号报文段的重复确认
    在这里插入图片描述

  • 发送方还可以将发送窗口内的6号数据报文段发送出去

  • 接收方收到后发现这不是按序到达的报文段,因此给发送方发回针对2号报文段的重复确认

  • 至此,发送方会收到3个连续的对2号报文段的重复确认,就立即重传3号报文段
    在这里插入图片描述

  • 接收方收到后给发送方发回针对6号报文段的确认,表明序号到6为止的报文段都正确接收了,这样就不会造成对3号报文段的超时重传,而是提早进行了重传
    在这里插入图片描述

B:快恢复(fast recovery)

快恢复:发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法

  • 发送方将慢开始J限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半; 开始执行拥塞避免算法
  • 也有的快恢复实现是把快恢复开始时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh + 3
  • 既然发送方收到3个重复的确认,就表明有3个数据报文段已经离开了网络;
  • 这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中;
  • 可见现在网络中不是堆积了报文段而是减少了3个报文段。因此可以适当把拥塞窗口扩大些

(3)总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/357341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CTFer成长之路之举足轻重的信息搜集

举足轻重的信息搜集CTF 信息搜集 常见的搜集 题目描述: 一共3部分flag docker-compose.yml version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-information-backk:latestports:- 80:80启动方式 docker-compose up -d 题目Flag n1book{in…

设计模式-代理模式

控制和管理访问 玩过扮白脸&#xff0c;扮黑脸的游戏吗&#xff1f;你是一个白脸&#xff0c;提供很好且很友善的服务&#xff0c;但是你不希望每个人都叫你做事&#xff0c;所以找了黑脸控制对你的访问。这就是代理要做的&#xff1a;控制和管理对象。 监视器编码 需求&…

数据挖掘,计算机网络、操作系统刷题笔记49

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记49 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

Spring Cloud Alibaba 微服务简介

微服务简介 1 什么是微服务 2014年&#xff0c;Martin Fowler&#xff08;马丁福勒 &#xff09; 提出了微服务的概念&#xff0c;定义了微服务是由以单一应用程序构成的小服务&#xff0c;自己拥有自己的进程与轻量化处理&#xff0c;服务依业务功能设计&#xff0c;以全自动…

将Nginx 核心知识点扒了个底朝天(四)

为什么 Nginx 不使用多线程&#xff1f; Apache: 创建多个进程或线程&#xff0c;而每个进程或线程都会为其分配 cpu 和内存&#xff08;线程要比进程小的多&#xff0c;所以 worker 支持比 perfork 高的并发&#xff09;&#xff0c;并发过大会榨干服务器资源。 Nginx: 采用…

程序员35岁中年危机不是坎,是一把程序员自己设计的自旋锁

有时候&#xff0c;我会思考35岁这个程序员的诅咒&#xff0c;确切来说是中国程序员的独有的诅咒。 优秀的程序员思维逻辑严谨&#xff0c;弄清楚需求的本质是每天重复的工作&#xff0c;也是对工作的态度&#xff0c;那弄清楚诅咒的来源&#xff0c;义不容辞。 被诅咒的35岁 …

【爬虫】自动获取showdoc指定项目中的所有文档

▒ 目录 ▒&#x1f6eb; 导读需求1️⃣ 格式分析官方下载文件内容prefix_info.json文件格式2️⃣ 封包分析/api/page/info/api/item/info3️⃣ 编码代码特点问题&#x1f4d6; 参考资料&#x1f6eb; 导读 需求 showdoc是一个API文档、技术文档工具网站&#xff0c;经常能搜到…

String intern方法理解

1、原理 参考学习视频&#xff1a; https://www.bilibili.com/video/BV1WK4y1M77t/?spm_id_from333.337.search-card.all.click&vd_source4dc3f886f5ce1d43363b603935f02bd1 String s1 “hello”; String s1 "hello"; 代码原理解释如下图String s1 new Str…

进程章节总结性实验

进程实验课笔记 本节需要有linux基础&#xff0c;懂基本的linux命令操作即可。 Ubuntu镜像下载 https://note.youdao.com/s/VxvU3eVC ubuntu安装 https://www.bilibili.com/video/BV1j44y1S7c2/?spm_id_from333.999.0.0 实验环境ubuntu22版本&#xff0c;那个linux环境都可以…

Linux-VMware常用设置(时间+网络)及网络连接激活失败解决方法-基础篇②

目录一、设置时间二、网络设置1. 激活网卡方法一&#xff1a;直接启动网卡&#xff08;仅限当此&#xff09;方法二&#xff1a;修改配置文件&#xff08;永久&#xff09;2. 将NAT模式改为桥接模式什么是是NAT模式&#xff1f;如何改为桥接模式&#xff1f;三、虚拟机网络连接…

20230219 质心和重心的区别和性质

质心&#xff1a;&#xff08;无需重力场的前提&#xff09;所有质点的位置关于它们的质量的加权平均数。 重心&#xff1a;&#xff08;需要重力场的前提&#xff09;重力对系统中每个质点关于重心的力矩之和为零。 质心&#xff1a; xˉ∑i1nmixi∑i1nmi,yˉ∑i1nmiyi∑i1nmi…

Fiddler的报文分析

目录 1.Statistics请求性能数据 2.检测器&#xff08;Inspectors&#xff09; 3.自定义响应&#xff08;AutoResponder&#xff09; 1.Statistics请求性能数据 报文分析&#xff1a; Request Count: 1 请求数&#xff0c;该session总共发的请求数 Bytes …

vue3.0 生命周期

目录前言&#xff1a;vue3.0生命周期图例1.beforeCreate2.created3.beforeMount/onBeforeMount4.mounted/onMounted5.beforeUpdate/onBeforeUpdate6.updated/onUpdated7.beforeUnmount/onBeforeUnmount8.unmounted/onUnmounted案例&#xff1a;总结前言&#xff1a; 每个Vue组…

智慧城市应急指挥中心数字化及城市驾驶舱建设方案

目 录 第一章 项目概述 1.1 项目背景 1.2 项目范围 第二章 建设内容 2.1 三维可视化平台 2.1.1 多源数据接入 2.1.2 可视化编排 2.1.3 三维可视化编辑 2.1.4 空间数据可视化 2.1.5 集成框架支持 2.2 可视化场景定制开发 2.2.1 城市驾驶总舱 2.2.2 城市安全分舱 2.…

PLT/PDF转CAD:scViewerX 8.1 Crack

scViewerX是一个功能强大的 ActiveX 控件&#xff0c;允许您查看、打印和转换 PLT、Adobe PDF、Autodesk DWF、CGM、Calcomp、HPGL/2、Gerber、TIF、CALS 和其他几种格式。 ScViewerX 可以将您的文件转换为多种不同的输出文件格式&#xff0c;包括 PDF、PDF/A、TIFF、DXF、DWF、…

【人工智能AI】三、NoSQL 实战《NoSQL 企业级基础入门与进阶实战》

帮我写一篇介绍NoSQL的技术文章&#xff0c;文章标题是《NoSQL 实战》&#xff0c;不少于3000字。这篇文章的目录是 3.NoSQL 实战 3.1 MongoDB 入门 3.1.1 MongoDB 基本概念 3.1.2 MongoDB 安装与配置 3.1.3 MongoDB 数据库操作 3.2 Redis 入门 3.2.1 Redis 基本概念 3.2.2 Red…

windows微软商店下载应用失败/下载故障的解决办法;如何在网页上下载微软商店的应用

一、问题背景 设置惠普打印机时&#xff0c;需要安装hp smart&#xff0c;但是官方只提供微软商店这一下载渠道。 点击安装HP Smart&#xff0c;确定进入微软商店下载。 完全加载不出来&#xff0c;可能是因为开了代理。 把代理关了&#xff0c;就能正常打开了。 但是点击“…

IsADirectoryError: [Errno 21] Is a directory【已解决】

问题描述 生成数据&#xff0c;存储时候报错。 IsADirectoryError: [Errno 21] Is a directory: /home/LIST_2080Ti/njh/CHB-MIT-DATA/epilepsy_eeg_classification/data_processing/chb28/520.csv 问题分析 按我的认知&#xff0c;python执行的时候&#xff0c;比如这句 d…

FLAT:Flat-LAttice Transformer

中文NLP的一个问题&#xff0c;就是中文的字除了句句之间有标点符号之外都是连在一起的&#xff0c;不像英文词语是单独分割的。中文NLP处理一般会有2种方式&#xff1a;基于字的&#xff0c;char-level。现在比较常用的方法&#xff0c;但会缺少词组的语义信息。基于词的&…

TCP流套接字编程

ServerSocket API ServerSocket 是创建TCP服务端Socket的API。 ServerSocket 构造方法&#xff1a; ServerSocket 方法&#xff1a; Socket API Socket 是客户端Socket&#xff0c;或服务端中接收到客户端建立连接&#xff08;accept方法&#xff09;的请求后&#xff0…