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

news2025/1/19 19:26:16

重传机制

  • 超时重传:超时重传时间(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 ,恢复过程结束。

 

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

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

相关文章

基于顺序表实现通讯管理系统!(有完整源码!)

​​​​​​​ 个人主页:秋风起,再归来~ 文章专栏:C语言实战项目 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安!​​​​​​​ 目录 1、实现思路 ​…

从B2B转向B2B2C模式:工业品牌史丹利百得的转型历程

图片来源:Twitter 在当今数据驱动的营销环境中,企业努力更好了解客户,并在整个客户旅程中提供个性化体验。史丹利百得(Stanley Black & Decker)是一家领先的工具和工业设备供应商,近年来开始重大转型。…

Oracle的物理结构解析

这些图是我自己画的,我也会在我的公众号【会用数据库】解析。理解起来非常简单,而且非常好记。不用死记硬背,有兴趣可以来公众号看呀。

深度学习【向量化(array)】

为什么要向量化 在深度学习安全领域、深度学习练习中,你经常发现在训练大量数据时,深度学习算法表现才更加优越,所以你的代码运行的非常快至关重要,否则,你将要等待非常长的时间去得到结果。所以在深度学习领域向量化…

Apache Pulsar源码解析之Lookup机制

引言 在学习Pulsar一段时间后,相信大家也或多或少听说Lookup这个词,今天就一起来深入剖析下Pulsar是怎么设计的它吧 Lookup是什么 在客户端跟服务端建立TCP连接前有些信息需要提前获取,这个获取方式就是Lookup机制。所获取的信息有以下几种…

机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战,以及XGBClassifier分类器的调优策略

大家好,我是微学AI,今天给大家介绍一下机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战,以及XGBClassifier分类器的调优策略。XGBClassifier是基于eXtreme Gradient Boosting (XGBoost)算法的分类器模型,在机器学习领…

成为图像SoC大牛有多难?

IPC(Internet Protocol Camera,即网络摄像机)芯片架构师需要具备一系列跨学科的知识和技能。IPC芯片架构师的工作涉及到先进工艺、低功耗、SoC架构、处理器架构、图像处理、视频压缩、网络通信以及嵌入式系统设计等多个领域。以下是一些关键的…

Ubuntu22.04中基于Qt开发Android App

文章目录 前言在Ubuntu22.04中配置开发环境案例测试参考 前言 使用Qt开发手机应用程序是一种高效且灵活的选择。Qt作为一个跨平台的开发框架,为开发者提供了统一的开发体验和丰富的功能库。首先,Qt的跨平台性让开发者可以使用相同的代码库在不同的操作系…

收藏|深入浅出分析光刻机

光刻技术是指在光照作用下,借助光致抗蚀剂(又名光刻胶)将掩膜版上的图形转移到基片上的技术。 光刻机是半导体生产制造的主要生产设备之一,也是决定整个半导体生产工艺水平高低的核心技术机台。半导体技术发展都是以光刻机的光刻线…

【测试开发学习历程】python流程控制

前言:写到这里也许自己真的有些疲惫了,但是人生不就是像西西弗斯推石上山一样的枯燥乏味吗? 在python当中的流程控制主要包含以下两部分的内容: 条件判断 循环 1 条件判断 条件判断用if语句实现,if语句的几种格式…

微软detours代码借鉴点备注

comeasy 借鉴点1 Loadlibray的时间选择 注入库wrotei.dll,为了获取istream的接口,需要loadlibrary,但是在dllmain中是不建议这样做的。因此,动态库在dllmain的时候直接挂载了comeasy.exe的入口 //获取入口 TrueEntryPoint (i…

太阳能光伏储能系统:全周期一站式解决方案

随着全球能源结构的不断变革,清洁能源的重要性日益凸显。太阳能光伏储能系统作为一种高效、环保的能源解决方案,正逐渐成为推动能源转型的关键力量。本文将详细介绍太阳能光伏储能系统的全周期一站式解决方案,以期为读者提供全面、深入的了解…

动态多目标优化:动态约束多目标优化测试集DCP1-DCP9的TruePF(提供MATLAB代码)

一、进化动态约束多目标优化测试集DCP1-DCP9 参考文献: [1]G. Chen, Y. Guo, Y. Wang, J. Liang, D. Gong and S. Yang, “Evolutionary Dynamic Constrained Multiobjective Optimization: Test Suite and Algorithm,” in IEEE Transactions on Evolutionary Com…

聚能共创下一代智能终端操作系统 软通动力荣膺“OpenHarmony优秀贡献单位”

近日,由开放原子开源基金会指导,以“开源共享未来”为主题的OpenHarmony社区年会在北京成功举办。本次活动汇集OpenHarmony项目群共建单位及生态伙伴等多方力量,旨在对2023年度OpenHarmony年度开源事业全面总结的同时,吸引更多伙伴…

VSCode如何调试C#代码?

1、启动VSCode; 一、创建项目 1、创建一个文件夹(workspace): 2、进入这个文件夹 cd tt1 3、创建解决方案 dotnet new sln -o MyApp 4、进入解决方案 cd .\MyApp\ 5、创建项目(在此假定为一个命令行的项目) dotnet new …

PCIe 7.0|不要太卷,劝你先躺平

PCIe 6.0都已经发布了2-3年了,目前业内生态还没完全建立。甚至很多人都还没用上PCIe 5.0呢! 近日,PCIe 7.0 ver0.5版本已经开放,同时宣布马不停蹄准备在2025年完成正式SPEC规范发布。 回顾PCIe 7.0变更,PCI-SIG在2022年…

力扣1448---统计二叉树中好节点的数量(Java、DFS、中等题)

题目描述: 给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。 「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。 示例 1: 输入:root [3,1,4,3,null,1,5] 输出…

SSM项目实战——哈哈音乐(四)前台模块开发

1、项目准备 ①导入依赖和前端资源 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.x…

Educational Codeforces Round 162 (Rated for Div. 2) ----- E. Count Paths --- 题解

E. Count Paths&#xff1a; 题目大意&#xff1a; 思路解析&#xff1a; 根据题目中定义的美丽路径&#xff0c;我们可以发现路径只有两种情况&#xff1a; 当前结点作为起始结点&#xff0c;那我们只需要知道它的子树下有多少个相同颜色的结点&#xff0c;并且相同颜色的结…

攻防世界:mfw[WriteUP]

根据题目提示考虑是git库泄露 这里在地址栏后加.git也可以验证是git库泄露 使用GitHack工具对git库进行恢复重建 在templates目录下存在flag.php文件&#xff0c;但里面并没有flag 有内容的只有主目录下的index.php index.php源码&#xff1a; <?phpif (isset($_GET[page…