tcp协议的延迟应答(介绍+原则),拥塞控制(拥塞窗口,网络出现拥塞时,滑动窗口的大小如何确定,慢启动,阈值)

目录

延迟应答

引入

介绍

原则

拥塞控制

引入

网络出现拥塞

引入

介绍

介绍 

拥塞窗口

介绍

决定滑动窗口的大小

慢启动

介绍

为什么要有慢启动

阈值

算法

总结


延迟应答

引入

发送方一次发送更多的数据,发送效率就越高

  • 因为要写入网卡
  • 硬件的io速度很慢,尽量少访问硬件,io效率会提高

而发送的数据量取决于对方的接收能力(窗口大小)

  • 那么,如何让接收方向对方通告一个更大的窗口呢?

介绍

也就是让接收方先不着急返回应答,等一等,给上层留时间读取数据

  • 这样就有较大概率可以有更大的窗口
  • 当然,效率提高不是一定的,因为上层读不读我们没法控制

所以,这也给我们有一定的启示

  • 编写基于tcp的服务器代码时,要尽快把数据读上来
  • 这样就能提供更大的接收窗口->对方的滑动窗口大小增大->对方就可以发送更多的数据

原则

  • 不同os有不同的具体设置,一般N=2,最大延迟时间=200ms
  • 这个[最大延迟时间]要比[超时时间]短的多

拥塞控制

引入

之前介绍的策略,都是作用在双方主机上的 

  • 但是,数据包大部分时间都在网络中,所以网络信道也对通信有影响
  • 所以,tcp还需要对网络制定策略
  • 但是因为网络不属于客户端/服务端的范畴,所以这俩没法对网络直接做些什么,只是一些策略

网络出现拥塞

引入

对于网络拥塞问题,我们可以做个比喻:

  • 如果一场考试,只有几个人挂科,那只能说明是这几个没好好学
  • 如果班上大部分人都挂科了,只有几个及格,不免让人怀疑这场考试有问题

网络也是如此:

  • 出现少量丢包是正常的
  • 但如果大面积丢包,可能就是通信过程中有什么问题

一是对方可能来不及接收,导致丢包

  • 但是有流量控制,所以应当不会

二是网络有问题

  • 可能是硬件设备有问题
  • 或是数据量过大,引起阻塞
  • 这两个问题也可能是一个问题,因设备问题导致数据阻塞

所以,在通信过程中,不仅要考虑双方如何,也要考虑网络如何,也就是需要评估网络的健康状态

介绍

如果通信时出现了大量丢包

  • tcp就认为是网络出了问题(网络阻塞)

如果知道大量丢包(即滑动窗口内有大量的数据都超时了,连应答都没有)

  • 大部分可能自己过一会儿会缓过来,但我们也不能坐以待毙啊,总得做点什么,也就有了拥塞控制
  • 如果网络大量瘫痪,tcp协议也救不了,那就只能让工程师来维修了(毕竟tcp制定的机制并不是万能的)

介绍 

所以,对于这些大量超时的数据,发送方该如何呢?

  • 首先,肯定是不能立即重传的(少量重传倒是没问题,因为只是个例)
  • 而大量丢包必然是哪里出了问题
  • 如果是设备出错,即使发了也是白发
  • 如果是数据拥塞,那重发了岂不是会更加重拥塞程度
  • 所以,发送方需要先等等

这样的话,所有遵守tcp协议的主机遇到网络拥塞时都等一等

  • 在网络中传递的数据量一下子就少了,拥塞自然很快就能消减
  • 这属于是用tcp协议实现了多主机面对网络出现拥塞问题的共识

当然,也不是所有主机都能识别到网络拥塞,也就不会触发拥塞控制,可能它发送的数据少,丢包的就少

  • 网络拥塞程度越严重,影响的主机越多,就有更多的主机触发拥塞控制,减少数据量的发送
  • 如果网络拥塞并不严重,也就只会带动少量的主机
  • 挺巧妙的

当识别到网络拥塞时,我们需要引入一个新概念 -- 慢启动

同时也要引入一个新窗口 -- 拥塞窗口

拥塞窗口

介绍

初始值为1,以指数级增长

  • 在慢启动阶段,拥塞窗口的大小会随着每次收到一个ACK而指数增长,直到达到慢启动阈值

决定滑动窗口的大小

每次发送报文时,不仅要考虑对方的接收能力,也要考虑网络的拥塞情况

  • 所以,实际发送数量 = min( 拥塞窗口大小,对方的接收窗口大小 )

而我们知道,发送数据的量取决于滑动窗口的大小

  • 所以,我们就能修改之前对滑动窗口大小的认知了:
  • 滑动窗口大小=min(拥塞窗口大小,对方的接收窗口大小)

因为即使对方的接收能力很强,网络容纳不下也是白搭

  • 所以也需要动态考虑网络的接收能力
  • 反过来也是如此
  • 所以,需要以最小限度作为限制

同样的,滑动窗口的右指针的计算方式也要变

  • 因为要考虑网络状况,所以end = min( 接收窗口大小,有效数据大小,拥塞窗口大小 )

慢启动

介绍

慢启动是TCP连接建立后的初始阶段

  • 其目的是为了迅速估计网络的可用带宽和避免拥塞
  • 在慢启动阶段,发送方以指数增长的方式增加拥塞窗口的大小,从而逐渐增加发送的数据量,直到达到一个阈值
  • 慢启动只是初始值增长的慢,一段时间后就很恐怖了

所以,为什么慢启动可以控制发送方发送的数据量?

  • 因为它可以限制滑动窗口大小
  • 也就是上面说的,滑动窗口大小的取决因素里,有拥塞窗口的存在

为什么要有慢启动

因为需要在前期发送少量报文

  • 用于试探网络状态

如果发送的报文基本都有应答,说明此时网络很健康

  • 那么就该加大发送力度,就不能让拥塞窗口大小限制住数据发送量
  • (中后期拥塞窗口很大,计算实际发送量时,只取决于对方的接收能力)

阈值

当然,拥塞窗口也不能这样一直增大下去,超变量范围了怎么办

  • 所以要引入慢启动的阈值

超过这个阈值后,窗口大小将以线性方式增长,也就退出慢启动阶段

如果在增长的过程中出现了网络拥塞

  • 就以此时的窗口大小作为基准值,进行某一运算后得到新的阈值
  • 然后以新的阈值重新进行慢启动,达到阈值后就变为线性增长

但是,也不一定就会出现网络阻塞

  • 并且当滑动窗口大小取决于接收窗口大小时,阻塞窗口更不更新就不重要了
算法

新阈值=导致拥塞的窗口大小/2

  • /2可能是经过实验得到的比较合适的算法
  • 策略/原理啥的都需要经过测试,测试得出来确实是效率更高,所以就采用了

总结

所以,我们现在拥有三个窗口,接收窗口,滑动窗口,拥塞窗口

拥塞窗口 --- 主机衡量网络健康状态的指标

  • 因为网络是动态变化的,所以拥塞窗口本身就不是静态的
  • 如果发送数据量超过拥塞窗口大小,就会引起网络拥塞

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

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

相关文章

176.二叉树:从中序与后序遍历序列构造二叉树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

神卓互联内网穿透:使用超简单,拿捏

神卓互联内网穿透技术是一种能够打破内网与外网之间壁垒的创新技术。它通过一系列智能的网络协议和算法,实现了将企业内部网络资源安全、稳定地暴露给外部网络访问。这使得无需进行复杂的网络配置和改造,就能轻松实现远程办公、跨地域协作等重要应用。 神…

【第1章】Vue环境搭建

文章目录 前言一、安装Node1. 下载2. 安装3. 验证3.1 npm版本与Node.js版本3.2 验证环境 4. npm4.1 安装npm4.2 安装包4.3 全局安装包4.4 更新包4.5 删除包4.6 查看已安装的包4.7 初始化package.json 5. 国内源 二、安装Visual Studio Code1.下载2.安装3.安装Vue - Official 三…

【品质】如何培养幽默感,如何幽默的沟通与应对生活(自卑vs自信,悲观vs乐观)

【品质】如何培养幽默感,如何幽默和正能量的沟通与应对生活(自卑vs自信,悲观vs乐观) 文章目录 一、性格底色(自我认知,世界观)1、从悲观的底色开始2、用摆烂、自嘲的方式与世界和解 二、沟通方法…

同余式,乘法逆元,费马小定理

同余式 同余式是 数论 的基本概念之一,设m是给定的一个正整数,a、b是整数,若满足m| (a-b),则称a与b对模m 同余 ,记为a≡b (mod m),或记为a≡b (m)。 这个式子称为模m的同余式,若m∤ (a-b)&…

express入门02静态资源托管

目录 1 搭建静态资源结构2 代码助手3 多目录托管4 服务器热启动总结 上一篇我们讲解了使用express搭建服务器的过程,服务器搭建好了之后,除了在地址栏里输入URL发起get请求或者post请求外,通常我们还需要访问静态资源,比如html、c…

LabVIEW程序内存泄漏分析与解决方案

维护他人编写的LabVIEW程序时,若发现程序运行时间越长,占用内存越大直至崩溃,通常是内存泄漏导致的。本文从多角度分析内存泄漏的可能原因,包括数组和字符串处理、未释放的资源、循环中的对象创建等,并提供具体的解决方…

Linux-笔记 设备树插件

前言: 设备树插件(Device Tree Blob Overlay,简称 DTBO)是Linux内核和嵌入式系统中用于动态修改或扩展系统运行时的设备树配置的一种机制。它是对传统设备(Device Tree Source,简称 DTS)的补充&…

Nextjs 集成富文本编辑器react-quill

目录 一、组件代码 二、参考文档 由于Next与react有些差别,直接调用组件会报无法找到文档的错误,于是我们只有考虑动态导入了解决问题。因为富文本编辑器一般作用与form页面对SEO意义不大,所以这里可以考虑暂时关闭SSR。 一、组件代码 /*…

推荐系统学习笔记(五)-----双塔模型

目录 双塔模型 训练 pointwise训练 pairwise训练 listwise训练 双塔模型 矩阵补充模型只用到了用户id和物品id,其余属性没有用上 用户属性也可以这样处理 用户塔和物品塔各输出一个向量,两个向量的余弦相似度作为兴趣的预估值 训练 第一种&#x…

麦稻同框丰收忙,食家巷美味之旅

在夏收时节,金色的麦浪随风翻滚,洋溢着丰收的喜悦。而在这丰收的背后,食家巷以其独特的产品,为人们带来了一场与麦稻有关的美味盛宴。 传统的烤馍,带着麦子烘焙后的醇厚香气。用心挑选的原料,经过精…

如何用二维码进行来访登记?这个模板帮你轻松实现!

在工厂、学校、写字楼、建筑工地等人员出入频繁的场所,使用传统的纸质登记方法容易造成数据丢失,而且信息核对过程繁琐,效率低下。 可以用二维码代替纸质登记本,访客进入时扫码就能登记身份信息,能够提高门岗访客管理…

气膜建筑在体育和娱乐行业的多样化应用—轻空间

随着人们生活水平的提高和健康意识的增强,体育和娱乐行业的发展迎来了新的机遇和挑战。气膜建筑,作为一种新型建筑技术,因其独特的优势和广泛的应用场景,正在引领体育和娱乐行业的新潮流。 快速建设高品质体育场馆 气膜建筑以其快…

护眼台灯怎么选?保护孩子视力看这些标准!

如果家中孩子最近开始出现“眯眼”的行为,那么家长们就要格外注意了!孩子很可能会出现近视的情况,要注意观察学习写作业的光线以及用眼姿势习惯,同时可以及时就医检测。如今,孩子的学习负担越来越大,孩子的…

qt-C++笔记之命令行生成项目pro文件(极简编译qt项目代码)

qt-C笔记之命令行生成项目pro文件(极简编译qt项目代码) 文章目录 qt-C笔记之命令行生成项目pro文件(极简编译qt项目代码)步骤 1:生成项目文件步骤 2:生成 Makefile 文件步骤 3:编译程序详细解释注意事项项目结构main.cpp 文件生成项目文件生成…

【Mac】Premiere Pro 2024 for Mac v24.1软件介绍和安装教程

软件介绍 Premiere Pro是一款专业的视频编辑软件。它被广泛应用于电影、电视和网络视频的制作和编辑,具备强大的功能和灵活的工作流程,适用于从初学者到专业人士的各种需求。以下是对Premiere Pro的一些详细介绍: 主要特点 多轨道时间线编…

据阿谱尔APO Research统计显示,2023年全球有机硅弹性体凝胶市场销售额约为2.1亿美元

根据阿谱尔 (APO Research)的统计及预测,2023年全球有机硅弹性体凝胶市场销售额约为2.1亿美元,预计在2024-2030年预测期内将以超过4.17%的CAGR(年复合增长率)增长。 有机硅弹性体凝胶是一类具有独特性质和广泛应用领域…

[论文笔记]Query Rewriting for Retrieval-Augmented Large Language Models

引言 今天带来论文Query Rewriting for Retrieval-Augmented Large Language Models的笔记。 本篇工作从查询重写的角度介绍了一种新的框架,即重写-检索-阅读,而不是以前的检索-阅读方式,用于检索增强的LLM。关注的是搜索查询本身的适应性&…

Java二维数组的定义以及使用

二维数组 1.二维数组的定义格式 1.概述:数组中的套多个数组 2.定义格式a.动态初始化数据类型[][] 数组名 new 数据类型[m][n]数据类型 数组名[][] new 数据类型[m][n]数据类型[] 数组名[] new 数据类型[m][n]m:代表的是二维数组的长度n:代表的是二维数组中每一个一维数组的…