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

news2024/11/24 4:56:22

目录

一、延迟应答

二、捎带应答

三. 流量控制

总结

四. 拥塞控制

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.coloradmin.cn/o/2209225.html

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

相关文章

数字化转型新引擎:中小企业信息化建设的破局与未来-亿发

随着全球数字经济的蓬勃发展,信息化建设已成为企业提升竞争力、提高运营效率的重要途径。中小企业作为经济的重要组成部分,也逐步认识到信息化的重要性。然而,尽管中小企业在信息化方面有强烈的需求,但在实际推进过程中却面临诸多…

简单粗暴理解GNN、GCN、GAT

GNN 思想:近朱者赤近墨者黑 GNN的流程: 聚合(把邻居的信息贴到自己身上来,作为它自己特征的补足)更新循环(为什么要多次?看以下例子) GNN能干嘛? 1.结点分类&#xf…

Windows系统最高分辨率(单边16384)

11520*216024883200 来源: 2017-04-08【【极客湾】双路核弹?三屏4K?终极Geforce的究极测试!】 【精准空降到 02:45】 https://www.bilibili.com/video/BV1tx411S7MU/?t165 2020-12-09【用三台8K电视玩游戏!能成功吗&a…

【Linux】嵌入式Linux系统的组成、u-boot编译

Linux—嵌入式Linux系统的组成、u-boot编译 前言一、嵌入式Linux系统的组成1.1 嵌入式Linux系统和PC完整的操作系统的对比如下:1.2 PC机—Windows系统启动流程(PC机—Linux系统、嵌入式ARM—linux系统的启动流程类似) 二、编译u-boot2.1 u-bo…

测试质量报告=测试报告?当然不是!

测试报告大家都大概知道怎么做,但是质量报告呢,说起来到底与测试报告有什么不同? 仔细思考,其实这两种报告之间的差异还是比较直观的。 测试报告 更多是以测试为出发点,关注测试工作的背景、过程、完成度和结果。当…

Qt-系统处理定时器相关事件(59)

目录 描述 使用 描述 qt进行了封装,之前也使用过了 使用 先创建一个定时器 原型 这个事件是继承自 QObject 的,Widget 是继承 QObject 的,所以我们能够直接使用 重写 如下重写过后的定时器事件,正常倒计时了

rpc中常用的数据格式:Protobuf 图文详解

概述 protobuf也叫protocol buffer,是google 的一种数据交换的格式,它跨语言、跨平台。可以实现多种语言文件的数据传输实现(java、c#、c、go 和 python 等),如一个cpp程序和一个python程序的数据传输。 由于它是一种…

Linux下以编译源码的方式安装Qt5与Qt6及其使用

文章目录 概要资源下载依赖安装编译Qt5Qt6 遇到的问题qtchooser使用 概要 自 Qt 5.15 开始,不再提供 open source offline installers,也就是原来的 .run 的安装文件,只能通过源码编译来安装了参考文章 资源下载 源码网址,链接…

【C语言复习】分支和循环

【C语言复习】分支和循环 1. if语句1.1 if1.2 else1.3分支中包含多条语句1.4嵌套if1.5悬空else问题 2.关系操作符3. 条件操作符4.逻辑操作符:&& 、|| 、!4.1 逻辑取反运算符4.2 与运算符4.3或运算符4.4 练习:闰年的判断4.5短路 5.switch 语句5.1…

【黑苹果】记录MacOS升级Sonoma的过程

【黑苹果】记录MacOS升级Sonoma的过程 一、硬件二、提前说明三、准备OC四、选择驱动五、选择ACPI六、下载内核扩展七、其他问题 一、硬件 设备是神舟zx6-ct5da 具体参照下图 二、提前说明 本机器已经安装过 macOS Monterey 12.6,这次是升级到 macOS Sonoma 14。 …

GoogLeNet,代码示例,辅助分类器,Inception

亮点: 引入了Inception结构(融合不同尺度的特征信息) 使用1x1的卷积核进行降维以及映射处理 添加两个辅助分类器帮助训练 丢弃全连接层,使用平均池化层(大大减少模型 参数) GoogLeNet的网络连接图&…

LInux学习FreeType编程

文章目录 使用freetype 显示一个文字使用 freetype 显示一行文字了解笛卡尔坐标系每个字符的大小可能不同怎么在指定位置显示一行文字freetype 的几个重要数据结构1、**FT_Library**结构体2、FT_Face结构体3、FT_GlyphSlot结构体4、FT_Glyph结构体5、FT_BBox结构体 读懂显示一行…

Linux运维_Apache更改默认网站目录

1.首先创建目录 并且在目录下新建测试文件 index.html mkdir -p /home/test/ap_web 直接wget 百度官网 wget www.baidu.com 2.编辑配置文件 /etc/apache2/sites-available/000-default.conf(找到 DocumentRoot)更改为刚刚创建的目录 接着在添加 最终文件: 3.给文件 添加属…

Nacos配置管理和Nacos集群配置

目录 Nacos作为配置中心实现配置管理 统一配置管理 如何在nocas添加配置文件 在微服务拉取nacos配置中心的配置 1)引入nacos-config依赖 2)添加bootstrap.yaml 3)测试,读取nacos配置中心中配置文件的内容 ​编辑 总结&…

在Spring Boot中具有多个实现的接口正确注入的六种方式

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 在Spring Boot中,当一个接口具有多个实现时,正确地将这些实现注入到需要使用它们的地方是一个常见的需求。以下是在Spring Boot中实现这一目标的六种方式: 1. 使用Autowir…

maven聚合ssm

如果没有写过ssm项目请移步SSM后端框架搭建(有图有真相)-CSDN博客 数据库准备 create table user (id int (11),uid varchar (60),name varchar (60),age int (11),sex varchar (12) ); insert into user (id, uid, name, age, sex) values(10,202409…

小米电机与STM32——CAN通信

背景介绍:为了利用小米电机,搭建机械臂的关节,需要学习小米电机的使用方法。计划采用STM32驱动小米电机,实现指定运动,为此需要了解他们之间的通信方式,指令写入方法等。花了很多时间学习,但网络…

LINUX网络编程:cookie和session

目录 1.cookie 1.2.cookie原理 1.3.cookie的格式以及字段 字段介绍: 完整的cookie 1.4.cookie的安全问题 2.session 2.2session的原理 1.cookie 在大家在浏览b站的时候,都会发现一个问题,当我们登录过一次之后,下次点开b站…

2024年最新Stable Diffusion模型资源合集!附整合安装包!

(模型资源在ComfyUI、WebUI以及ForgeUI中都通用) 之前的Stable Diffusion笔记受到了不少小伙伴的关注,很感谢大家的建议和支持。有很多小伙伴私信我问我一些AI绘画的模型资源在哪来下载,一般来说有两个网站比较常用,分…

位操作解决数组的花样遍历

文章目录 题目 一、思路: 二、代码 总结 题目 leetcodeT289 https://leetcode.cn/problems/game-of-life/description/ 一、思路: 这题思路很简单,对每个位置按照题目所给规则进行遍历,判断周围网格的活细胞数即可。但是题目要求…