【JavaEE初阶】网络原理—关于TCP协议值滑动窗口与流量控制,进来看看吧!!!

前言

🌟🌟本期讲解关于TCP协议的重要的机制“连接的建立和断开”~~~

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

🔥 你的点赞就是小编不断更新的最大动力                                       

🎆那么废话不多说直接开整吧~~

                          TCP的协议特性分析,就像和每位大佬的交谈~~~~ 

目录

📚️1.滑动窗口

 1.1概念的引出

1.2滑动窗口机制

1.3丢包问题 

1.ack丢包 

2.传输的数据丢包

1.4滑动窗口和确然应答的比较

📚️2.流量控制

2.1概念的引出

2.2流量控制机制

📚️3.拥塞控制

3.1概念的引出

3.2拥塞控制机制

📚️4.总结

📚️1.滑动窗口

 1.1概念的引出

我们在之前了解到,关于TCP协议的传输的过程,由于每次传输后的确认应答机制,那么这就导致每次发送方,在发送数据后,收到ack那么才会进行下一次数据的传输。

问题:这就导致大量的时间浪费在等待接收ack的传输过程中了;

所以为了解决这个问题,即在保证可靠传输的前提下进行让效率尽量高一点;那么此时就引入了一个重要的概念“滑动窗口”;

1.2滑动窗口机制

我们之前是发送一个数据,然后等待ack,然后再发送一个数据,那么此时存在滑动窗口后,具体的机制就是如下:

所以此时,即一个“批量传输”的过程,即在发送一个数据后,那么此时就不会进行等待接收ack,那么就直接继续发送数据,然后等连续发送了几条数据后,再进行统一的等待过程;

问题1:那么此时的所谓的“滑动窗口”的滑动的描述是从何而来的呢? 

且看如下的图:

那么此时可以将上述的1~1000,1001~2000,2001~3000....来进行形象的描述成上述的过程,那么此时就可发现,此时的白色部分就像“一个窗口”;

问题2:这里的滑动是如何进行提现的呢?

这里就涉及到什么时候进行下一个数据的传输了,这里不是等所有的对应ack返回后在进行下一批的数据的发送,而是等待一个ack收到后,就直接进行滑动一个空格,那么此时就是有滑动的效果了~~

所以机制总结如下:

1.窗口大小就是无需等待ack的接受的最大数据量的发送(其实就是批量传输的最大值,白色部分方框里面

2.发送前四个阶段的数据的时候,不用等待接收ack(这里的四个即表示的窗口的大小哦

3.当每次收到一个ack时,那么窗口就向后面移动一个空格,以此类推(这里的空格就是数据哦

4.操作系统内核为了维护这个滑动窗⼝, 需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答;( 只有确认应答过的数据, 才能从缓冲区删掉

5.窗口越大,那么对应的网络吞吐量就会变大;

1.3丢包问题 

1.ack丢包 

具体的情况就是如下图所示:

问题3:此时可以看到,图中有几个ack的放回是发生了一定的丢包的问题,那么此时我们该如何进行解决的呢?

解决办法:

不用做任何的操作为啥不用做任何的操作;注意这里涉及到一个重要的概念,即确认序号;

当第一个确认序号为1001的ack丢了之后,那么可以看到下一个2001的ack没有发生丢包,那么就已经表示,在收到2001的ack收到之后,就表示上一个数据1~1001已经传输到主机B了那么此时,就算1001的ack丢包了,也没有太大的关系~~~

ack丢包总结:就算ack在回传的过程中存在丢包的问题,那么只要存在一个ack放回成功,就表示前面的数据已经安全的发送到位了~~ 

2.传输的数据丢包

具体的情况是如下所示的:

问题4:可以看到上述的过程中是存在一个问题的,当数据丢包后是如何进行解决的?

解决:

具体方法在上述的展示中也进行了一定的理解,下面由小编为大家讲解一下具体的过程吧~

在发生1001~2000的数据丢包后,就会发现此时就会一直进行1001的ack确认报文的发送,知道发送方意识到1001~2000丢包了,那么就会进行重传~~

注意:

在接收到丢包的数据之后,如果没有其他的数据丢包,那么就直接发送7001,表示在7001确认序号之前的数据我们都收到了,不用再次从2001的ack进行传输了;那么如果在这个丢包的数据之后还丢包了,那么就会继续发送丢包是数据的首个序号,重复上述解决过程 

总结:

在上述的重传的中,这个过程的效率是非常高的,这里的重传做到了针对性,已经收到了的数据,不必重新发送,那么这种重传就是“快速重传

1.4滑动窗口和确然应答的比较

滑动窗口中也是包含有确认应答的机制,只不过是转成批量的了,批量的前提就是一段时间发送数据很多,如果发送的数据少,那么就会退化成确认应答的机制了

判断可靠性:
如果是滑动窗口:那么就是在丢包的时候,快速重传保证可靠性,连续有多个ack进行数据的索取,那么此时就能进行数据的重传;

如果是确认应答: 如果在丢包的时候,确认应答保证可靠性,达到超时时间后,没收到ack,那么就会进行重传

📚️2.流量控制

2.1概念的引出

我们在上面的描述中了解到了,关于滑动窗口这个概念,这个的窗口越大,更多的数据同时用一块时间等待,提高了效率;

问题5:但是这里的问题就是,窗口大小能无限大吗?

答案是当然不能,因为这里的在提高效率的前提就是保证可靠性,如果接收方的接收缓冲区满了,那么就会造成再次发送数据时,就会发生丢包的后果,这种后果就是重传也没有用了~~

那么此时为了控制发送的速度,就引入了“流量控制”的概念

2.2流量控制机制

此时就涉及到TCP协议报文其中一个字段:即“16位窗口大小”,这里的不为64k,在TCP报头中还涉及到一个参数,即“窗口扩展因子”,那么此时,真正的窗口大小就是16*2^窗口扩展因子;

注意:这个字段是用来反馈给发送方,表示下次发送的窗口的大小

注意:这个字段是在ack的发送的报文中存在才有意义,在普通报文中进行发送,这个是没有意义的;

这里的窗口大小,是根据接收方的接收缓冲区的剩余的空间大小,来设定ack中窗口大小的数值,然后这里发送方会根据这个数值来设置自己的窗口大小; 

具体的图示是如下的:

解释:

如上,当这里的窗口大小为0的时候,可以发现发送方会停止发送,然后发送方会尝试周期性的发送“窗口探测包” (这里的窗口探测包是不携带载荷的,对于业务时是没有影响的,主要的目的是为了触发ack的确认应答报文的发送,来确定这里的ack报文中的窗口大小是多少);那么当这里的缓冲区(窗口)大小不为0的时候,发送方又会继续的发送数据;

📚️3.拥塞控制

3.1概念的引出

在上面我们讲解到了流量控制这个概念,那么我就知道了,这是针对接收方的角度来进行约束发送方的发送速度,而这里谈到的拥塞控制描述的是关于网络环境来影响发送方的发送速率

我们知道网络环境是非常复杂的,如果存在一处地方发生了堵塞的情况,那么就会导致,接收方接收的速度再快也没有用,发送方发送速度再快也没有用;

所以就有以下方案:

如果按照某个窗口的大小进行发送数据,发生了丢包,那么就表示这个网络环境存在堵塞的情况,那么就会减小窗口的大小,如果没有出现丢包的情况,那么就增大窗口的大小~~~

所以总结:

上述的方法简化了问题,适应了复杂多变的网络情况,在中间节点的位置,什么时候拥堵,什么时候不拥堵,那么按照上述的描述,就可以让发送的速率动态的变化

 如此以上,那么就叫做“拥塞控制

3.2拥塞控制机制

我们知道网络环境是非常复杂的,那么对于拥塞控制的标准就是要靠实验来进行的;

具体的步骤:

1.慢启动:

刚开时的时候,传输数据的窗口是非常小的,因为保守起见

2.指数增长:

如果上述的条件没有发生丢包,那么就会增大窗口的大小,此时的增长速率就是按照指数来进行增长的

3.线性增长:

由于指数增长非常快,为了保证网络不会发生阻塞拥堵的情况,那么当达到一定的阈值后,就会线性增长

4.重回再增长:

由于线性增长的持续存在,那么到达一定的时间后,还是会发生网络堵塞引起丢包问题,那么一旦发生丢包问题,那么就会将拥塞窗口设置成一个较低的值,那么此时又会重新开始

那么上述的具体过程就是如下图所示:

 解释:

此时我们看到当出现丢包的问题时:

第一:ack快速重传(滑动窗口中的概念),然后提醒说明此处发生了丢包的问题;

第二:在方法一过后直接将拥塞窗口降到最低,然后重新设定阈值;(经典版本)

第三:在方法一过后直接将拥塞窗口降到一个新的阈值,不是最低点;(这是新的版本没有慢启动和指数增长了,传输的效率大大增加)

 那么以上就是关于拥塞控制的小编了解的全部知识了~~~

📚️4.总结

💬💬本期小编主要讲解了关于TCP协议中比较重要的特性,即滑动窗口,流量控制,以及拥塞控制,当然这里每一节涉及到的丢包的问题,和控制发送方的发送窗口对应的两种控制的机制需要大家好好的理解理解~~~

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!


💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

                 😊😊  期待你的关注~~~

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

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

相关文章

Docker部署教程:打造流畅的斗地主网页小游戏

Docker部署教程:打造流畅的斗地主网页小游戏 一、项目介绍项目简介项目预览 二、系统要求环境要求环境检查Docker版本检查检查操作系统版本 三、部署斗地主网页小游戏下载镜像创建容器检查容器状态查看容器日志安全设置 四、访问斗地主网页小游戏五、总结 一、项目介…

【Unity】游戏UI中添加粒子特效导致穿层问题的解决

这里介绍一下简易的ui系统中,添加粒子特效导致的穿层问题 首先是在ui界面中添加粒子特效预制体,这个时候,控制这个粒子显示层级的有两个方面 上图中,如果你的Sorting Layer ID的值(Layer排序)是大于当前C…

以太网交换安全:DHCP Snooping

一、DHCP Snooping的概念及功能 DHCP Snooping是一种用于增强网络中DHCP服务安全性的技术。以下是对以太网交换安全中的DHCP Snooping进行详细的介绍: 基本概述 定义目的:DHCP Snooping是一种网络安全技术,旨在防止未经授权的DHCP服务器在网…

[Linux进程控制]进程创建|进程终止|进程等待

目录 一、进程创建 1.fork函数 2.写实拷贝 二、进程终止 1.进程退出场景 2.进程常见退出方法 (1)从main函数返回 (2)_exit (3)调用exit 三、进程等待 1.进程等待的方法 (1&#xff…

12. MapReduce全局计数器

一. 计数器概述 在执行MapReduce程序时,控制台的输出中一般会包含如下内容。 这些输出就是MapReduce的全局计数器的输出信息。计数器是用来记录job的执行进度和状态的,它的作用可以理解为日志,方便用户了解任务的执行状况,辅助…

超好玩又简单-猜数字游戏(有手就行)

云边有个稻草人-CSDN博客 我的个人主页 目录 云边有个稻草人-CSDN博客 前言 猜数字游戏的游戏要求 1. 随机数的生成 1.1 rand 1.2 srand 1.3 time 1.4 设置随机数的范围 2. 猜数字游戏实现 2.1 游戏实现基本思路 2.2 代码实现 Relaxing Time! —————————…

基于Qt的多线程并行和循序运行实验Demo

致谢(Acknowledgement): 感谢Youtube博主Qt With Ketan与KDAB精心录制的Qt多线程处理应用教程,感谢Bilibili博主爱编程的大丙对Qt多线程与线程池内容深入浅出的讲解。 一、计算机线程相关概念 线程概念[1]: 在计算机科…

2024年9月电子学会青少年软件编程Python等级考试(三级)真题试卷

2024年9月青少年软件编程Python等级考试(三级)真题试卷 选择题 第 1 题 单选题 以下python表达式的值为True的是?( ) A.all( ,1,2,3) B.any([]) C.bool(abc) D.divmod(6,0) 第 2 题 单选题 下列python代码的…

smuge error

0 Preface/Foreword 1 解决方法 第一步:跳过大文件下载,到时候统一使用快速批处理fast batch git lfs install --skip-smudge 故意敲错指令,会出现git lfs install 的usage: 第二步:clone仓库 下载结果:…

如何用猿大师办公助手实现OA系统中Word公文/合同在线编辑及流转?

在OA系统或者合同管理系统中,我们会经常遇到网页在线编辑Word文档形式的公文及合同的情况,并且需要上级对下级的公文进行批注等操作,或者不同部门的人需要签字审核,这就需要用到文档流转功能,如何用猿大师办公助手实现…

HTB:Analytics[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many open TCP ports are listening on Analytics? 2.What subdomain is configured to provide a different application on the target web server? 3.What application is running on data.analytical.htb? 4.What version of…

计算机网络IP地址分类,子网掩码,子网划分复习资料

IP 地址的概念 IP 地址是独立于硬件地址的逻辑地址,它是由软件提供的地址。 IP 地址是网络层地址。 IP 编址方案和分类 IP 地址由 32 位二进制数构成,分为前缀(网络地址)和后缀(主机地址) 同一网段中每台计算机的 IP 地址是唯一的网络地址的分配全球…

stm32入门教程--DMA 超详细!!!

目录 简介 工作模式 1、数据转运DMA 2、ADC扫描模式DMA 简介 工作模式 1、数据转运DMA 这个例子的任务是将SRAM的数组DataA,转运到另一个数组DataB中,这个基本结构里的各个参数应该如何配置呢? 首先是外设站点和存储器站点的起始地址、…

宇音天下最新力作 | VTX356语音识别合成芯片问世

北京宇音天下科技有限公司,依托在语音技术领域的丰富经验和技术积累,成功推出了一款具有里程碑意义的语音识别合成芯片——VTX356。这款芯片的问世,不仅彰显了公司在智能语音处理领域的专业实力,也预示着智能家居、车载电子、智能…

STM32F1+HAL库+FreeTOTS学习21——内存管理

STM32F1HAL库FreeTOTS学习21——内存管理 1. 内存管理简介2. 内存管理相关的API函数3. 内存管理算法4. 内存管理实验4.1. 实验内容4.2 代码实现4.3 运行结果 5. 总结 上一期我们学习了FreeRTOS中的低功耗Tickless模式,这一期我们学习最后一个章节:内存管…

Linux高手进阶

查看系统资源占用: top:查看CPU、内存使用情况,类似 windows 的任务管理器 默认 5秒刷新一次语法: 直接输入 top按 q 或 ctrl c 退出内容详解: 第一行: top:命令名称 -系统时间up 23:57 min &…

vue3学习记录-单文件组件 CSS 功能

vue3学习记录-单文件组件 CSS 功能 1.组件作用域 CSS1.1为什么要用到样式穿透(:deep())1.2 插槽选择器:slotted(div)1.3 全局选择器:global 2.CSS Modules2.1 基本用法2.2 自定义注入名称2.3 与组合式 API 一同使用 3.…

postman如何安装旧版本不升级(以9.31和11.10版本为例)

postman版本超过10.x(包含10.x),有个大的麻烦,就是需要登录账号,如果网络不佳(其实是外网受限),那就很难受了 功能页面都进不去了!而8.x /9.x等以下版本就不需要登录了。 比如9.31.30这个版本就…

Cesium基础-(Entity)-(Corridor 走廊)

里边包含Vue、React框架代码详细步骤、以及代码详细解释 4、Corridor 走廊 以下是 CorridorGeometry 类的属性、方法和静态方法,以表格形式展示: 属性 属性名类型默认值描述positionsArray.定义走廊中心的坐标点数组。widthnumber走廊