运输层:TCP拥塞控制

news2024/11/27 10:27:57

1.运输层:TCP拥塞控制

笔记来源:
湖科大教书匠:TCP的拥塞控制

声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考

网络资源:在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等

拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。

输入负载与吞吐量的关系

拥塞控制的三个算法:慢开始、拥塞避免、快重传、快恢复

发送窗口swnd、拥塞窗口cwnd、慢开始门限值ssthresh

1.1 慢开始

每个传输轮次结束后,拥塞窗口按指数值增长

执行慢开始算法,发送方每收到一个报文段的确认时,就把拥塞窗口cwnd+1,然后开始下一轮传输,当cwnd = ssthresh时,改为执行拥塞避免算法

收到报文段确认后,拥塞窗口cwnd+1,cwnd变为2

发送窗口swnd=2(swnd=cwnd),现在可以发送接下来的2个报文段了(1 ~ 2号报文段)

cwnd=2+2=4(收到2个报文段确认),发送窗口swnd=4(swnd=cwnd),现在可以发送接下来的4个报文段了(3 ~ 6号报文段)

接下来情况如上所示
直到cwnd达到16,发送窗口swnd=16,可以发送15 ~ 30号报文段,由于cwnd等于慢开始门限值ssthresh,所以下一轮传输要使用拥塞避免算法

1.2 拥塞避免

每个传输轮次结束后,拥塞窗口线性增长

cwnd=16+1=17,swnd=cwnd

可以发送接下来17个报文段(31 ~ 47号)

发送方收到确认报文段,收到后cwnd+1

经过多次传输后,若cwnd=24,swnd=cwnd时发送的171 ~ 194号报文段丢失,触发超时重传

触发超时重传,判断网络出现拥塞
ssthresh = 发送拥塞时的cwnd / 2
重置cwnd=1,重新执行慢开始算法


小总结1.1和1.2

1.3 快重传

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

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

1.4 快恢复

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

发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。

1.5 小总结

慢开始拥塞窗口cwnd指数增长,当cwnd达到ssthresh时,之后采用拥塞避免,拥塞窗口cwnd线性增长每次加一,出现超时重传后,ssthresh减少为原来的一半,拥塞窗口cwnd重置为1,重新开始传输,经历慢开始算法、拥塞避免算法后,若收到3个重复确认,则执行快重传,ssthresh减少为原来的一半,之后快恢复,cwnd重置为这个ssthresh值,随后执行拥塞避免算法

1.6 例题

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

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

相关文章

windows 10 安装Python 3.10版

一、查找官网 1.python官网需要VPN(建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定的隧道。),打开VPN进行代理之后,打开网址:https://www.python.org/ 二、查找所需下载的系统及版本 1.本机是winodws操作系统&…

计算机网络_ 1.3 网络核心 (数据交换_报文、分组交换)

计算机网络_数据交换_报文、分组交换 报文交换(message switching)分组交换(package switching)存储-转发(store-and-forward)传输延迟分组交换的报文交付时间 分组交换 vs 电路交换 报文交换(m…

zabbix监控部署(都是导图!)

目录 一:监控软件的作用 二:zabbix 简介 1、zabbix 概述 2、zabbix 监控原理 3、 Zabbix 6.0 新特性 (1)Zabbix server高可用防止硬件故障或计划维护期的停机 (2)Zabbix 6.0 LTS新增Kubernetes监控功…

C语言入门篇(二)

前言   续接上一篇文章,此篇继续对C语言的基础知识点进行更新。 C语言入门篇(一) 初始C语言 7. 选择语句8. 循环语句9. 函数9.1 函数的定义9.2 函数的调用 10. 数组10.1 数组定义10.2 数组的下标10.3 数组的使用 11. 操作符12.…

JAVA学习(九)

1.java锁 1.1 AtomicInteger 首先说明,此处 AtomicInteger,一个提供原子操作的 Integer 的类,常见的还有 AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference 等,他们的实现原理相同, 区别在与运算对象类型…

搭建新版security-oauth2协议,流程代码详解,源码分析

前言:最近在学习搭建oauth2协议的开放平台,把搭建框架时的思路以及遇到的问题记录下来。 文章会持续更新,前期可能会比较零碎,最后会整合一起,写一篇从部署到使用、踩坑、依赖版本解决等完整文章。 使用的是Spring S…

【深度学习】深度强化学习初学者指南

一、说明 GAN(Generative Adversarial Networks)是一种深度学习模型,它由两个神经网络组成:一个生成网络和一个判别网络。生成网络学习如何生成类似于给定数据集的新数据,而判别网络则学习如何区分生成网络生成的数据和…

Linux下的基本指令

Linux下的基本指令 操作系统的概念01.adduser指令02.userdel指令03.pwd指令04.ls指令05.tree指令06.cd指令07.touch指令08.mkdir指令(重要)09.rmdir指针&&rm指令(重要)10.man指针(重要)11.cp指令&a…

【macOS 系列】如何调整启动台图标大小和行数

1、使用指令,这是隐藏的技巧,在控制台输入如下指令 defaults write com.apple.dock springboard-rows -int 6 defaults write com.apple.dock springboard-columns -int 8 defaults write com.apple.dock ResetLaunchPad -bool TRUE killall Dock以上表…

基于Web的智慧交通3D可视化系统

前言 城市交通是城市社会活动、经济活动的纽带和动脉,智慧交通系统对城市经济发展和人民生活水平起着极其重要的作用。 背景 随着我国城市化进程不断加快,现代城市交通问题日益受到人们的关注。特别是汽车数量的与日俱增,给城市带来了大量…

Socket介绍及使用Java实现socket通信

一、Socket概述 Socket(套接字)是计算机网络编程中用于实现网络通信的一种机制。它提供了一种编程接口,允许应用程序通过网络进行数据传输,实现不同主机之间的通信。 Socket可以看作是一种抽象的概念,用于描述网络通信…

性能监控软件的软件特色有哪些?

性能监控软件是一种专门用于监测和分析系统性能的软件工具。它可以帮助开发人员、运维人员和系统管理员追踪系统的性能瓶颈,优化系统性能,提供稳定可靠的服务,那性能监控软件的软件特色有哪些? 实时监控:性能监控软件可…

3、CCesium 第一个地图

1、将下载的CCsium库解压到指定目录如D:/install,里面有几个文件 bin:导出的dll examples:一个简单的示例 include:ccesium和第三方库的头文件 lib:搜索cceisum库的一些信息 share:一些说明 我们主要用…

allatori-JAVA代码混淆工具

Allatori是第二代Java混淆器,它为您的知识产权提供全方位的保护。 虽然大多数第二代混淆器都能提供值得信赖的保护,但我们在Allatori中开发了一些额外的功能,使代码的反向工程几乎不可能。 Allatori不仅仅是混淆,它还能最大限度…

为什么你感觉中层管理一直闲着没事干?

点击下方“JavaEdge”,选择“设为星标” 第一时间关注技术干货! 免责声明~ 切记,任何文章不要过度深思(任何东西都无法经得起审视,因为这世上没有同样的成长环境,也没有同样的认知水平同时也「没有适用于所…

eNSP的使用

目录 配置路由器 DHCP——动态主机配置协议 工作过程: 第一种场景——PC首次获取IP地址的情况 第二种场景——pc(客户都)再次获取IP地址的情况 DHCP配置: Telnet 搭建好图后 1.看广播域(路由器有几个接口就有几…

在树莓派上搭建web站点并发布互联网上线【无需公网IP】

文章目录 概述使用 Raspberry Pi Imager 安装 Raspberry Pi OS设置 Apache Web 服务器测试 web 站点安装静态样例站点将web站点发布到公网安装 Cpolar内网穿透cpolar进行token认证生成cpolar随机域名网址生成cpolar二级子域名将参数保存到cpolar配置文件中测试修改后配置文件配…

JUC--CompletableFuture下

对计算速度进行选用 import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit;public class Test4 {public static void main(String[] args) {CompletableFuture<String> a CompletableFuture.supplyAsync(() -> {try { TimeUnit.SE…

list和vector容器的插入与访问操作区别

文章目录 list插入元素和vector插入元素对比案例vector的做法list优化的做法为什么时间复杂度相同还会有性能差异 std::list和std::vector是C中的两种常见数据结构&#xff0c;它们在不同的使用场景下各有优势。 std::vector的内部实现是动态数组&#xff0c;它在连续的内存块…

weak_ptr 智能指针的使用

目录 一&#xff0c;weak_ptr 变量的定义 二&#xff0c;expired() 成员函数 三&#xff0c;lock() 成员函数 四&#xff0c;use_count() 成员函数 五&#xff0c;为什么要用 weak_ptr 一&#xff0c;weak_ptr 变量的定义 weak_ptr 对象的构造有3种方法&#xff1a; 1&am…