[Linux#65][TCP] 详解 延迟应答 | 捎带应答 | 流量控制 | 拥塞控制

目录

一、延迟应答

二、捎带应答

三. 流量控制

总结

四. 拥塞控制

1. 拥塞控制

2. 慢启动机制:

3.思考

4.拥塞避免算法

5. 快速恢复算法


一、延迟应答

1. 立即应答问题

  • 接收数据的主机若立刻返回ACK应答,可能返回的窗口较小。
  • 例如:接收端缓冲区为1M,一次收到500K数据,立即应答则窗口为500K。

2. 延迟应答

等待一段时间后,再返回窗口大小

举例:

  • 接收端处理速度快,10ms内可将500K数据消费。
  • 等待200ms应答,返回的窗口大小为1M,增加网络吞吐量。
  • 目标:保证网络不拥塞的情况下提高传输效率。

3. 延迟应答限制

  • 数量限制:每隔N个包应答一次,N一般取2。
  • 时间限制:超过最大延迟时间应答,一般取200ms。
  • 延时应答时间不能超过超时重传时间。

4. 确认序号

  • TCP不一定对每个报文都应答,确认序号表示之前连续报文已收到。

二、捎带应答

1. 报头应答

  • 主机A给主机B发信息,主机B 返回 ACK+发给 A 的 data

2. 捎带应答实现

  • 主机 B 可以携带报头它也有序号也可以携带有效载荷,发送数据
  • 主机B给主机A应答时,将ACK标记位设为1,并携带B给A的信息。

三. 流量控制

借助滑动窗口实现

定义与目的

  • 接收端处理数据的速度是有限的。
  • 如果发送端发送速度过快,接收端缓冲区可能被打满,导致丢包及重传等连锁反应。
  • TCP支持根据接收端处理能力调整发送端的发送速率,此机制称为流量控制(Flow Control)。

如何确定对方初始接收能力

  • 在正式通信前,双方通过三次握手过程交换信息。
  • 三次握手期间,TCP报文头部包含窗口大小字段,用于指示接收方当前能够接受的数据量。

流量控制:

动态调整窗口大小

  • 接收端会在TCP首部中的“窗口大小”字段标明自己可接收的数据量,并通过ACK确认报文告知发送端。
  • 较大的窗口值意味着网络具有更高的吞吐潜力。
  • 当接收端接近其缓冲区容量限制时,它会减小并通知新的窗口大小给发送端以降低发送速率。
  • 若接收端缓冲区完全占满,则设置窗口为0;此时发送方暂停发送新数据但需周期性地发送窗口探测数据段来获取最新的窗口信息。

关于TCP窗口大小的技术细节

  • TCP头部含有一个16位长的窗口字段,理论上最大表示65535字节。
  • 然而,通过使用TCP选项里的窗口扩大因子M,实际窗口大小可远超这个数值。具体来说,实际窗口大小等于窗口字段值左移M位的结果。

总结

几乎所有的策略,起作用的都是在两端机器上的!

tcp 还替我们考虑了网络的情况,网络信道有所评估


四. 拥塞控制

(场景

1. 拥塞控制

TCP的可靠性机制

  • 包括超时重传、连接管理、丢包重传、按序到达、去重、滑动窗口和流量控制等。
  • 这些策略主要针对端到端的问题,但网络本身也可能出现问题。

网络问题与重传决策

(与超时重传对比学习

  • 如果客户端发送1万个报文,而服务器只响应了一个ACK,这表明可能不是接收方的问题而是网络拥塞导致的大量丢失。
  • 在这种情况下,不应该简单地进行大量的超时重传,因为这样会加重已经拥堵的网络状况。

拥塞控制的重要性

  • TCP不仅考虑了双方主机的可靠性,还考虑了网络路径上的问题。
  • 拥塞控制避免在网络故障时大量重传,从而减轻网络压力,等待网络恢复后再正常传输数据。

2. 慢启动机制:

  • 即使有滑动窗口,刚开始发送大量数据仍然可能导致问题。
  • 慢启动通过先发送少量数据来探测当前网络状态,再根据反馈调整发送速率。
  • 拥塞窗口是一个用于表示网络接收能力的数值。初始值设为1,每次收到ACK后增加1。

拥塞窗口与滑动窗口的关系

客户端:发送窗口
网络:拥塞窗口
服务器:接收窗口(自己的接收能力)

实际 发送窗口==min(拥塞窗口, 接收窗口)决定。swnd = min(cwnd, rwnd)

慢启动:

  • 初始阶段增长迅速(指数级),但当超过慢启动阈值时转为线性增长。
  • 启动阈值在超时重传时减半,并且拥塞窗口重新置为1。

动态调整与拥塞检测

  • 少量丢包触发超时重传;大量丢包则视为网络拥塞。
  • 随着通信开始,吞吐量逐渐上升直至网络拥堵发生,此时吞吐量急剧下降。
  • 拥塞控制旨在快速传输数据同时防止网络过载。

3.思考

发明慢启动机制算法的人就是一个天才!!实验是检验真理的唯一标准

慢启动何时结束?

慢启动不会无限进行,其增长会在达到一个特定阈值时停止,这个阈值称为慢启动门限(ssthresh)。

慢启动门限的定义:慢启动门限是一个状态变量,用于控制慢启动和拥塞避免算法的切换。

慢启动与拥塞避免的切换条件

  • 当拥塞窗口(cwnd)小于ssthresh时,使用慢启动算法。
  • 当cwnd大于或等于ssthresh时,使用拥塞避免算法。

4.拥塞避免算法

拥塞避免的触发条件

  • 当cwnd超过ssthresh时,进入拥塞避免算法。

拥塞避免的ssthresh值通常设置为65535字节。

⭕ 拥塞避免的增长规则

  • 每收到一个ACK,cwnd增加1/cwnd。
  • 以线性增长代替慢启动的指数增长,增长速度放缓。

拥塞状况的识别

  • 随着cwnd的增长,网络逐渐进入拥塞状态,出现丢包现象。

拥塞发生时的处理:重传机制

  • 超时重传
  • 快速重传

超时重传的拥塞发生算法

  • ssthresh设为cwnd/2
  • cwnd重置为1
  • 重新开始慢启动,数据流突然减少。

快速重传的拥塞发生算法

  • cwnd设为原来的一半
  • ssthresh设为更新后的cwnd
  • 进入快速恢复算法

5. 快速恢复算法

快速恢复的前提

  • 快速重传和快速恢复算法通常同时使用。
  • 认为网络状况不那么糟糕,因为还能收到3个重复ACK。

快速恢复的步骤

  • cwnd设为ssthresh + 3
  • 重传丢失的数据包
  • 收到重复ACK时,cwnd增加1
  • 收到新数据的ACK后,cwnd设为第一步中的ssthresh值,重新进入拥塞避免状态。

总结

  • 拥塞控制既提高了效率也保证了可靠性,是一种优雅的折中方案。
  • 目标是在不引起网络拥塞的情况下最大化传输效率。

补:对于每一个TCP 通信的进程,都存在两端的通信实体(通常是两个网络设备或主机),每一端都分别维护着自己的接收缓冲区和发送缓冲区

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

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

相关文章

安装测试hasura

遗憾的是hasura 访问MySQL是收费的,访问PostgreSQL和MS SQL Server是免费的。 安装PG数据库 # 运行Hasura容器 docker run -d --name postgres-hasura -e POSTGRES_PASSWORDPassw0rd -e POSTGRES_DBhasura -p 5433:5432 postgres docker exec -it postgres-hasu…

TDC上YARN Web-UI 查看application日志方法

方法一 #通过浏览器访问tdc,访问的工作节点对于TDC都是外部节点。在提交给yarn任务后,YarnRM的Web UI 可以展示yarnnm上运行的application日志,但是由于跳转的svc地址,无法直接访问。 #在tdc界面上找到yarn实例,进入ya…

数据治理:制造企业转型的关键要素与战略需求

制造业,作为国民经济的主体,是立国之本、兴国之器、强国之基。从工业文明的曙光初现,到今日全球化的激烈竞争,始终昭示着一个真理:没有强大的制造业,就没有国家和民族的强盛。 为全面推进制造强国建设&…

Python精选200Tips:186-190

针对序列(时间、文本)数据的网络结构 续 P186-- 双向LSTM(Bidirectional Long Short-Term Memory 2005)(1)模型结构说明(2)创新性说明(3)示例代码:IMDB电影评论情感分析 …

污水排放口细粒度检测数据集,污-水排放口的类型包括10类目标,10000余张图像,yolo格式目标检测,9GB数据量。

污水排放口细粒度检测数据集,污-水排放口的类型包括10类目标(1 合流下水道,2 雨水,3 工业废水,4 农业排水,5 牲畜养殖,6 水产养殖,7 地表径流,8 废水处理厂&…

【cocos creator】输入框滑动条联动小组建

滑动条滑动输入框内容会改变 输入框输入,滑动条位置改变 const { ccclass, property } cc._decorator;ccclass() export default class SliderEnter extends cc.Component {property({ type: cc.Float, displayName: "最大值", tooltip: "" }…

ssm职业高中学情成绩系统设计+jsp

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 摘 要 I Abstract II 第一章 绪论 1 1.1 研究背景 1 1.2 研究意义 1 1.3 研究内容 2 第二章 开发环…

PE结构之绑定导入表

打印绑定导入表 //打印 绑定导入表 BOOL PrintBoundImport(__in char* m_fileName) {char* Filebuffer NULL;if (!GetFileBuffer(m_fileName, &Filebuffer)) return FALSE;PIMAGE_DOS_HEADER LPdosHeader NULL;PIMAGE_NT_HEADERS LPntHeader NULL;LPdosHeader (PIMAGE…

Qt基础对话框QDialog

模态显示对话框 调用exec方法可以使得对话框模态显示,但是一个阻塞函数 [virtual slot] int QDialog::exec() 对话框的三个槽函数 accept [virtual slot] void QDialog::accept(); reject [virtual slot] void QDialog::reject() done [virtual slot] void QDia…

鸢尾花书实践和知识记录[6-23数据聚类]

文章目录 思维导图数据聚类和引例基于图论的聚类算法算法流程1构造数据构造距离矩阵相似度相似度矩阵创建图 拉普拉斯矩阵标准拉普拉斯矩阵(Combinatorial Laplacian)归一化拉普拉斯矩阵 (Normalized Laplacian)无标度拉普拉斯矩阵 (Signless Laplacian)归一化对称拉普拉斯矩阵…

Vue深入了解

Vue深入了解 MVVMv-model (双向数据绑定原理)异步更新keep-alive原理$nextTick原理computed 和 watch 的区别css-scoped虚拟DOMVuex && PiniaVue-router原理proxy 与 Object.defineProperty组件通信方式 MVVM <!DOCTYPE html> <html lang"en">&…

怎么把一段音频的人声和背景音乐分开?

在数字音频处理中&#xff0c;将一段音频中的人声和背景音乐分开是一个复杂但又常见的需求。这种技术广泛应用于音乐制作、影视后期、广告制作等多个领域。本文将为你详细解析如何通过不同的方法实现这一目标&#xff0c;帮助你更好地掌握音频分离技术。 一、音频分离的基本概念…

关于C语⾔内存函数 memcpy memmove memset memcmp

memcpy使⽤和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 这个函数在遇到 \0 的时候并不会停下来。 如果source和destination有任何的重叠&am…

基于方块编码的图像压缩matlab仿真,带GUI界面

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 编码单元的表示 4.2编码单元的编码 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 下图是随着方块大小的变化&#xff0c;图像的压缩率以及对应的图像质量指标PSN…

本地生活服务项目入局方案解析!本地生活服务商系统能实现怎样的作业效果?

当前&#xff0c;各大平台的本地生活服务业务日渐兴盛&#xff0c;提高创业者入局意向的同时&#xff0c;也让本地生活服务项目有哪些等问题也成为了多个创业者社群中的热议对象。而从目前的讨论情况来看&#xff0c;在创业者们所询问的众多本地生活服务项目中&#xff0c;通过…

uniapp 游戏 - 使用 uniapp 实现的扫雷游戏

0. 思路 1. 效果图 2. 游戏规则 扫雷的规则很简单。盘面上有许多方格,方格中随机分布着一些雷。你的目标是避开雷,打开其他所有格子。一个非雷格中的数字表示其相邻 8 格子中的雷数,你可以利用这个信息推导出安全格和雷的位置。你可以用右键在你认为是雷的地方插旗(称为标…

安卓/iOS H5传递动态参数方法,App渠道归因方案

需求和痛点 负责渠道分发的部门都需要收集区分不同安装渠道的转化量&#xff08;注册、付费等数据&#xff09;做数据分析&#xff0c;通常包括官网跳转、KOL营销、用户分享、广告投放、活动拉新等多个渠道。 场景 用户在网页上进行用户行为&#xff0c;产生了数据&#xff0c…

Vue 项目文件大小优化

优化逻辑 任何优化需求&#xff0c;都有一个前提&#xff0c;即可衡量。 那 Vue 加载速度的优化需求&#xff0c;本质上是要降低加载静态资源的大小。 所以&#xff0c;优化前&#xff0c;需要有一个了解项目现状的资源加载大小情况。 主要分 3 步走&#xff1a; 找到方法测…

ZYNQ使用XGPIO驱动外设模块(前半部分)

目录 目录 一、新建BD文档&#xff0c;添加ZYNQ处理器 1.BD文档: 2.在Vivado中&#xff0c;BD文件的生成过程通常包括以下步骤&#xff1a; 1)什么是Tcl Console: 3.PL部分是FPGA可编程逻辑部分&#xff0c;它提供了丰富的IO资源&#xff0c;可以用于实现各种硬件接口和功…

3dsMax添加天空盒

点击渲染&#xff0c;环境 &#xff0c; 点击位图 找到要设置的天空HDR&#xff0c;可以使用HDR(EXR)贴图 一个可以下载HDR贴图的网站 https://polyhaven.com/hdris在渲染的时候不要使用使用微软输入法&#xff0c;3dsmax会卡死&#xff0c; 在渲染的时候不要使用使用微软…