TCP重传,滑动窗口,流量控制,拥塞控制

news2025/1/11 0:40:27

TCP重传,滑动窗口,流量控制,拥塞控制

TCP重传机制:

  • 超时重传
  • 快速重传
  • SACK
  • D-SACK

通过序列号与确认应答判断是否要重传

超时重传:
超过指定时间没有收到确认应答报文,就会重发该数据

触发超时重传的情况:

  • 数据包丢失
  • 确认应答丢失

RTT:数据发送时刻到接受到确认的时刻的差值 包的往返时间

RTO:超时重传时间

RTO太长或太短:

  • 太长,效率差,重发慢,丢了半天才重发,性能差
  • 太短:没有丢就重发,增加网络拥塞,导致更多的超时

超时重传时间RTO的值应该略大于报文往返RTT的值

如果超时重发的数据,再次超时的时候,又需要重传,TCP的策略是超时间隔加倍

也就是每次遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁发送

超时重传缺点:

超时周期长,用快速重传机制来解决

快速重传

不以时间为驱动,而是以数据驱动重传

当收到三个相同的ACK报文,会在定时器过期之前,重传丢失的报文段

缺点:不知道重传一个,还是重传所有的问题

于是有了SACK方法:选择性确认

在TCP头部加一个SACK,可以将已收到的数据的信息发送给发送方

这样就可以知道哪些数据接收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相当于是快速重传知道了该重传一个还是全部

D-SACK

使用SACK来告诉发送方有哪些数据被重复接受了

D-SACK的作用:

  • 可以让发送发知道,是发出去的包丢了,还是接收方回应的ACK包丢了
  • 可以知道是不是发送方的数据包被网络延迟了
  • 可以知道网络中是不是把发送发的数据包给复制了

滑动窗口:

上面的传输方式有一个缺点:数据往返时间越长,通信的效率就越低

窗口就是指无需等待确认应答,而可以继续发送数据的最大值

窗口实质上是一个缓存空间,发送发主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据,如果收到确认应答,此时数据就可以从缓存区清除

确认应答报文丢也没事,可以累计确认,累计应答

窗口大小:
通常是由接收方的窗口大小来决定的

否则接收方可能无法正常接收到数据

发送方的滑动窗口:

有四部分:

  • 1 是已发送并收到ACK确认的数据
  • 2是已发送但未收到ACK确认的数据
  • 3 是未发送但总大小在接受方处理范围内
  • 4是未发送但总大小超过接收方处理范围

当发送方把数据全部都发送出去,可用窗口3 为0 在未接到ACK之前无法发送数据

接收方的滑动窗口

三部分:

  • 已经成功接受并确认的数据(等待应用进程读取)
  • 未收到数据但可以接收的数据
  • 未收到数据并不可以接受的数据

接收窗口和发送窗口的大小是相等的吗?

并不完全相等,接受窗口的大小约等于发送窗口的大小的

流量控制:
TCP提供一种机制可以让发送方根据接收方的实际接受能力控制发送的数据量,这就是所谓的流量控制

先发一部分比如80,再发一部分比如120,然后发送方的可用窗口为0了,然后等待80的确认报文,

操作系统缓冲区和滑动窗口的关系:
发送窗口和接受窗口中所存放的字节数,都是放在操作系统内存缓冲区中的,而操作系统的缓冲区,会被操作系统调整

为了避免丢包:TCP规定是不允许同时减少缓存又收缩窗口的,而是采用先收缩窗口,过段时间再减少缓存

当应用程序没有及时读取缓存时,发送窗口和接收窗口

根据流量控制,发送方随着接收方的窗口逐渐减小,直到最后两个窗口减小为0 窗口关闭

数据丢包的发生是因为:当服务器资源紧张的时候,操作系统直接减少了接收缓冲区的大小,这是应用程序无法及时读取缓存数据

TCP是通过让接收方指明 希望从发送方接受的数据大小(窗口的大小)来进行流量控制

如果窗口大小为0时,就会阻止发送方给接收方传递数据,知道窗口变成非0这就是窗口关闭

但是这里存在一个问题:如果接收方向发送方发送的窗口非0的ACK报文,丢失,那么会造成死锁

TCP如何解决窗口关闭时,潜在的死锁现象

TCP,为每一个连接设有一个持续定时器:只要TCP链接一方收到对方的零窗口通知,就启动计时器

这样即使是非0ACK丢失,计时器超时之后依然会发送窗口探测报文,相当于是双保险

糊涂窗口综合症:

如果接收方腾出几个字节并告诉发送方现在有几个字节的窗口,而发送方会义无反顾的发送这几个字节

相当于开公交车送1个人,造成资源的浪费

解决办法:接收方满足不通知小窗口给发送方,发送方开启Nagle算法(延时处理)

拥塞控制

避免「发送方」的数据填满整个网络。

拥塞窗口:发送方维持的一个状态,根据网络拥塞个程度动态变化的

变化规则:

  • 只要网络中没有出现拥塞,cwnd就会增大
  • 但是如果出现拥塞,cwnd就会减少

如何判断是否出现拥塞 :
只要发送了超时重传就认为出现了拥塞

拥塞控制的四个算法

  • 慢启动
  • 拥塞避免
  • 拥塞发生
  • 快速恢复

慢启动:一点一点提高发送的数据包

当发送方每收到一个ACK,拥塞窗口大小+1

20 21 22 23 24

1 2 4 8 16

当拥塞窗口的大小大于慢启动门限的时候使用拥塞避免算法

拥塞避免算法:

每当收到一个 ACK 时,cwnd 增加 1/cwnd

8 9 10 11 12

拥塞避免算法将指数增长变成线性增长

然后慢慢增长之后会出现拥塞,出现丢包,超时重传了

就进入了拥塞发生算法

当发生了「超时重传」,则就会使用拥塞发生算法。

直接开始慢启动,一夜回到解放前,并且更新慢启动门限

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

发生快速重传的拥塞发生算法:

拥塞窗口大小变为原来一半

进入快速恢复算法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还会维持在比较高的值,后续呈线性增长

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

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

相关文章

k8s 资源组版本支持列表

1 kubernetes的资源注册表 kube-apiserver组件启动后的第一件事情是将Kubernetes所支持的资源注册到Scheme资源注册表中,这样后面启动的逻辑才能够从Scheme资源注册表中拿到资源信息并启动和运行API服务。 kube-apiserver资源注册分为两步:第1步,初始化Scheme资源注册表;…

【论文笔记】Training language models to follow instructions with human feedback A部分

Training language models to follow instructions with human feedback A 部分 回顾一下第一代 GPT-1 : 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式;模型架构是基于 Transformer 的叠加解码器(掩码自注意…

【百度Apollo】探索自动驾驶:百度Apollo视觉感知模块的实践与创新

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引入一、百度Apollo视觉感知模块概述二、启动感知模块步骤一:进入 Docker 环境并启动 Dreamview步骤二…

请编写函数fun,该函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 请编…

我开始接单/兼职/搞副业/建设个人社区,为自己谋后路了。

我开始接单/兼职/搞副业/建设个人社区,为自己谋后路了。 简述 大家好,我是小荣,一个前端开发程序员。我最近开始在业余时间接私单了,也在想一些能够带来成长,收入的副业,主要也是为了自己谋后路&#xff…

ctfshow——SQL注入

文章目录 SQL注入基本流程普通SQL注入布尔盲注时间盲注报错注入——extractvalue()报错注入——updataxml()Sqlmap的用法 web 171——正常联合查询web 172——查看源代码、联合查询web 173——查看源代码、联合查询web 174——布尔盲注web 176web 177——过滤空格web 178——过…

【算法刷题 | 贪心算法09】4.30(单调递增的数字)

文章目录 16.单调递增的数字16.1题目16.2解法&#xff1a;贪心16.2.1贪心思路16.2.2代码实现 16.单调递增的数字 16.1题目 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的…

jenkins转载文本

基于Docker容器DevOps应用方案 企业业务代码发布系统 一、企业业务代码发布方式 1.1 传统方式 以物理机或虚拟机为颗粒度部署部署环境比较复杂&#xff0c;需要有先进的自动化运维手段出现问题后重新部署成本大&#xff0c;一般采用集群方式部署部署后以静态方式展现 1.2 容…

ubuntu部署sonar与windows下使用sonar-scanner

ubuntu部署sonar与windows下使用sonar-scanner sonar部署java安装mysql安装配置sonarqube 插件安装sonar-scanner使用简单使用 sonar部署 使用的是sonarqube-7.5&#xff0c;支持的java环境是jdk8&#xff0c;且MySQL版本 >5.6 && <8.0 java安装 打开终端&…

【初识Redis】

初识Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据库&#xff0c;它提供了一个高性能的键值存储系统&#xff0c;并且支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合和有序集合等。Redis的特点包括&#xff1a; 内存存储&…

Apache DolphinScheduler支持Flink吗?

随着大数据技术的快速发展&#xff0c;很多企业开始将Flink引入到生产环境中&#xff0c;以满足日益复杂的数据处理需求。而作为一款企业级的数据调度平台&#xff0c;Apache DolphinScheduler也跟上了时代步伐&#xff0c;推出了对Flink任务类型的支持。 Flink是一个开源的分…

2023年蓝桥杯C++A组第三题:更小的数(双指针解法)

题目描述 小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串&#xff0c;下标从 0 到 n − 1&#xff0c;你可以将其视作是一个具有 n 位的十进制数字 num&#xff0c;小蓝可以从 num 中选出一段连续的子串并将子串进行反转&#xff0c;最多反转一次。小蓝想要将选出的…

罗宾斯《管理学》第13版/教材讲解/考研真题视频课程/网课

本课程是罗宾斯《管理学》&#xff08;第13版&#xff09;精讲班&#xff0c;为了帮助参加研究生招生考试指定考研参考书目为罗宾斯《管理学》&#xff08;第13版&#xff09;的考生复习专业课&#xff0c;我们根据教材和名校考研真题的命题规律精心讲解教材章节内容。 序号名…

神经网络基础(Neural net foundations)

Today we’ll be learning about the mathematical foundations of deep learning: Stochastic gradient descent (SGD), and the flexibility of linear functions layered with non-linear activation functions. We’ll be focussing particularly on a popular combination…

掌握JavaScript面向对象编程核心密码:深入解析JavaScript面向对象机制对象基础、原型模式与继承策略全面指南,高效创建高质量、可维护代码

ECMAScript&#xff08;简称ES&#xff0c;是JavaScript的标准规范&#xff09;支持面向对象编程&#xff0c;通过构造函数模拟类&#xff0c;原型链实现继承&#xff0c;以及ES6引入的class语法糖简化面向对象开发。对象可通过构造函数创建&#xff0c;使用原型链共享方法和属…

Outlook邮箱如何撤回一封已发送邮件?~网页版上

点【已发送邮件】 双击要撤回的已发送的那个邮件 点【…】 点击【撤回消息】 点【确定】 结束&#xff01;

Scott Brinker:16年后,当前的(而非未来的)Martech已经出现,但分布不均。

杜克大学、德勤和美国营销协会共同开展的名为「CMO调查」 的两年一度的项目&#xff0c;是营销行业内的一项重要研究项目&#xff0c;已经持续了十多年。该调查的组织工作做得非常好&#xff0c;每次发布我都迫不及待地想要阅读。 我特别兴奋地阅读了刚刚发布的2024年春季版&a…

Now in Android 4月份更新速览

Now in Android 4月份更新速览 1. 引言 Android 15 Beta的发布标志着Android生态系统的新一轮更新。这次更新旨在提升用户体验和开发效率&#xff0c;让我们一起来了解其中的重要内容。 2. Android 15 Beta介绍 Android 15 Beta带来了一系列新功能&#xff0c;其中包括默认边…

【Qt之·控件·样式表】

系列文章目录 文章目录 前言一、Qt样式表的基础知识1.1 Qt样式表的定义和语法规则1.2 Qt样式表中的选择器和属性1.2.1 盒子模型1.2.2 border 1.3 Qt样式表中的伪类和伪元素 二、编写基本的Qt样式表2.1 在Qt应用程序中引入样式表文件的方式2.2 设置基本的背景色、字体样式等 三、…

Mybatis-Plus扩展接口InnerInterceptor

InnerInterceptor 接口就是 MyBatis-Plus 提供的一个拦截器接口&#xff0c;用于实现一些常用的 SQL 处理逻辑&#xff0c;处理 MyBatis-Plus 的特定功能,例如PaginationInnerInterceptor、OptimisticLockerInnerInterceptor 等,都实现了 InnerInterceptor 接口&#xff0c;并添…