当前位置: 首页 > news >正文

TCP重传,滑动窗口,流量控制,拥塞控制

TCP重传,滑动窗口,流量控制,拥塞控制

TCP重传机制:

  • 超时重传
  • 快速重传
  • SACK
  • D-SACK

通过序列号与确认应答判断是否要重传

超时重传:
超过指定时间没有收到确认应答报文,就会重发该数据

触发超时重传的情况:

  • 数据包丢失
  • 确认应答丢失

RTT:数据发送时刻到接受到确认的时刻的差值 包的往返时间

RTO:超时重传时间

RTO太长或太短:

  • 太长,效率差,重发慢,丢了半天才重发,性能差
  • 太短:没有丢就重发,增加网络拥塞,导致更多的超时

超时重传时间RTO的值应该略大于报文往返RTT的值

如果超时重发的数据,再次超时的时候,又需要重传,TCP的策略是超时间隔加倍

也就是每次遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁发送

超时重传缺点:

超时周期长,用快速重传机制来解决

快速重传

不以时间为驱动,而是以数据驱动重传

当收到三个相同的ACK报文,会在定时器过期之前,重传丢失的报文段

缺点:不知道重传一个,还是重传所有的问题

于是有了SACK方法:选择性确认

在TCP头部加一个SACK,可以将已收到的数据的信息发送给发送方

这样就可以知道哪些数据接收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

相当于是快速重传知道了该重传一个还是全部

D-SACK

使用SACK来告诉发送方有哪些数据被重复接受了

D-SACK的作用:

  • 可以让发送发知道,是发出去的包丢了,还是接收方回应的ACK包丢了
  • 可以知道是不是发送方的数据包被网络延迟了
  • 可以知道网络中是不是把发送发的数据包给复制了

滑动窗口:

上面的传输方式有一个缺点:数据往返时间越长,通信的效率就越低

窗口就是指无需等待确认应答,而可以继续发送数据的最大值

窗口实质上是一个缓存空间,发送发主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据,如果收到确认应答,此时数据就可以从缓存区清除

确认应答报文丢也没事,可以累计确认,累计应答

窗口大小:
通常是由接收方的窗口大小来决定的

否则接收方可能无法正常接收到数据

发送方的滑动窗口:

有四部分:

  • 1 是已发送并收到ACK确认的数据
  • 2是已发送但未收到ACK确认的数据
  • 3 是未发送但总大小在接受方处理范围内
  • 4是未发送但总大小超过接收方处理范围

当发送方把数据全部都发送出去,可用窗口3 为0 在未接到ACK之前无法发送数据

接收方的滑动窗口

三部分:

  • 已经成功接受并确认的数据(等待应用进程读取)
  • 未收到数据但可以接收的数据
  • 未收到数据并不可以接受的数据

接收窗口和发送窗口的大小是相等的吗?

并不完全相等,接受窗口的大小约等于发送窗口的大小的

流量控制:
TCP提供一种机制可以让发送方根据接收方的实际接受能力控制发送的数据量,这就是所谓的流量控制

先发一部分比如80,再发一部分比如120,然后发送方的可用窗口为0了,然后等待80的确认报文,

操作系统缓冲区和滑动窗口的关系:
发送窗口和接受窗口中所存放的字节数,都是放在操作系统内存缓冲区中的,而操作系统的缓冲区,会被操作系统调整

为了避免丢包:TCP规定是不允许同时减少缓存又收缩窗口的,而是采用先收缩窗口,过段时间再减少缓存

当应用程序没有及时读取缓存时,发送窗口和接收窗口

根据流量控制,发送方随着接收方的窗口逐渐减小,直到最后两个窗口减小为0 窗口关闭

数据丢包的发生是因为:当服务器资源紧张的时候,操作系统直接减少了接收缓冲区的大小,这是应用程序无法及时读取缓存数据

TCP是通过让接收方指明 希望从发送方接受的数据大小(窗口的大小)来进行流量控制

如果窗口大小为0时,就会阻止发送方给接收方传递数据,知道窗口变成非0这就是窗口关闭

但是这里存在一个问题:如果接收方向发送方发送的窗口非0的ACK报文,丢失,那么会造成死锁

TCP如何解决窗口关闭时,潜在的死锁现象

TCP,为每一个连接设有一个持续定时器:只要TCP链接一方收到对方的零窗口通知,就启动计时器

这样即使是非0ACK丢失,计时器超时之后依然会发送窗口探测报文,相当于是双保险

糊涂窗口综合症:

如果接收方腾出几个字节并告诉发送方现在有几个字节的窗口,而发送方会义无反顾的发送这几个字节

相当于开公交车送1个人,造成资源的浪费

解决办法:接收方满足不通知小窗口给发送方,发送方开启Nagle算法(延时处理)

拥塞控制

避免「发送方」的数据填满整个网络。

拥塞窗口:发送方维持的一个状态,根据网络拥塞个程度动态变化的

变化规则:

  • 只要网络中没有出现拥塞,cwnd就会增大
  • 但是如果出现拥塞,cwnd就会减少

如何判断是否出现拥塞 :
只要发送了超时重传就认为出现了拥塞

拥塞控制的四个算法

  • 慢启动
  • 拥塞避免
  • 拥塞发生
  • 快速恢复

慢启动:一点一点提高发送的数据包

当发送方每收到一个ACK,拥塞窗口大小+1

20 21 22 23 24

1 2 4 8 16

当拥塞窗口的大小大于慢启动门限的时候使用拥塞避免算法

拥塞避免算法:

每当收到一个 ACK 时,cwnd 增加 1/cwnd

8 9 10 11 12

拥塞避免算法将指数增长变成线性增长

然后慢慢增长之后会出现拥塞,出现丢包,超时重传了

就进入了拥塞发生算法

当发生了「超时重传」,则就会使用拥塞发生算法。

直接开始慢启动,一夜回到解放前,并且更新慢启动门限

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

发生快速重传的拥塞发生算法:

拥塞窗口大小变为原来一半

进入快速恢复算法

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还会维持在比较高的值,后续呈线性增长

相关文章:

TCP重传,滑动窗口,流量控制,拥塞控制

TCP重传,滑动窗口,流量控制,拥塞控制 TCP重传机制: 超时重传快速重传SACKD-SACK 通过序列号与确认应答判断是否要重传 超时重传: 超过指定时间没有收到确认应答报文,就会重发该数据 触发超时重传的情况…...

云手机对出海企业有什么帮助?

近些年,越来越多的企业开始向海外拓展,意图发掘更广阔的市场。在这过程中,云手机作为一个新型工具为很多企业提供了助力,尤其在解决海外市场拓展过程中的诸多挑战方面发挥着作用。 首先,云手机的出现解决了企业在海外拓…...

Android Studio实现简单的自定义钟表

项目目录 一、项目概述二、开发环境三、详细设计3.1、尺寸设置3.2、绘制表盘和指针3.3、动态效果 四、运行演示五、总结展望六、源码获取 一、项目概述 在安卓开发中,当系统自带的View已经无法满足项目需求时,就要自定义View。在Android中是没有与钟表有…...

C语言 举例说明循环嵌套

今天 我们来说循环的嵌套 如果一个循环体内 又包含了另一个循环结构 我们称之为循环的嵌套 我们之前学的 While do-while for 都可以进行相互的嵌套 如下图 在 While 循环语句中再嵌套一个 While 循环语句 do-while 中嵌套 do-while for中嵌套 for 例如 我们做一个九九乘法…...

一、ESP32基础知识

1、乐鑫产品线 系列特点ESP8266无ESP32无ESP32-S2无ESP32-C3无ESP32-S3无ESP32-C2/ESP8684无ESP32-C6无ESP32-H2无 2、开发方式 2.1、ESP-IDF (1)面向专业开发者。乐鑫官方开发框架,专门为ESP32系列芯片设计。支持C/C语言,并提供一套完整的API&#…...

我希望未来10年,人工智能可以帮我解决这4件小事

生活在一线大城市的我,现在几乎整天被大数据、人工智能、机器学习、智慧生活的词汇环绕立体包围着,让我时刻感觉到,再过10年,我们五一假期真的可以摆脱现在擦肩接踵的旅游盛况了。但我其实要求倒是没这么高,我真心希望…...

使用jdbc方式操作ClickHouse

1、创建测试表,和插入测试数据 create table t_order01(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime ) engine MergeTreepartition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id);insert into t_order01 values …...

百面算法工程师 | 支持向量机——SVM

文章目录 15.1 SVM15.2 SVM原理15.3 SVM解决问题的类型15.4 核函数的作用以及特点15.5 核函数的表达式15.6 SVM为什么引入对偶问题15.7 SVM使用SGD及步骤15.8 为什么SVM对缺失数据敏感15.9 SVM怎么防止过拟合 欢迎大家订阅我的专栏一起学习共同进步 祝大家早日拿到offer&#x…...

关于YOLO8学习(一)环境搭建,官方检测模型部署到手机

一,环境的搭建 环境 win10 python 3.11 cmake pytorch pycharm 过程 首先安装好一个pycharm,这里就不一一叙述了。 其次,选择好一个python版本,是关键所在。有些YOLO的版本,并不支持很高的python版本,博主选用的是python3.11版本。经过实际的测试,这个版本比较合适。…...

3.10设计模式——Template Method 模版方法模式(行为型)

意图 定义一个操作中的算法骨架,而将一些步骤延迟到子类中,Template Method 使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 结构 AbstractClass(抽象类)定义抽象的原语操作,具体的子类将重定…...

SQL 基础 | UNION 用法介绍

在SQL中,UNION操作符用于合并两个或多个SELECT语句的结果集,形成一个新的结果集。 使用UNION时,合并的结果集列数必须相同,并且列的数据类型也需要兼容。 默认情况下,UNION会去除重复的行,只保留唯一的行。…...

学习如何使用PyQt5实现notebook功能

百度搜索“pyqt5中notebook控件”,AI自动生成相应例子的代码。在 PyQt5 中,QTabWidget 类被用作 Notebook 控件。以下是一个简单的示例,展示如何创建一个带有两个标签的 Notebook 控件,并在每个标签中放置一些文本。 import sys f…...

Python氮氧甲烷乙烷乙烯丙烯气体和固体热力学模型计算

🎯要点 🎯固体和粒子:计算二态系统、简谐振子和爱因斯坦固体的内能和比热,比较爱因斯坦固体和德拜固体。模拟多个粒子的一维和二维随机游走,在数值上确认方差的线性趋势,模拟多个粒子的梯度下降&#xff0…...

2024-04-30 区块链-以太坊-相关文档

摘要: 2024-04-30 区块链-以太坊-文档 以太坊-相关文档: https://github.com/ethereum/go-ethereum https://geth.ethereum.org/ https://geth.ethereum.org/docs https://ethereum.org/zh/ 以太坊开发文档 | ethereum.org 以太坊开发文档_w3cschool 以太坊开发文档 基础主题 …...

你用过最好用的AI工具有哪些?

你用过最好用的AI工具有哪些? 人工智能(AI)工具正在逐渐成为我们日常生活中不可或缺的助手,它们通过提供智能化服务,极大地提升了我们的工作效率和生活质量。以下是一些广泛使用的AI工具和应用,以及它们所…...

Amine-PEG-Amine,956496-54-1在生物成像、生物传感器等领域具有广泛的应用

【试剂详情】 英文名称 Amine-PEG-Amine,NH2-PEG-NH2 中文名称 氨基-聚乙二醇-氨基,氨基PEG氨基, 双端氨基聚乙二醇 CAS号 956496-54-1 外观性状 由分子量决定,液体或者固体 分子量 0.4k,0.6k,1k&…...

为什么深度学习中减小泛化误差称为“正则化(Regularization)”

深度学习的一个重要方面是正则化(Regularization),Ian Goodfellow在《Deep Learning 》称正则化(Regularization)就是减小泛化误差。那么,为什么减小泛化误差称为正则化呢? 首先看正则化——Re…...

【Linux网络编程】2.套接字、网络字节序、IP地址转换函数

目录 网络套接字 网络字节序 网络字节序和主机字节序的转换 IP地址转换函数 inet_pton 参数af 参数src 参数dst 返回值 inet_ntop 参数af 参数src 参数dst 参数size 返回值 网络套接字 socket,一个文件描述符指向一个套接字,该套接字内部…...

代码签名证书的工作原理和申请流程

随着软件分发渠道的多样化和黑客攻击手段的不断升级,确保软件的真实性和完整性变得尤为重要。这正是代码签名证书(Code Signing Certificate)发挥关键作用的领域。本文将深入探讨代码签名证书的基础概念、工作原理、重要性以及申请和使用流程…...

Python中的yield

文章目录 1. Python中的yield1.1 一个简单的示例1.2 示例的每一步含义 2. yield 和return的区别2.1 一个简单的示例2.2 示例中每一步的含义 3. yield中的send()方法3.1 一个简单的示例3.2 示例中每一步的含义 4. yield中的throw()方法4.1 一个简单的示例4.2 示例中每一步的含义…...

【Linux】基于 Jenkins+shell 实现更新服务所需文件 -->两种方式:ssh/Ansible

👨‍🎓博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 🐋 希望大家多多支…...

5月4(信息差)

🎄 HDMI ARC国产双精度浮点dsp杜比数码7.1声道解码AC3/dts/AAC环绕声光纤、同轴、USB输入解码板KC33C 🌍 国铁集团回应高铁票价将上涨 https://finance.eastmoney.com/a/202405043066422773.html ✨ 源代码管理平台GitLab发布人工智能编程助手DuoCha…...

【Spring】1.Spring中IOC与DI全解析

本节将详细介绍Spring框架的两个核心概念:控制反转(IOC)和依赖注入(DI)。首先,我们会探讨IOC和DI的定义,实现原理,优点和缺点。然后,我们将介绍如何在Spring中使用IOC和D…...

vue2迁移到vue3,v-model的调整

项目从vue2迁移到vue3,v-model不能再使用了,需要如何调整? 下面只提示变化最小的迁移,不赘述vue2和vue3中的常规写法。 vue2迁移到vue3,往往不想去调整之前的代码,以下就使用改动较小的方案进行调整。 I…...

【C语言】解决不同场景字符串问题:巧妙运用字符串函数

🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 一、字符函数1.1 字符分类函数1.1.1 islower1.1.2 isupper 1.…...

android 如何显示网络地址对应的图片

1.android 如何显示网络地址对应的图片 在Android中显示网络地址对应的图片,通常有多种方法可以实现。以下是几种常见的方法: 1. 使用ImageView和Picasso库 Picasso是一个强大的图片加载库,它可以方便地加载网络图片并显示到ImageView中。 …...

【项目学习01_2024.05.02_Day04】

学习笔记 4 课程分类查询4.1需求分析4.2 接口定义4.3 接口开发4.3.1 树型表查询4.3.2 开发Mapper 4 课程分类查询 4.1需求分析 有课程分类的需求 course_category课程分类表的结构 这张表是一个树型结构,通过父结点id将各元素组成一个树。 利用mybatis-plus-gen…...

Android SQLite中的UNIQUE constraint failed错误

报错信息: UNIQUE constraint failed SQLite中的UNIQUE constraint failed错误,表明尝试插入或更新数据库时出现了违反唯一性约束的情况。唯一性约束确保在特定列或列集合中的值在表中是唯一的,即不能有重复的值。当你尝试插入或更新已存在于…...

嘴尚绝卤味:传承经典,缔造美食新风尚

卤味,作为中国传统美食的代表之一,历经千年的传承与发展,早已成为无数食客餐桌上的宠儿。而在这个美食盛行的时代,嘴尚绝卤味凭借其独特的口感和精湛的工艺,成为卤味市场中的佼佼者,引领着卤味文化的新潮流…...

Docker 入门与实践:从零开始构建容器化应用环境

Docker 一、docker常用命令docker ps 格式化输出Linux设置命令别名 二、数据卷相关命令挂载到默认目录(/var/lib/docker)挂载到本地目录 三、自定义镜像Dockerfile构建镜像的命令 四、网络自定义网络 五、DockerCompose相关命令 一、docker常用命令 dock…...

门户网站模板免费下载/深圳经济最新新闻

这是我在拓朴上配置的单闭路由,可是老是分配不了IP 地址,请你们帮我看下 这是在交换机上的配置 Switch>en Switch# Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(config)#vlan 2 Switch(config-vlan)#ex Swi…...

常州网站建设开发/友情链接推广平台

– Start 大公司没机会,去小公司当中层? 去大公司镀金三年,去小公司。 作为 Leader,如何化解团队冲突 看冲突是否妨碍了团队目标,否则不应干预。 客户,老板下班提需求,可以拒绝吗 老板的需…...

做网站的小图标/杭州网站优化公司哪家好

发表论文(1) 基于精调的膨胀编组-交叉 CNN 的 PolSAR 地物分类, 雷达学报, 2019, 第 2 作者(2) Multiscale saliency detection method for ship targets in synthetic aperture radar images, IET International Radar Conference (IRC 2018), 2019, 第 2 作者(3) 基于稀疏求解…...

网站建设市场趋势/怎样做网络销售平台

2017年10月25日,北京供销大数据集团(以下简称“SinoBBD”)与成都市温江区现代服务业园区管委会签订战略合作协议,双方将在温江区现代服务业产业园共同建设产业园及产业特色小镇项目,以大数据产业基础设施建设、大数据创新研发、大数据管理应用…...

wordpress v4/纯注册app拉新平台

一、默认形参 1、什么是默认形参在C中可以给函数的参数设置默认值,当函数被调用时调用者提供了实参则使用实参,如果没有提供则使用默认值 2、默认形参要靠右如果函数有多个参数,设置了默认形参,默认形参必须要从右到左连续排列 3…...

专门做澳大利亚项目的网站/百度关键字搜索排名

Linux缓冲区(无缓冲,行缓冲,全缓冲)的区别1、缓冲区的概念1.1 全缓冲区1.2、行缓冲1.3 无缓冲1.4、控制缓冲区的方式2、demo3、结果分析1、缓冲区的概念 缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的…...