计算机网络-TCP重传、滑动窗口、流量控制、拥塞控制

重传机制

  • 超时重传:超时重传时间(RTO)设定为略大于RTT(动态)。触发场景包括自己发送的数据包丢失和别人给自己的回应数据包丢失。启动重传机制后如果还没有收到数据包,则RTO设置为上次的两倍,直到达到重传次数上限。缺点是周期长。
  • 快速重传:接收方没有收到期望的SEQ,就会重复发送同样的ACK。发送方收到同样的ACK达到一定次数,无需等待超时,就会重传。问题是只能重传一个SEQ包,如果连续丢包,效率很低。
  • SACK:选择性确认,将已收到的数据的信息发送给发送方。接收方回复,在发送ACK的同时,同时发送SACK告诉发送方在ACK后的哪些报文(区间)我已经接收了。Duplicate SACK,如果发送方因为某些原因发送了重复报文,接收方可以使用SACK来告诉发送方发送重复了。

滑动窗口机制

  • 窗口:发一个TCP报文等一个回应太慢,RTT越长,效率越低。接收端告诉发送端自己还有多少缓冲区可以接收数据,发送端就可以无需等待应答一次性发送多个。发送方滑动窗口大小 = 已发送但未收到ACK的数据大小 + 未发送但仍可发送的数据大小。窗口上的数据实际上在操作系统的缓存上。

流量控制

  • 定义:通过滑动窗口实现流量控制。接收方的窗口大小会根据操作系统调整大小,然后实时把大小同步给发送方。如果不进行流量控制,接收方处理不过来导致丢包就会触发重发,导致资源浪费。
  • 死锁:发送收缩窗口的消息之后,由于收缩的消息不能立即到达,操作系统不能立即减小缓存,而是要过段时间再减小。现象是某个时刻窗口变为0,但是窗口增大的报文丢失了,双方互相等待。解决方法是启用一个定时器,如果在一个定时器内没有收到报文,就会发送窗口探测报文。(一般发送三次,如果还没收到任何消息就发送RST报文)
  • 糊涂窗口:现象是接收方处理数据的速度过慢,导致窗口只能越来越小,而发送方有多少发多少(TCP包头占比越来越大),就会逐渐导致窗口塞满。解决方法是接收方当窗口小于 min(MSS, 缓存空间/2) 时直接通知窗口大小为0,直到窗口恢复。发送方如果当可用窗口大小 >= MSS 且 可发送的数据 >= MSS才发送数据,否则如果有发送过但未确认的数据就等待,如果没有就发送数据。

拥塞控制

  • 定义:流量控制参考的是的时接收方,而拥塞控制参考的是网络状况。如果不进行拥塞控制,会导致网络中出现大量时延、丢包,然后进行重传,导致恶性循环。实时维护发送窗口 swnd = min(拥塞窗口 cwnd , 接收窗口 rwnd)。
  • 机制
    • 慢启动:TCP 在刚建立连接完成后,需要慢启动。原因是不明网络情况直接发送大量数据后果未知。初始cwnd为一个设定的值,之后每接收到一个ACK报文,窗口大小加一个MSS。这个过程 cwnd 是指数级增长的: cwnd 越大发送的包越多,包越多ACK越多,增长的越快。增长的上限是慢启动门限(ssthresh),到达ssthresh之后,进入拥塞避免。
    • 拥塞避免:每接收到一个ACK报文,窗口大小加 1/cwnd 个MSS。这个过程 cwnd 是线性增长的。
    • 拥塞发生:拥塞判断条件是发生数据包重传。超时重传时,ssthresh = cwnd/2,cwnd恢复初始值,重新进入慢启动。快速重传时,ssthresh = cwnd/2,快速恢复算法因收到了三个同样的ACK触发重传故cwnd = ssthresh + 3MSS。如果再收到重复的 ACK,那么 cwnd 增加 1MSS。直到收到了新的ACK,把 cwnd 设置为 ssthresh ,恢复过程结束。

 

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

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

相关文章

双连通分量算法

1. 连通图概念 连通图:无向图任意两点之间存在通路。 强连通:有向图(前提)中,任意两点都有至少一条通路,则此图为强连通图。 弱连通图:将有向图的有向边换成无向边得到的图是连通图&#xff0c…

Tomcat管理配置

Tomcat管理配置 1 host-manager项目2 manager项目 Tomcat 提供了Web版的管理控制台,位于webapps目录下。Tomcat 提供了用于管理Host的host-manager和用于管理Web应用的manager。 1 host-manager项目 Tomcat启动之后,可以通过 http://localhost:8080/ho…

Cortex-M7 外设(peripherals)总览

1 PPB内存映射总览 由Cortex-M7的内存映射模型可知,0xE000_0000~0xE00F_FFFF地址空间为私有外设总线 (Private peripheral bus,PPB)的内存区域,其具体的地址映射如表1所示。 表1 PPB寄存器内存映射 其中,注释后缀的相关含义如…

5.5.1MFC对话框——文件对话框

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系将于24小时内删除 目录 1.实验原理 2.示例说明 1.实验原理 CFileDialog类 用CFileDialog类提供的通用文件对话框,实现Windows标准的【打开】和【另存为】功能。 CFileD…

前端canvas项目实战——在线图文编辑器(八):复制、删除、锁定、层叠顺序

目录 前言一、效果展示二、实现步骤1. 复制2. 删除3. 锁定4. 层叠顺序 三、实现过程中发现的bug1. clone方法不复制自定义属性2. 复制「锁定」状态的对象,得到的新对象也是「锁定」状态 四、Show u the code后记 前言 上一篇博文中,我们细致的讲解了实现…

如何在没有备份的情况下从 iPad 恢复照片?

有很多操作都可能导致iPad照片丢失,包括误删除、出厂设置、iPad的iOS更新等。如果没有备份,似乎没有办法找回它们。然而,即使您将备份保留在 iCloud 或iTunes上,这些方式也需要您的 iPad 首先重置,从而用备份内容覆盖当…

Java-类型转换

Java数据类型转换的规则掌握后,将使我们对以后的学习事半功倍,下面是我列出的一些重点。 类型转换 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。底到高依次是:byte,short,char->int->lo…

AJAX 原理

一、AJAX原理 - XMLHttpRequest 定义: 关系:axios 内部采用 XMLHttpRequest 与服务器交互。 好处:掌握使用 XHR 与服务器进行数据交互,了解 axios 内部原理。 1.1 使用 XMLHttpRequest: 步骤: 1. 创建 XM…

OpenHarmony开发-系统烧录

本文详细介绍了烧录OpenHarmony系统到开发板的操作流程。从基础的硬件准备和软件环境设置入手,详细说明了如何配置开发环境、构建系统镜像等过程,详细描述了烧录过程中的关键步骤,以及如何使用专用工具将OpenHarmony系统镜像传输到开发板。同…

ffmpeg 将多个视频片段合成一个视频

ffmpeg 将多个视频片段合成一个视频 References 网络视频 6 分钟的诅咒。 新建文本文件 filelist.txt filelist.txtfile output_train_video_0.mp4 file output_train_video_1.mp4 file output_train_video_2.mp4 file output_train_video_3.mp4 file output_train_video_4.m…

PowerJob 分布式任务调度简介

目录 适用场景 设计目标 PowerJob 功能全景 任务调度 工作流 分布式计算 动态容器 什么是动态容器? 使用场景 可维护性和灵活性的完美结合 实时日志&在线运维 PowerJob 系统组件 PowerJob 应用场景 PowerJob 的优势 PowerJob(原OhMyScheduler&…

【opencv】示例-aruco_dict_utils.cpp 计算 ArUco 字典度量

该程序可用于计算 ArUco 字典度量。 要计算考虑翻转标记的指标&#xff0c;请使用 -r 标志。 该程序可用于创建和编写自定义 ArUco 词典。 #include <opencv2/objdetect/aruco_detector.hpp> // 包含aruco marker检测相关功能的头文件 #include <iostream> // 包含…

供应链领域主题:生产制造关键术语和系统

BOM&#xff08;Bill of Material&#xff09;物料清单 BOM&#xff08;Bill of Material&#xff09;物料清单&#xff0c;是计算机可以识别的产品结构数据文件&#xff0c;也是ERP的主导文件。BOM使系统识别产品结构&#xff0c;也是联系与沟通企业各项业务的纽带。ERP系统中…

(源码)基于Spring Boot和Vue植物养殖技巧学习系统的设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2024年Java精品实战案例《100套》 &#x1f345;文末获取源码联系&#x1f345; &#x1f31f…

华为汽车的“计算+通信”电子电气架构

文章目录 整车结构 硬件平台 软件平台 总结展望 整车EEA&#xff08;电子电气架构&#xff09;&#xff0c;按照博世提出的演进路径&#xff0c;大致可以划分为四个阶段&#xff1a;分布式模块阶段、区域控制阶段、中央计算阶段、云计算阶段。示例如下&#xff1a; 本文选取…

MyBatis-Plus的学习笔记

MyBatis-Plus 一、MyBatis-Plus快速入门 1.1 简介 课程版本&#xff1a;3.5.3.1 https://baomidou.com/ MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window) 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&…

序列超图的下一项推荐 笔记

1 Title Next-item Recommendation with Sequential Hypergraphs&#xff08;Jianling Wang、Kaize Ding、Liangjie Hong、Huan Liu、James Caverlee&#xff09;【SIGIR 2020】 2 Conclusion This study explores the dynamic meaning of items in realworld scenarios and p…

微信小程序的页面交互2

一、自定义属性 &#xff08;1&#xff09;定义&#xff1a; 微信小程序中的自定义属性实际上是由data-前缀加上一个自定义属性名组成。 &#xff08;2&#xff09;如何获取自定义属性的值&#xff1f; 用到target或currentTarget对象的dataset属性可以获取数据 &#xff…

【LeetCode题解】2192. 有向无环图中一个节点的所有祖先+1026. 节点与其祖先之间的最大差值

文章目录 [2192. 有向无环图中一个节点的所有祖先](https://leetcode.cn/problems/all-ancestors-of-a-node-in-a-directed-acyclic-graph/)思路&#xff1a;BFS记忆化搜索代码&#xff1a; 思路&#xff1a;逆向DFS代码&#xff1a; [1026. 节点与其祖先之间的最大差值](https…

【JavaWeb】Day32.SpringBootWeb请求响应——分层解耦(二)

3.IOC&DI 3.1 IOC&DI入门 完成Controller层、Service层、Dao层的代码解耦 思路&#xff1a; 1. 删除Controller层、Service层中new对象的代码 2. Service层及Dao层的实现类&#xff0c;交给IOC容器管理 3. 为Controller及Service注入运行时依赖的对象 Controller程序…