TCP中窗口和滑动窗口的含义以及流量控制

一.窗口

        

         在TCP中由于要保证可靠性,所以每发送一条数据后,都需要接收方返回一条应答报文,要是我们每发送一条数据,发送方就等待接收应答报文,收到之后再去发送下一条数据,这样我们就会花费大量的时间在等待应答报文上,效率是很低下的

        所以TCP中有了窗口的概念,TCP在发送数据的时候会一次性发送一组数据,发送这一组数据的过程中不用等待ACK(应答报文),就直接往接收方发,而窗口大小就是我们发送这一组数据的大小,如上图,当窗口大小为4000个字节(四个段)时,我们在发送序号为1-4000的信息就直接发送给接收方即可,不需要等待接收方返回ACK(应答报文),在发送好一组数据以后,我们再等待ACK(应答报文),相当于使用一份等待时间,等待四个ACK(应答报文)

        窗口能不能无限大呢

        当我们的窗口越大,此时批量发送的数据就越多,效率就越高,那我们的窗口能不能及其的大呢,这样效率不就非常高了吗?答案是不行,因为窗口要是过于大,批量发送的数据就会很多,就不知道要到什么时候才去等待ACK(应答报文)了,就相当于完全不必等ACK(应答报文),此时就和不可靠传输差不多了,而TCP的特点就是可靠传输,并且如果窗口过于大,批量发送的数据过于多,接收方能不能处理得过来,中间的网络设备能不能承受住,都是未知数

二.滑动窗口

        

         滑动窗口,是一个形象的比喻,实际上就是批量发送数据,这样可以缩短等待时间,提高一定的效率(缩短不代表没有,仍然需要一定的时间等待ACK(应答报文),所以传输效率不会比UDP高)

        如上图,我们在发送一组数据后,等待ACK(应答报文)时,我们需要等待4个段的应答报文都获得了才去发送下一段数据吗,很显然,不需要,由于ACK(应答报文)的发送是有顺序的,所以我们肯定会先接收到当前组中,第一段的ACK(应答报文),当我们收到第一段的ACK(应答报文)后便可以发送下一段数据了,这样我们就保证了一直等待的都是4个段的ACK(应答报文),一段一段的向后推进,就像一个滑动窗口一样。

        在滑动窗口中出现丢包应该怎么办?

        1.ACK(应答报文)丢包

        ACK(应答报文)丢包即使不做任何处理也是正确的,如上图,当1-1000序号的数据发送后,接收方返回的1001的确认序号( ACK(应答报文))出现了丢失,但后面1001-2000序号的数据发送后,接收方返回的2001的确认序号( ACK(应答报文))没有出现丢失,而2001的确认序号就表名在2001之前的数据都已经成功接收,其中就包括了1-1000的数据,所以即使 ACK(应答报文)出现了丢失后面的 ACK(应答报文)也能确认之前的数据被成功接收

        所以在滑动窗口中  ACK(应答报文)丢包即使不做任何处理也是正确的

        2.传输的数据丢包

        

         如上图,在滑动窗口批量传输数据时,1001-2000这段数据出现了丢包,此时接收方就没有收到1001-2000这段数据,所以接收方之后返回的确认序号( ACK(应答报文))都是1001,就像是提醒发送端“我想要的是1001这个数据”一样

        当发送端连续收到多次“1001”这样的应答,就会将对应的1001-2000的数据重新发送

        此时接收端收到了1001后,再次返回的确认序号( ACK(应答报文))就是7001了,因为2001-7000的数据接收端之前就已经收到了,被放到了接收端操作系统内核的接收缓冲区中

        这种机制叫做“高速重发控制”,也叫“快重传”

        流量控制(滑动窗口的补充)

        

         我们知道,滑动窗口越大,批量传输的数据越多,传输效率越高,但是窗口也不能无限大,窗口要是太大了,就有可能使接收方处理不过来,或者使传输的中间链路处理不过来,这样就会出现丢包,就得重传了,反而还影响了效率

        流量控制就是给滑动窗口“踩踩刹车”,避免窗口太大,导致接收方处理不过来

        流量控制就是根据接收方的处理能力来限制发送方的发送速度(窗口大小)

        那我们如何衡量接收方的处理能力呢?通过接收方的接收缓冲区剩余空间大小来进行衡量,

接收缓冲区剩余空间大小越大,说明接收方的处理能力越强,发送方的发送速度(窗口大小)就可以越大,反之亦然

        发送方如何知道接收方的处理能力呢?接收方接收到数据后都会给发送方发送ACK(应答报文),所以我们将接收方的接收缓冲区剩余空间大小通过ACK(应答报文)反馈给发送方,作为发送方下一次发送数据窗口大小的依据

        如上图,发送端发送了1-1000的数据,接收端返回的ACK(应答报文)不仅有确认序号1001,还有接收端接收缓冲区的剩余空间大小3000字节,发送端收到ACK(应答报文)以后,便知道了接收端接收缓冲区还有3000字节的剩余空间大小,于是发送了1001-4000共3000字节的数据给接收端,当接收端返回的接收缓冲区剩余空间大小为0时,发送端就会不停的发送一个无意义的数据作为探测信号,去获取接收端接收缓冲区剩余空间大小,当不为0时,便可以继续传输数据。

        滑动窗口并不是TCP就一定涉及

        如果通讯双方大规模的传输数据,那么肯定就是滑动窗口

        如果通讯双方传输数据的规模比较少,这个时候就不会用滑动窗口了,依然按照之前的发一个数据就等待一个ACK(应答报文)的方式工作

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

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

相关文章

一文预览 | 8 月 16 日 NVIDIA 在 WAVE SUMMIT深度学习开发者大会 2023精彩亮点抢先看!

由深度学习技术及应用国家工程研究中心主办,百度飞桨和文心大模型承办的 WAVE SUMMIT深度学习开发者大会2023,将于 8 月 16 日在北京与大家见面。NVIDIA 作为技术合作伙伴,将携手百度飞桨参与这场技术盛会。 在这次大会中,NVIDIA…

【从零开始的rust web开发之路 二】axum中间件和共享状态使用

系列文章目录 第一章 axum学习使用 第二章 axum中间件使用 文章目录 系列文章目录前言一、中间件是什么二、中间件使用常用中间件使用中间件使用TraceLayer中间件实现请求日志打印自定义中间件 共享状态 前言 上篇文件讲了路由和参数相应相关的。axum还有个关键的地方是中间件…

微信小程序 游戏水平评估系统的设计与实现_pzbe0

近年来,随着互联网的蓬勃发展,游戏公司对信息的管理提出了更高的要求。传统的管理方式已无法满足现代人们的需求。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,随着各行业的不断发展,使命召…

【C++习题集】-- 堆

(用于复习) 目录 树概念及结构 名词概念 二叉树概念及结构 特殊的二叉树 满二叉树 完全二叉树 运算性质 二叉树存储结构 顺序存储 链式存储 堆 - 顺序存储 堆的性质 堆的实现 堆的应用 堆排序 直接建堆法 树概念及结构 概念&#xff1a…

【目标检测中对IoU的改进】GIoU,DIoU,CIoU的详细介绍

文章目录 1、IoU2、GIoU(Generalized Intersection over Union)3、DIoU4、CIoU 1、IoU IoU为交并比,即对于pred和Ground Truth:交集/并集 1、IoU可以作为评价指标使用,也可以用于构建IoU loss 1 - IoU 缺点: 2、对于pred和GT相…

[MySQL]主从服务器布置

配置主服务器 配置文件 /etc/my.cnf 在[mysqld]下进行配置 log_binON //启动二进制日志 log-bin mysql-bin //启用二进制日志,用于记录主服务器的更新操作 server-id 1 // 用来表示mysql服务id,保证集成环境中的唯一性 , 范围 [1,2^32) read-only0 // 1表示只…

ChatGLM-6B微调记录

目录 GLM-130B和ChatGLM-6BChatGLM-6B直接部署基于PEFT的LoRA微调ChatGLM-6B GLM-130B和ChatGLM-6B 对于三类主要预训练框架: autoregressive(无条件生成),GPT的训练目标是从左到右的文本生成。autoencoding(语言理解…

如何在windows电脑安装多个tomcat服务器和乱码问题

前提条件安装jdk 以17版本为例,将jdk8卸载干净 1.首先进入tomcat官网下载 tomcat网址 这里下载tomcat10为例子 1.1 这里选择方式一 下载解压版 2.解压后拷贝三份 分别命名为 8081、 8082、 8083 3.分别对每个tomcat执行以下操作 3.1 找到tomcat所在webapps文…

java的类和对象详解

一、java是面向对象的编程语言 首先一般的编程语言有两种,一种是面向对象,一种是面向过程。前者更加关注代码中对象与对象之间关系与协作,而后者更加注重代码的执行过程。 举个例子 传统的方式:注重的是洗衣服的过程,…

引领行业高质量发展|云畅科技参编《低代码开发平台创新发展路线图(2023)》

8月8日-9日,中国电子技术标准化研究院于北京顺利召开《低代码开发平台创新发展路线图(2023)》封闭编制会。云畅科技、浪潮、百度、广域铭岛等来自低代码开发平台解决方案供应商、用户方、科研院所等近30家相关单位的40余位专家参与了现场编制…

CentOS 8.5修改安装包镜像源

1 备份原配置 cd /etc/yum.repos.d mkdir backup mv *.repo backup/2 下载镜像源 2.1 使用wget下载 wget http://mirrors.aliyun.com/repo/Centos-8.repo2.2 使用curl下载 我是安装的最小版本的系统,默认只有curl curl使用方法:https://www.ruanyife…

【分布式共识】Multi-Paxos 算法思想

上一篇文章主要聊了Basic Paxos算法,而Multi-Paxos并不是一种算法,是一种算法思想。具体就是Basic Paxos解决的是对一个值达成共识。而后者是通过执行多次的Basic Paxos算法就多个值达成一致。具体的落地实现有Raft。 Muti-Paxos的问题 在Basic Paxos中…

14、缓存预热+缓存雪崩+缓存击穿+缓存穿透

缓存预热缓存雪崩缓存击穿缓存穿透 ● 缓存预热、雪崩、穿透、击穿分别是什么?你遇到过那几个情况? ● 缓存预热你是怎么做到的? ● 如何避免或者减少缓存雪崩? ● 穿透和击穿有什么区别?它两一个意思还是截然不同&am…

CW4-6A-S、CW4-10A-S、CW4-20A-S、CW4-30A-S螺栓式滤波器

CW3L2-3A-S、CW3L2-6A-S、CW3L2-10A-S、CW3L2-20A-S CW3-3A-S、CW3-6A-S、CW3-10A-S、CW3-20A-S、CW3-30A-S CW4EL2-3A-S、CW4EL2-6A-S、CW4EL2-10A-SCW4EL2-20A-S、CW4EL2-30A-S CW4E-3A-S、CW4E-6A-S、CW4E-10A-S、CW4E-20A-S、CW4E-30A-S CW4E-40A-S(001)、CW4E-50A-S(0…

论文导读 | Operation ResearchManagement Science近期文章精选

推文作者:周梓渊 编者按 如何准确估计和预测债券风险溢价?债券保险是否为市政债券的发行人提供价值?我们如何界定社会福利政策对小部分群体的负面影响?垄断零售商的线上线下定价有何诀窍?顶刊中的行为理论真的对应现实…

排名前 6 位的数学编程语言

0 说明 任何对数学感兴趣或计划学习数学的人,都应该至少对编程语言有一定的流利程度。您不仅会更有就业能力,还可以更深入地理解和探索数学。那么你应该学习什么语言呢? 1.python 对于任何正在学习数学的人来说,Python都是一门很棒…

win10系统docker创建ubuntu容器解决开发环境问题

一、win10系统使用docker的原因 最近啊,在学习人工智能-深度学习,用的win10系统进行开发,老是出现一些莫名其妙的问题,无法解决,每天都在为环境问题搞得伤透了脑筋。 说到底还是要使用Linux系统进行开发比较合适。 …

跟随角色镜头时,解决地图黑线/白线缝隙的三种方案

下面一共三个解决方案,这里我推荐第二个方案解决,因为够快速和简单。 现象: 解决方案一: 参考【Unity2D】去除地图中的黑线_unity选中后有线_香菇CST的博客-CSDN博客,博主解释是因为抗锯齿采样导致的问题。 具体到这…

【后端】Core框架版本和发布时间以及.net 6.0启动文件的结构

2023年,第35周,第1篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! .NET Core 是一个跨平台的开源框架,用于构建现代化的应用程序。它在不同版本中有一些重要的区别和发布时间 目录 一、Core版本和…

【OpenVINOSharp】在英特尔® 开发者套件爱克斯开发板使用OpenVinoSharp部署Yolov8模型

在英特尔 开发者套件爱克斯开发板使用OpenVinoSharp部署Yolov8模型 一、英特尔开发套件 AIxBoard 介绍1. 产品定位2. 产品参数3. AI推理单元 二、配置 .NET 环境1. 添加 Microsoft 包存储库2. 安装 SDK3. 测试安装4. 测试控制台项目 三、安装 OpenVINO Runtime1. 下载 OpenVINO…