TCP的滑动窗口机制和流量控制

news2024/11/18 21:48:00

目录

滑动窗口

流量控制

拥塞控制


滑动窗口

  TCP除了保证可靠性之外,也希望能够尽可能高效的完成数据传输。滑动窗口就是一种提高效率的机制。以下是不引入滑动窗口的数据传输过程:

可以看到,主机A这边每次收到一个ACK才发送下一个数据。这个过程其实是比较低效的。

于是我们就引入了滑动窗口:

这样,就不是一次发送一条数据了,而是一次发送一组,再批量等待一组ACK。就把一条一条发送转化成批量发送了。就把等待时间重叠了,提高了效率。

不等待ack,批量发送多少数据,这个过程就是称为“窗口大小”。

分析:上述过程,收到了2001的ack,此时这个1001-2000的数据就得到了确认,标记成灰色了。接下来,当然要继续等待2001-5000的ack,与此同时,也发送一个新的数据,5001-6000。(此时要等待ack的数据还是四组数据)就像一个固定大小向后滑动的窗口一样。

注意:滑动窗口中,批量发送4组数据之后,不是等到4个都回来才继续发送新的数据,而是收到一个ack,就往后发一个新的。

问题:在滑动窗口中,收到的ack不一定是按照发送顺序返回的,有可能1001-2000和2001-3000的数据先发,但是3001-4000的数据的ack先返回了,这样该怎么办?

3001的意思是3001之前的数据已经收到了,这样滑动窗口就可以向后走两格

那如果3001之前的数据丢包了,怎么办?

有两种情况:(滑动窗口之下,搭配的丢包处理机制,是很高效的,称为快速重传

虽然主机A仍然在继续给B往后发送,接下来的每个数据,B都是再向A索要1001这个数据报。

A这边连续收到若干个1001这样的ack,就明白了,原来是1001-2000这个数据丢了,于是紧接着A就将1001-2000这个数据重传。B收到之后,会从7001开始发送ack。1001-2000的数据就像一块拼图,一但拼图凑齐,B就会从最新的7001开始发送。

因为对于B来说有一个接收缓冲区,数据报都是先存在接收缓冲区里的。当缓冲区存在某个缺口的时候,返回的ack,确认序号都是在索要缺口的数据。

超时重传和快速重传是否是冲突的? 当然不冲突。两者只是不同情况下采取的重传策略。快速重传相当于在滑动窗口下的特殊变种。

注:如果TCP传输的数据比较少,不频繁,此时就不会触发滑动窗口,仍然按照超时重传的方式来解决丢包问题。如果短时间传输大量数据,此时才能触发滑动窗口。此时才触发快速重传,按照ack反馈的次数来解决丢包问题。

重要结论:滑动窗口,说是提升效率的机制,更准确地说,是“亡羊补牢”的机制。TCP为了保证可靠性,牺牲了很多效率。引入滑动窗口,是让效率上的牺牲,变少一些,但是仍然是存在牺牲的。再如何滑动窗口,速度也不可能比UDP这种没有可靠机制的协议更快

流量控制

  滑动窗口的窗口大小是可变的。可以通过窗口大小,来控制发送方的发送速度。窗口越大,单位时间发的数据就越多,效率就越高。窗口越小,单位时间发的数据就越少。

通常情况下,肯定是希望尽可能高效的传输。但是高效的前提一定是可靠性

如果发送速度太快,接收方处理不过来,此时还可能引起丢包。

接收方根据自身的处理能力,反向制约发送方的速度,是双方达成一个“平衡”。这样的机制,就称为“流量控制”。

如何衡量接收方的处理速度?   接收方有一个接收缓冲区(阻塞队列)。

空闲空间大小,作为发送方发送数据的窗口大小。接收方给发送方返回ack,把这个数值告诉发送方,在ack报文中,在tcp报头里,指定一个字段,表示上述的空闲空间大小。

窗口拓展因子,就可以使窗口大小大于64kb。

发送方就可以按照上述窗口大小,决定下一轮数据发送的窗口大小了。

拥塞控制

拥塞控制和流量控制类似,都是和滑动窗口搭配的机制。流量控制是站在接收方的角度,影响发送方的速度。而拥塞控制是站在发送方的角度,影响接收方的速度

流量控制的时候,很容易定量的来衡量,接收缓冲区的剩余空间大小,用这个作为发送窗口大小。但是考虑中间结点,就复杂了。每次走的路径,每个设备的处理能力,繁忙程度,都不一样。

但是无论中间结构多复杂,tcp都会把它们视为一个整体,然后通过“实验”的方式,找到一个合适的窗口大小(发送速度)。具体流程如下

刚开始按照小的速度,小的窗口来发送数据。如果没有出现丢包(说明中间链路非常通畅),就可以增加速度,增加窗口大小。如果还是没丢包,仍然很通畅,就继续增加速度,继续增加窗口大小。.........增加到一定程度,发送速度非常快了,此时可能某个设备到达瓶颈,出现丢包了。此时,发送方立即减少窗口大小,继续发送,看是否还丢包。如果不丢包,再继续尝试加。如果丢包,就继续尝试减。这样就能找到一个合适的窗口大小的值,就可以不丢包,并且还能以比较快的速度完成传输。

由于网络是复杂的,也是多变的。按照上述方式,动态调整,随时适应网络中的变化。

拥塞控制的窗口,影响发送速度。流量控制窗口,也会影响发送速度。这俩窗口哪个小,就听那个的。

拥塞控制窗口大小动态变化是否有规律?

1)刚开始,以比较小的窗口,来传输数据。主要因为刚开始不知道网络是否拥堵,先试试看。

2)按照指数方式扩大窗口(*2)

这里慢启动说的“慢”说的是刚开始窗口大小比较小,传输速度慢。而不是窗口大小的变化速度慢(指数增长非常快的)。

3)指数增长的过程中,达到某个阈值,就要变成线性增长(+n)。

4)线性增长,也是增长,发送速度越来越快。增长到一定程度,就会出现丢包。此时,发送方大概就摸到了网络的大概能力是在啥样的水平。此时就会立即把窗口变小(发送速度减下去)。

5)缩小有两种方式

 1、直接缩到底(回到了最初慢启动的时候),接下来指数增长,线性增长。

 2、缩到出现丢包时,窗口大小一半这样的位置,接下来线性增长。

第一种方式比较低效,现在已经废弃了。第二种方式是当前实际使用的方式。

以上关于滑动窗口,希望对你有所帮助。

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

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

相关文章

接口、会话控制

文章目录 接口介绍RESTful APIjson-server接口测试工具apipost公共参数和文档功能 会话控制cookie介绍和使用运行流程浏览器中操作Cookieexpress中cookie操作 Sessionsession运行流程:session中间件配置session 和 cookie 的区别CSRF跨站请求伪造 tokenJWT介绍与演示…

数据新探:用Python挖掘互联网的隐藏宝藏

Hello,我是你们的阿佑,今天给大家上的菜是——数据存储!听起来枯燥无味?错了!阿佑将带你重新认识数据存储的艺术。就像为珍贵的艺术品寻找完美的展览馆,为你的数据选择合适的存储方式同样重要! …

2022-1990年 各省碳排放Co2数据集(含数据及参考文献)

碳排放是指人类活动产生的二氧化碳(CO2)等温室气体释放到大气中的过程。通过划分排放源的范围以避免重复计算的思想,由世界资源研究所在关于企业温室气体排放清单编制的指南中首次提出。城市碳排放核算边界界定借鉴该思想,可分为3…

Web开发三层架构

##Controller Service Dao(mapper) 软件设计:高内聚 低耦合 Controller 调用Service, Service调用 DAO 模块之间耦合 如果要从EmpServiceA切换到EmpServiceB,Controller代码也要修改 new EmpServiceB 分层接耦 容器中放EmpServiceA&am…

(深度估计学习)Win11复现DepthFM

目录 1. 系统配置2. 拉取代码,配置环境3.开始深度预测4.运行结果 论文链接:https://depthfm.github.io/ 讲解链接:https://www.php.cn/faq/734404.html 1. 系统配置 本人系统:Win11 CUDA12.2 python3.11.5 这里附上几个CUDA安装链…

Linux第四节--常见的指令介绍集合(持续更新中)

点赞关注不迷路!本节涉及初识Linux第四节,主要为常见的几条指令介绍。 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 ✨ 加关注👀 期待与你共同进步! 1. more指令 语法:more [选项][文件]…

【数据可视化01】matplotlib实例介绍4之六边形分箱图

目录 一、引言二、实例介绍 一、引言 hexbin是一个二维直方图,其中箱子是六边形,颜色表示每个箱子内的数据点数。 二、实例介绍 import matplotlib.pyplot as plt import numpy as np# Fixing random state for reproducibility np.random.seed(19680…

umi搭建react项目

UMI 是一个基于 React 的可扩展企业级前端应用框架,提供路由、状态管理、构建和部署等功能,可以帮助开发者快速构建复杂的单页面应用(SPA)和多页面应用(MPA)。它与 React 的关系是,UMI 构建在 R…

draw.io 网页版二次开发(1):源码下载和环境搭建

目录 一 说明 二 源码地址以及下载 三 开发环境搭建 1. 前端工程地址 2. 配置开发环境 (1)安装 node.js (2)安装 serve 服务器 3. 运行 四 最后 一 说明 应公司项目要求,需要对draw.io进行二次开发&…

算法提高之加成序列

算法提高之加成序列 核心思想&#xff1a;迭代加深 dfs 从上往下逐渐增大depth 这样下面没有用的方案就不用遍历了 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 110;int n;int path[N];//当前求哪个位置…

2.1.2 事件驱动reactor的原理与实现

LINUX 精通 2 day14 20240513 day15 20240514 算法刷题&#xff1a;2维前缀和&#xff0c;一二维差分 耗时 135min 习题课 4h 课程补20240425 耗时&#xff1a;4h 课程链接地址 回顾 怎么学0voice课网络io——一请求一线程&#xff0c;一个client一个连接再accpet分配io f…

考研数学|李林《880》做不动,怎么办!?看这一篇!

在考研数学的备考过程中&#xff0c;遇到难题是很常见的情况&#xff0c;尤其是当你尝试解决李林880习题集中的问题时。他以其难度和深度著称&#xff0c;旨在帮助考生深入理解数学分析的复杂概念。 如果你在解题过程中感到困难&#xff0c;这并不是你个人的问题&#xff0c;而…

数据库系统概论(超详解!!!)第八节 数据库设计

1.数据库设计概述 数据库设计是指对于一个给定的应用环境&#xff0c;构造&#xff08;设计&#xff09;优化的数据库逻辑模式和物理结构&#xff0c;并据此建立数据库及其应用系统&#xff0c;使之能够有效地存储和管理数据&#xff0c;满足各种用户的应用需求&#xff0c;包…

【LLM第五篇】名词解释:prompt

1.是什么 提示工程&#xff08;Prompt Engineering&#xff09;是一门较新的学科&#xff0c;关注提示词开发和优化&#xff0c;帮助用户将大语言模型&#xff08;Large Language Model, LLM&#xff09;用于各场景和研究领域。 掌握了提示工程相关技能将有助于用户更好地了解…

Prosys OPC UA Simulation Server工程文件备份方法

Prosys OPC UA Simulation Server是一款免费的OPC UA服务器仿真软件&#xff0c;具体的使用和下载参考官网&#xff1a; Prosys OPC - OPC UA Simulation Server Downloads 他的免费版本不提供工程文件的备份、导入导出功能&#xff0c;每次退出时保存。如果需要工程备份&a…

宇宙(科普)

宇宙&#xff08;Universe&#xff09;在物理意义上被定义为所有的空间和时间&#xff08;统称为时空&#xff09;及其内涵&#xff0c;包括各种形式的所有能量&#xff0c;比如电磁辐射、普通物质、暗物质、暗能量等&#xff0c;其中普通物质包括行星、卫星、恒星、星系、星系…

基于安装包安装数据库时出现的问题分析及总结

数据库在数据初始化后并不会出现错误&#xff0c;这个时候在启动数据库时会出现启动不成功&#xff0c;不知道问题是什么要学会通过查看日志发现问题&#xff0c;日志就在Data文件夹下。 错误类型1 数据库在初始化后数据库启动不起来 原因&#xff1a;可能是配置文件my.ini一些…

【SQL每日一练】获取PADS公司用户名称和各职业总数并根据格式输出

文章目录 题目一、解析二、题解1.MySQL 题目 生成以下两个结果集&#xff1a; 1、查询 OCCUPATIONS 表中所有名字&#xff0c;紧跟每个职业的第一个字母作为括号&#xff08;即&#xff1a;括在括号中&#xff09;&#xff0c;并按名字顺序排序。例如&#xff1a;AnActorName…

2024成都现代职业教育及装备展6月1日举办 免费参观

2024成都现代职业教育及装备展6月1日举办 免费参观 同期举办&#xff1a;中国西部职业教育产教融合高峰论坛 主办单位&#xff1a; 中国西部教体融合博览会组委会 承办单位&#xff1a;重庆港华展览有限公司 博览会主题&#xff1a;责任教育 职教兴邦 组委会&#xff1a;…

【AI学习】聊两句昨夜OpenAI的GPT-4o

蹭个热点&#xff0c;聊两句昨夜的大事件——OpenAI发布GPT-4o&#xff0c;我看到和想到的一点东西。 首先是端到端方法&#xff0c;前面关于深度学习的文章&#xff0c;对端到端的重要性做了一些学习&#xff0c;对端到端这个概念有了一些理解。正如Richard Sutton在《苦涩的…