TCP协议原理二

news/2024/4/26 3:17:03/文章来源:https://blog.csdn.net/buhuisuanfa/article/details/129011713

在这里插入图片描述

文章目录

  • 四、滑动窗口
  • 二、流量窗口
  • 三、拥塞控制

四、滑动窗口

前面我们学习了 确认应答,超时重传,连接管理,这些机制都为我们TCP的可靠性提供了保证,当然在保证TCP的可靠性的同时,传输效率也受到了一定的影响,我们的TCP也将尽可能的提高传输效率,大家注意这里的提高传输效率,实际上是尽量的降低效率的亏损,无论我们如何提高都不可能比UDP这种不考虑可靠性的效率高,我们要做的是尽量让TCP效率高一些。
在这里插入图片描述
对于我们基本的确认应答来言,每次发一个数据后都需要收到一个ack后才发下一个数据。
在这里插入图片描述
滑动窗口的本质就是批量发送一组数据,然后使用一份时间来等待多个ack,这样就可以大大的提高性能。
窗口大小: 不需要等待,直接可以发送的数据最大的量。
我们在这里并不是等所有的ack到达后,才继续往下发,而是到一个ack就继续往下发一条,操作系统内核为了维护这个滑动窗口,需要开辟 发送缓冲区 来记录当前还有哪些数据没有应答;只有确认应答过的数据,才能从缓冲区删掉。窗口越大,网络的吞吐率就越高。
在这里插入图片描述
比如这里我们等待的ack是1001-5000,我们收到了2001这个ack,证明2001之前的数据(1001-2000)已经确定了,我们接下来就可以立即再发一条,也就是5001-6000的数据,此时意味着我们等待的ack的范围就是2001-6000了
上面的情况都是理想状态,那如果出现了丢包了怎么办?
1. ack丢了
在这里插入图片描述
如果是ack丢了,我们不做任何处理也没事,为什么? 就需要我们弄清楚ack的含义是什么。
ack代表的是该序号之前的所有数据都确认到达了。
比如我们这里的1001的ack丢失了,但是我们的2001ack顺利到达了,2001到达的含义就是:2001之前的所有数据都确认到达了(1-1000 和 1001-2000都已到达),2001这个ack已经覆盖了上一个丢失的1001ack的信息了。

2. 数据丢了
在这里插入图片描述
我们这里的2001-3000丢包了,接下来3001-4000到达接收方之后,接收方给发送端的ack确认序号仍然是2001,表达的意思就是在索要2001开头的数据,我们可以发下下面的几个ack返回的都是2001,这时候发送端就会发现虽然已经发了许多数据了,但是接收端一直在反复索要2001开头的数据,证明2001-3000是没有收到的需要重传了。
等我们重传2001-3000的数据之后,由于2001-8000的数据都已经接收到了,于是接下来接收端索要的数据就是8001了。
快速重传: 就是我们上述丢包后重传的情况,也可以理解为超时重传机制在滑动窗口场景的变形。
有的同学可能会问到,那这样接收端接收的数据不就乱序了吗?
这个不必担心,因为我们TCP有接收缓冲区,会在缓冲区根据序号进行重新排序。

二、流量窗口

简单理解一下,我们流量窗口就是干涉滑动大小的机制。
随着滑动窗口的变大,我们的传输效率也在变高,但能无限增大吗?

  1. 如果无限大,相当于不等ack,那么可靠性能否保证?
  2. 窗口太大,会消耗大量的系统资源
  3. 接收方的处理能力能否跟得上?

我们接收方的处理能力是我们滑动窗口大小的一个很重要的约束条件,我们流量控制要进行的工作就是根据接收方的处理能力,来协调我们发送方的放松速度。
衡量接收方的处理能力是一个非常复杂的问题,可以从多个角度去衡量,比如去计算我们接受方的处理速度,但这种方式太麻烦了,于是我们这里有一个更简单的方法,就是判断接收方缓冲区的剩余大小
在这里插入图片描述
我们接收方每次接收到数据之后,都需要计算一个水桶剩余的容量,然后将这个值通过ack报文返回给发送方,然后发送方就能根据这个值来决定接下来发送的速率大小(窗口大小)是多少了。
在这里插入图片描述
16位的窗口大小是否意味着窗口大小最大是64kb了?
并不是,我们的TCP在选项部分引入了一个窗口扩展因子 ,比如当我们窗口大小已经是64kb了但是仍然不够,于是在选项里的扩展因子写了个2,就代表64kb << 2 == 256 kb,这样就可以动态调整窗口大小了。
在这里插入图片描述
由于我们接收端的缓冲区剩余容量是一直动态变化的,所以每次返回的ack的窗口大小也是在不断变化的。

  1. 接收端一旦发现自己的缓冲区快满了,会将窗口大小设置成一个更小的值通知发送端
  2. 发送端发现会随着接收端ack报文中的窗口大小减小而减慢自己的发送速度
  3. 如果接收端缓冲区慢了,就会将窗口设置为0,发送方将不再发送数据,会定期发送一个窗口探测数据段,使接收端发送一个新的窗口大小给发送端

三、拥塞控制

拥塞控制和流量控制共同去决定发送方的窗口大小为多大,我们刚刚学习的流量控制考虑的是接收方的处理能力,而我们拥塞控制考虑的是传输过程中各个结点的处理能力。
在这里插入图片描述
我们刚刚只考虑了B的处理能力,越没有考虑这些中间结点的因素,决定A发送速度是有这两者最差的一个决定的,也就是典型的木桶效应。
我们中间的结点是错综复杂的,不太好衡量,但是大佬们总是有办法,想出了一个实验的方式来
测试出一个合适的值。
拥塞控制: 本质上就是通过实验的方式,来逐渐找到了一个合适的窗口大小。
在这里插入图片描述
慢启动: 我们可以发现0轮时,窗口大小是1(1不是一字节,而是一个单位,具体代表多少不是我们考虑的范围),以非常慢的速度发送数据,如果发现没有丢包,就扩大窗口。第一轮窗口大小为2,扩大了一倍,初始阶段,由于窗口大小比较小,只要每一轮不丢包窗口都扩大一倍(指数增长)。
阈值: 因为指数方式增长的很快,为了不增长那么快,引入了一个慢启动的阈值,当拥塞窗口超过这个阈值的时间,不再按照指数增长,而是按照线性方式增长。
在接下来,如果传输过程中一旦出现了丢包,如果是极少量的丢包仅仅触发超时重传,如果大量丢包,我们就认为网络拥堵,到达了发送速率的极限,此时就将窗口大小一次性缩到很小的值,然后重复上述的指数增长和线性增长的过程,因为我们的拥塞窗口不是固定的值,而是一直动态变化的。

流量控制和拥塞窗口共同决定了发送方实际发送的窗口大小(流量控制和拥塞控制的较小值)

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

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

相关文章

05 DC-AC逆变器(DCAC Converter / Inverter)简介

文章目录0、概述逆变原理方波变换阶梯波变换斩控调制方式逆变器分类逆变器波形指标1、方波变换器A 单相单相全桥对称单脉冲调制移相单脉冲调制单相半桥2、方波变换器B 三相180度导通120度导通&#xff08;线、相的关系与180度相反&#xff09;3、阶梯波逆变器独立直流源二极管钳…

BLIP2-图像文本预训练

文章目录摘要解决问题算法模型结构通过frozen图像编码器学习视觉语言表征图像文本对比学习&#xff08;ITC&#xff09;基于图像文本生成&#xff08;ITG&#xff09;图文匹配&#xff08;ITM&#xff09;从大规模语言模型学习视觉到语言生成模型预训练预训练数据预训练图像编码…

Gehpi的网络布局

Gehpi的网络布局1. 力引导布局2. 辅助布局布局是网络可视化中的重要概念&#xff0c;指将点和边通过某种策略进行排布&#xff0c;应尽可能满足以下4个原则&#xff1a; 节点均匀分布在有限的区域内避免边的交叉和弯曲保持边的长度一致整体布局能反映图内在的特性 Gephi的布局…

Vision Transformer学习了什么-WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION

WHAT DO VISION TRANSFORMERS LEARN? A VISUAL EXPLORATION 文章地址 代码地址 摘要 视觉转换器( Vision Transformers&#xff0c;ViTs )正在迅速成为计算机视觉的事实上的架构&#xff0c;但我们对它们为什么工作和学习什么知之甚少。虽然现有研究对卷积神经网络的机制进…

Bunifu.UI.WinForms 6.0.2 Crack

Bunifu.UI.WinForms为 WinForms创建令人惊叹的UI Bunifu.UI.WinForms我们为您提供了现代化的快速用户界面控件。用于 WinForms C# 和 VB.NET 应用程序开发的完美 UI 工具 简单 Bunifu.UI.WinForms没有臃肿的特征。正是您构建令人惊叹的 WinForms 应用程序所需要的。只需拖放然…

JavaSe第3次笔记

1.String str "hello";字符串类型。 2.两个字符串类型相加意思是拼接&#xff0c;类似于c语言里面的strcat函数。 3.整型变成字符串类型: int a 10; String str String. valueOf(a); 4.当字符串和其他类型进行相加的时候&#xff0c;结果就是字符串。(不完全…

MS9132是一款USB 3 0投屏芯片,内部集成USB 3 0 Device控制器、数据收发模块、音视频处理模块

MS9132是一款USB 3.0投屏芯片&#xff0c;内部集成USB 3.0 Device控制器、数据收发模块、音视频处理模块。MS9132可以通过USB 3.0接口将PC、智能手机、平板电脑上的信息显示或扩展到更大尺寸的显示设备&#xff0c;支持HDMI视频接口输出。 主要功能特征 HDMI 1.4b兼容 支持EDI…

RK3568编译Android11和目录讲解

文章目录 前言一、下载android11源码二、环境搭建1.增加交换内存三、编译瑞芯微原厂源码四、目录讲解总结前言 本文记录在Ubuntu18.04中编译Android11,只有编译了源码,后面才能进行驱动的开发,有兴趣的小伙伴可以和我一起学习吧! 提示:以下是本篇文章正文内容,下面案例可…

【华为OD机试模拟题】用 C++ 实现 - 剩余可用字符集 or @分割可用字符集(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明剩余可用字符集 or @分割可用字符集题目输入输出示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才…

烙铁使用方法

烙铁使用 烙铁是硬件工程师最经常使用的工具之一,一把性能保持良好的烙铁能帮助我们快速进行电路调试。烙铁第一次加热时采用焊锡均匀涂覆在烙铁头上,以便去除包在烙铁头上面的氧化物。在工作中我们需要根据情况选择合适的烙铁头类型,合适的温度进行操作。完成焊接后要在烙铁…

华为OD机试用Python实现 -【贪心的商人 or 最大利润】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲贪心的商人 or 最大利润题目描述输入描述输出描述说明示例一输入输出示例二输入输出Python 代码实现华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog.c…

基于SpringCloud的可靠消息最终一致性01:定理、解决方案和框架

在互联网发展的早期,单体架构是主流的开发模式。因为访问的用户不多,所以整个系统的结构比较简单,就像一口竖井,从上到下,一通到底,如下图所示: 图一:单体应用 随着业务复杂度的不断提升,以及用户需求的不断增加,原来单个的业务系统已经不堪重负了。就好像一个窗口前…

MS9123是一款单芯片USB投屏器,内部集成了USB2 0控制器和数据收发模块、视频DAC和音视频处理模块,MS9123可以通过USB接口显示或者扩展PC、

MS9123是一款单芯片USB投屏器&#xff0c;内部集成了USB2.0控制器和数据收发模块、视频DAC和音视频处理模块&#xff0c;MS9123可以通过USB接口显示或者扩展PC、智能手机、平板电脑的显示信息到更大尺寸的显示设备上&#xff0c;支持CVBS、S-Video视频接口。 主要功能特征 C…

ChatGPT的互补工具Perplexity的详细使用方法(持续更新)

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

华为OD机试用Python实现 -【云短信平台优惠活动】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲云短信平台优惠活动题目描述输入描述输出描述示例一输入输出说明示例二输入输出说明Python 代码实现代码编写思路华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看…

华为OD机试题,用 Java 解【图片整理】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

【华为OD机试模拟题】用 C++ 实现 - 求解连续数列+和最大子矩阵(2023.Q1 双倍快乐)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明求解连续数列题目输入输出描述示例一输入输出Code和最大子矩阵题目输入输出示例一输入输出说明

key作用与原理

for循环遍历的时候&#xff0c;如果打乱数组的顺序&#xff0c;最好不要用index作为key&#xff0c;用 id唯一标识作为key diff 算法&#xff1a;相同的复用&#xff0c;不同的生成 key的内部原理 1、虚拟dom中key的作用&#xff1a; key是虚拟dom对象的标识&#xff0c;当数…

【华为OD机试模拟题】用 C++ 实现 - 相对开音节(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明相对开音节题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高…

超简单 华为OD机试用Python实现 -【无向图染色问题 or 红黑图】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲无向图染色问题 or 红黑图题目描述输入描述输出描述说明示例一输入输出示例二输入输出Python 代码实现华为OD机试300题大纲 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:blog…