TCP特性的滑动窗口,流量控制

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: TCP特性的滑动窗口,流量控制

一、TCP特性滑动窗口

提高传输效率(更准确的说,让TCP在可靠传输的前提下,效率不太拉跨)💛

当然你要是想让TCP媲美UDP,也是痴人说梦,只能说减小差距。

一次性发一组数据,发数据的过程中,不需要等待ACK,就直接往前发,此时相当于“一份等待时间”等待四个ACK,把一次发多少数据,不用等待ACK这样的大小,称为窗口。💙

窗口越大,此时批量发送的数据越多,效率越高,但是窗口不能无限大,如果是无限大,相当于完全不必等待ACK,此时就和不可靠传输差不多了,如果你无限大,接收方是否可以处理过来,中间设备是否可以承受住,都是未知数

那么为什么要叫“滑动窗口”,哪里有滑动呢

当前A给B发送了1001——2000,2001——3000,4001——5000这样的数据,需要等4个对应的ACK,这四个ACK到达顺序,也会有先有后,如2001->3001->4001->5001这种顺序到达。

那么问题来了,大家觉得 2001到达主机B的时候A是否继续往下发下一条信息?还是等待5001到了,才继续发下一组消息。

当然是2001到达主机B的时候,A可以继续往下发下一条信息(要不等到5001,🌚🌚🌚那不是一样的慢吗)

收到2001这个ACK之后,于是A就立即发送5001-6000这个数据,此时A等待ACK,3001->4001->5001->6001,仍是等待4条ACK,还是窗口一样的大,但是往后挪动了一个格子,直观来看:窗口往后挪了一步

滑动窗口是一个“形象的比喻”,实际本质批量发送数据(可以缩短时间,但是还需要等待)

批量传输的方式传输,中间丢包了咋办。

对于TCP来说,必然不会影响他的可靠性啊

两种情况:

1.数据丢了

2.ACK丢了

首先ACK丢了💚不用做任何处理,也是正确的,2001确认序号,表示2001之前的数据都收到了!!也包含1——1000。

虽然A没有收到1001这个ACK,但是2001这个ACK涵盖了1001的含义,(就相当于,有对象,结婚,有娃娃,小哥哥加你微信,你说我都有娃娃了,不就相当于你有结婚的伴侣了👪)

其次数据丢了:💜

此时必须要重传,啥时候重传,具体怎么重传。

在1001-2000丢失之后,2001-3000这个数据到达了B,B返回的ACK确认序号仍是1001,B仍然再向A索要1001这个数据~,虽然A后续给B的数据都会顺利的传递过去,但是如果只要是1001这个数没有,B始终会向A索要这个1001的数据,返回ACK确认序号,都是1001。

(返回ACK确认序号,都是1001)。

3次的重复应答(已经接收1-1001字节的数据),收到了3个同样的确认应答时,则选择重发。

接收方,有个缓冲区在接收数据

如果接收缓冲区,这一块是少了的,返回的ACK,就会始终索要1001这个数据报~一旦1001这个数据报被补充上了,此时1001-2000后面的数据都不必重新传输了,(都在缓冲区等待呢),接下来,就看后面数据加哪里缺失,直接索要缓冲区最后一条数据的下一个即可~

此时,相当于用最小的成本,来完成这个重传数据的操作(只是把丢了的数据重新传输,其他的数据都没有重复操作)快速重传->超时重传+滑动窗口下,产生的变形操作(本质仍然是超时重传)💖

滑动窗口,也不是说使用TCP就一定涉及,如果你通信的双方大规模传输数据,肯定是滑动窗口(此时按照快速重传来工作),如果是传输通信数据规模小,此时就没有滑动窗口。仍然按照之前的超时重传来工作,滑动窗口的思想方法,非常实用。

二、TCP特性流量控制(作为滑动窗口的补充)

滑动窗口,窗口越大,传输的效率就越高,但是窗口无限大,可能会使接收方处理不过来了,或者使传输中间链路处理不过来,这样就会出现丢包···此时就要重新传输了,窗口大并没有提高效率,反而还会影响效率。

流量控制,给滑动窗口,踩刹车,🙅避免窗口过大,导致处理不过来。

如何衡量接收方处理速度

此处就使用接收缓冲区剩余空间大小作为衡量指标->如果剩余空间越大,应用程序消费数据的速度越快

TCP报头中,这个字段只对ACK报文才有意义,这个数字表示当前缓冲区剩余空间大小,这个数字返回给发送方,就可以作为发送方下一轮发送的参考依据,这里的16位,是否意味着窗口大小就是64KB呢?

实际上下面有一个选项,这个是窗口大小的扩展因子,他可以实现位运算,也就是《这种,换句话说,此时能表示窗口的大小,实际是可以表示非常大的窗口。

虽然A不再发数据了,但是也不知道B这边啥时候可以腾出空间,就会周期发送窗口探测包(⚠️不涵盖任何数据),只是触发ACK,查看当前接收的情况。

一旦发现不是0了,就可以继续发送了,接收方就可以根据窗口大小,来反向限制发送方传输速度。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
网络协议 算法 网络性能优化
TCP滑动窗口、流量控制及拥塞控制详解
TCP滑动窗口、流量控制及拥塞控制详解
|
2月前
|
缓存 人工智能 算法
TCP的滑动窗口和拥塞控制
TCP的滑动窗口和拥塞控制
35 0
|
2月前
|
网络协议 算法 网络性能优化
TCP 重传、滑动窗口、流量控制、拥塞控制
TCP 重传、滑动窗口、流量控制、拥塞控制
|
2月前
|
网络协议 安全 Java
【JavaEE初阶】 TCP滑动窗口与流量控制和拥塞控制
【JavaEE初阶】 TCP滑动窗口与流量控制和拥塞控制
|
2月前
|
网络协议 算法 网络性能优化
|
8月前
|
消息中间件 缓存 网络协议
TCP协议的秘密武器:流量控制与拥塞控制
本文将深入探讨TCP协议的关键机制,包括流量控制和拥塞控制,以解密其在网络数据传输中的作用。通过了解TCP协议的工作原理,我们可以更好地理解网络通信的稳定性和可靠性,为我们的网络体验提供更安全、高效的保障。无论您是网络爱好者、技术从业者还是普通用户,本文将为您揭开TCP协议的神秘面纱,带您进入网络传输的奇妙世界。
121 0
TCP协议的秘密武器:流量控制与拥塞控制
|
8月前
|
缓存 网络协议 算法
图解TCP、UDP,流量控制,拥塞控制,一次看懂
图解TCP、UDP,流量控制,拥塞控制,一次看懂
|
9月前
|
网络协议 网络架构
TCP协议报文,核心特性可靠的原因,超时重传详细介绍
TCP协议报文,核心特性可靠的原因,超时重传详细介绍
|
算法 网络协议 中间件
TCP 拥塞控制算法
最近花了些时间在学习TCP/IP协议上,首要原因是由于本人长期以来对TCP/IP的认识就只限于三次握手四次分手上,所以希望深入了解一下。再者,TCP/IP和Linux系统层级的很多设计都可以用于中间件系统架构上,比如说TCP 拥塞控制算法也可以用于以响应时间来限流的中间件。更深一层,像TCP/IP协议这种基础知识和原理性的技术,都是经过长时间的考验的,都是前人智慧的结晶,可以给大家很多启示和帮助。
TCP 拥塞控制算法
|
缓存 网络协议 算法
四十一、TCP可靠传输、流量控制、拥塞控制
四十一、TCP可靠传输、流量控制、拥塞控制
四十一、TCP可靠传输、流量控制、拥塞控制