[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.mfbz.cn/a/890211.html

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

相关文章

univer实现excel协同

快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&q…

怎么看待数字化转型是大势所趋?

怎么看到数字化转型是大势所趋&#xff1f;下面我结合最新数据给大家讲明白这个事。 近日&#xff0c;我通过大量的数据相关性分析&#xff0c;有了一些关键发现。 【数字化转型】之所以势在必行&#xff0c;主要是因为数字化转型为各个国家数字经济发展提供了重要的参考依据。…

使用js和canvas实现简单的网页贪吃蛇小游戏

玩法介绍 点击开始游戏后&#xff0c;使用键盘上的↑↓←→控制移动&#xff0c;吃到食物增加长度&#xff0c;碰到墙壁或碰到自身就游戏结束 代码实现 代码比较简单&#xff0c;直接阅读注释即可&#xff0c;复制即用 <!DOCTYPE html> <html lang"en"…

SAP将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4]

将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4] 有时需要将Spool中的内容导出成PDF文件&#xff0c;sap提供了一个标准程序RSTXPDFT4可以实现此功能。 1, Tcode:SP01, 进入spool requests list 2, SE38 运行程序RSTXPDFT4 输入spool reqeust号码18680&#xff0c;然后…

im架构分享 即时通讯架构 即时消息 全球架构师峰会im分享 im分布式 企业级im架构 分布式im 即时通讯im架构

1. 之前收藏的淘宝李厉岷老师在全球架构师峰会上做的im技术分享&#xff0c;贴出来备注下。 2. 李老师infoQ主页链接&#xff1a; 李历岷 3. 文章&#xff1a; 电商IM消息系统架构演进_ArchSummit_李历岷_InfoQ精选文章 4. ppt下载地址 &#xff08;注&#xff1a;同期还有…

GAN(Generative Adversarial Nets)

GAN(Generative Adversarial Nets) 引言 GAN由Ian J. Goodfellow等人提出&#xff0c;是Ian J. Goodfellow的代表作之一&#xff0c;他还出版了大家耳熟能详的花书&#xff08;Deep Learning深度学习&#xff09;&#xff0c;GAN主要的思想是同时训练两个模型&#xff0c;生成…

蓝桥杯刷题--幸运数字

幸运数字 题目: 解析: 我们由题目可以知道,某个进制的哈沙德数就是该数和各个位的和取整为0.然后一个幸运数字就是满足所有进制的哈沙德数之和.然后具体就是分为以下几个步骤 1. 我们先写一个方法,里面主要是用来判断,这个数在该进制下是否是哈沙德数 2. 我们在main方法里面调用…

推荐几本编程入门书目

对于编程入门&#xff0c;推荐以下几本书籍&#xff0c;这些书籍覆盖了不同的编程语言&#xff0c;适合零基础的学习者逐步掌握编程基础&#xff1a; 1. 《Python编程快速上手——让繁琐工作自动化》 特点&#xff1a;以简单易懂的方式介绍了Python的基础知识和编程概念&#…

【最新华为OD机试E卷-支持在线评测】构成正方形的数量(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

vue实现列表自动滚动(纯与原生方式)

Vue实现列表自动滚动(纯与原生方式) 源码放在最后&#xff01;1.效果展示: 2.功能说明: 该滚动可能存在的Bug&#xff1a; 1.如果你写的大屏不是使用的接口轮询的方式可能会存在也页面空白的情况(需要手动刷新才能触发列表滚动)&#xff0c;因为我使用的是监听数据的变化然后…

【C++】关联式容器——map和set的使用

文章目录 一、 序列式容器和关联式容器二、set的介绍1.set的构造和迭代器2.set的增删查3.接口lower_bound和upper_bound4.multiset和set的差异 三、map的介绍1.map的构造2.map的增删查3.multimap和map的差异 四、map和set相关OJ 一、 序列式容器和关联式容器 序列式容器&#…

WordPress添加meta标签做seo优化

一、使用function.php文件添加钩子函数添加 方法1、使用is_page()判断不同页面的page_id进行辨别添加不同页面keyword和description &#xff08;1&#xff09;通过页面前台源码查看对应页面的id &#xff08;2&#xff09;或者通过wordpress后台&#xff0c;点击页面列表&…

【网易云音乐】--源代码分享

最近写了一个网易云音乐的音乐实现部分&#xff0c;是通过JavaScript和jQuery实现的&#xff0c;具体效果大家可以参照下面的视频 源代码分享 - git地址: 网易云音乐源代码 下面将着重讲解一下音乐实现部分 视频有点模糊&#xff0c;不好意思&#xff0c;在b站上添加视频的时候…

Ping32:专业的终端安全管理解决方案

在当今数字化转型迅速发展的时代&#xff0c;终端安全管理已成为企业信息安全的重要环节。随着远程办公和移动设备的普及&#xff0c;企业面临着越来越多的网络安全挑战。Ping32作为一款专业的终端安全管理解决方案&#xff0c;以其卓越的性能和易用性&#xff0c;成为众多企业…

[Linux] Linux 进程程序替换

标题&#xff1a;[Linux] Linux 进程程序替换 个人主页水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 O、前言 一、进程程序替换的直观现象&#xff08;什么是进程程序替换&#xff1f;&#xff09; 二、进程程序替换的原理 三、进程程序替换的函数&#xff08…

几种Word Embedding技术详解

NLP 中的词嵌入是一个重要术语&#xff0c;用于以实值向量的形式表示用于文本分析的单词。这是 NLP 的一项进步&#xff0c;提高了计算机更好地理解基于文本的内容的能力。它被认为是深度学习在解决具有挑战性的自然语言处理问题方面最重要的突破之一。 在这种方法中&#xff…

有了WPF后Winform还有活路吗?

近年来&#xff0c;随着技术的不断发展&#xff0c;Windows Presentation Foundation&#xff08;WPF&#xff09;和Windows Forms&#xff08;WinForms&#xff09;这两种技术在开发桌面应用程序方面一直备受关注。虽然WPF以其强大的功能和灵活性吸引了众多开发者&#xff0c;…

快速上手C语言【上】(非常详细!!!)

目录 1. 基本数据类型 2. 变量 2.1 定义格式 和 命名规范 2.2 格式化输入和输出&#xff08;scanf 和 printf&#xff09; ​编辑 2.3 作用域和生命周期 3. 常量 4. 字符串转义字符注释 5. 操作符 5.1 双目操作符 5.1.1 算数操作符 5.1.2 移位操作符 5.1.3 位操作符…

架构设计笔记-7-系统架构设计基础知识

目录 知识要点 单选 案例分析 1.质量属性 / 管道过滤器 / 数据仓库风格 2.面向对象风格 / 控制环路风格 3.软件架构风格 / 架构风格选择 4.体系结构方案对比 5.面向对象风格 / 基于规则风格 6.解释器风格 / 管道过滤器风格 7.面向对象风格 / 解释器风格 8.软件架构复…

【宝可梦】游戏

pokemmo https://pokemmo.com/zh/ 写在最后&#xff1a;若本文章对您有帮助&#xff0c;请点个赞啦 ٩(๑•̀ω•́๑)۶