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.hqwc.cn/news/72737.html

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

相关文章

Python土力学与基础工程计算.PDF-钻探泥浆制备

Python 求解代码如下: 1. rho1 2.5 # 黏土密度,单位:t/m 2. rho2 1.0 # 泥浆密度,单位:t/m 3. rho3 1.0 # 水的密度,单位:t/m 4. V 1.0 # 泥浆容积,单位:…

Streamlit 讲解专栏(十):数据可视化-图表绘制详解(上)

文章目录 1 前言2 st.line_chart:绘制线状图3 st.area_chart:绘制面积图4 st.bar_chart:绘制柱状图5 st.pyplot:绘制自定义图表6 结语 1 前言 在数据可视化的世界中,绘制清晰、易于理解的图表是非常关键的。Streamlit…

1000元到3000元预算的阿里云服务器配置大全

1000元、2000元或3000元预算能够买的阿里云服务器配置有哪些?可以选择ECS通用算力型u1云服务器、ECS计算型c7或通用型g7实例规格,当然,如果选择轻量应用服务器的话,更省钱,阿里云百科分享1000-3000元预算能买的阿里云服…

谷歌云 | 最大限度地提高可靠性降低成本:调整 Kubernetes 工作负载的大小

【Cloud Ace 是谷歌云全球战略合作伙伴,拥有 300 多名工程师,也是谷歌最高级别合作伙伴,多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商,我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训服务。】 您知道通过调整…

5.利用matlab完成 符号矩阵的转置和 符号方阵的幂运算(matlab程序)

1.简述 Matlab符号运算中的矩阵转置 转置向量或矩阵 B A. B transpose(A) 说明 B A. 返回 A 的非共轭转置,即每个元素的行和列索引都会互换。如果 A 包含复数元素,则 A. 不会影响虚部符号。例如,如果 A(3,2) 是 12i 且 B A.&#xff0…

grafana中利用变量来添加dashboard详情页地址实现点击跳转

背景 最近弄grafana的dashboard,突然想到各个dashboard之前可以直接跳转到不同详细页面的面板,于是找了找实现方法 实现 以stat 格式的面板为例,显示出各个pod的对应状态, PromQL是(avg(kube_pod_status_phase{phase"Running", namespace!"kube-system"…

什么是异常处理

文章目录 异常处理介绍自定义异常页面文档:自定义异常页面说明 自定义异常页面-应用实例需求:代码实现 全局异常说明全局异常-应用实例需求:代码实现完成测试 自定义异常说明自定义异常-应用实例需求:代码实现完成测试 注意事项完成测试 异常处理 介绍 默认情况下…

【路由协议】使用按需路由协议和数据包注入的即时网络模拟传递率(PDR)、总消耗能量和节点消耗能量以及延迟研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

11、BigKey

BigKey 阿里广告平台,海量数据里查询某一固定前缀的key 小红书,你如何生产上限制keys */flushdb/flushall等危险命令以防止误删误用? 美团,MEMORY USAGE 命令你用过吗? BigKey问题,多大算big?你…

策略梯度方法

策略梯度方法 数学背景 给定一个标量函数 J ( θ ) J\left(\theta\right) J(θ),利用梯度上升法,使其最大化,此时的 π θ \pi_\theta πθ​就是最优策略。 θ t 1 θ t α ∇ θ J ( θ t ) \theta_{t1}\theta_t\alpha \nabla_\theta…

使用JMeter创建数据库测试

好吧!我一直觉得我不聪明,所以,我用最详细,最明了的方式来书写这个文章。我相信,我能明白的,你们一定能明白。 我的环境:MySQL:mysql-essential-5.1.51-win32 jdbc驱动:…

网络协议的定义、组成和重要性?

什么是网络协议? 网络协议是在计算机网络中,用于规定通信实体之间进行数据传输和通信的规则集合。网络协议涵盖了各种通信细节,包括数据包格式、错误处理、数据传输速率等,是用于分组交换数据网络的一种协议,其任务仅…