【图解计算机网络】TCP 重传、滑动窗口、流量控制、拥塞控制

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

  • TCP 重传
    • 超时重传
    • 快速重传
  • 滑动窗口
  • 流量控制
  • 拥塞控制
    • 慢启动
    • 拥塞避免
    • 拥塞发生
    • 快速恢复

TCP 重传

TCP重传是当发送的报文发生丢失的时候,重新发送丢失报文的一种机制,它是保证TCP协议可靠性的一种机制。

TCP重传有超时重传和快速重传两种机制。

超时重传

超时重传是当报文发送出去的时候,设一个定时器,当定时器到期的时候也没有收到确认应答报文的时候,就重新发送丢失的报文。

比如发送的请求报文丢失:
在这里插入图片描述

或者是返回的确认应答报文丢失:
在这里插入图片描述

这个定时器的超时时间是有具体公式的,它必须保证超时时长不会太长也不会太短。太短的话可能存在并没有丢包但是却触发重传的情况;太长的话就会等待多余的时间。

快速重传

快速重传则是当连续收到3个相同ack num的报文的时候,就可以确定对端有报文没有接收到,于是未等超时重传的定时器到期,就发送对端缺失的报文。

在这里插入图片描述

上面的这个例子,当对端收到了缺失的报文之后,对端返回的ack是4001,代表4000以前的数据都已经接收到,不需要2001、3001等ack都发送一遍,这个叫做累计确认机制。

滑动窗口

TCP的报文头有一个窗口大小的字段,是接收端告诉发送端自己缓冲区还有多少空间可以接收发送端发送的报文。在窗口大小还足够的前提下,发送端不必等待上一个报文接收端返回ack报文,就可以发送下一个TCP请求报文。

在这里插入图片描述

比如现在接收端的窗口大小是3000,每个数据包大小都是1000,那么现在发送端就可以连续发送三个数据包而不需要等待接收端的ack。

在这里插入图片描述

此时,由于有TCP的累计确认机制,如果中间有某个ack丢失,也不必重发,只要更大的ack被发送方接收到,就能确认前面的数据包都被接收到,发送方无需重发数据包,接收方的ack也不需要重发。

在这里插入图片描述

流量控制

有了滑动窗口,接收方就可以通过窗口控制发送方的发送速度,使得发送方不会无脑的发送。

每次接收端返回ack数据包的时候,都会携带当前窗口的可用大小。

在这里插入图片描述

当窗口缩小为0的时候,发送方就会停止数据包的发送。然后接收方如果读取了TCP缓存区里的数据,窗口又会腾出空间,此时接收方又可以继续接收数据包。但是此时发送方是不知道的,所以发送方会定时发送探测报文,接收方接收到探测报文时会返回当时的窗口大小。

在这里插入图片描述

发送方发送探测报文以后,接收方返回的ack数据包显示窗口又有可用空间了,就会继续发送数据包。当然如果接收方的可用空间太小,发送发还是不会发送的,因为如果只发送几个字节的数据,TCP头部的大小都比数据大的多,那么就非常浪费带宽资源。

拥塞控制

拥塞控制是用于控制发送方发送的速度,避免发生的数据过多导致网络拥塞的。

为了控制发送方的发送速度,定义了一个控制窗口的概念。有了控制窗口,发送发的发送窗口(swnd)就是接收方窗口(rwnd)大小和控制窗口(cwnd)的最小值:swnd = min(rwnd, cwnd)。

拥塞控制主要包括四个算法:慢启动、拥塞避免、拥塞发生、快速恢复。

慢启动

一开始初始化cwnd的大小为1,表示可以传输一个MSS大小的数据。然后每收到一个ack,cwnd就会增加1。

比如一开始发送端发送了一个TCP报文,然后收到接收端返回的ack,此时发送端的cwnd增长为2;然后发送端发送两个TCP报文,当这两个TCP报文的ack都接收到之后,发送方的cwnd就增长为4…如此成倍数增长。

在这里插入图片描述

拥塞避免

当cwnd上涨到ssthresh(慢启动门限),就会进入拥塞避免算法。进入拥塞避免算法之后,每收到一个ack,cwnd就增加1/cwnd。

比如按照上图的这个例子,如果ssthresh=8,那么当cwnd上涨到8时,就进入拥塞避免算法,此时每收到一个ack,cwnd就增加1/8,当收到8个ack时,cwnd才变成9,然后后面收到9个ack,cwnd才变成10。

在这里插入图片描述

拥塞发生

一旦发生超时重传,就会促发拥塞发生算法,ssthresh变成cwnd/2,cwnd重置为1。

在这里插入图片描述

快速恢复

当重复收到3个相同的ack时,就会促发快速恢复算法。快速恢复算法不会像拥塞发生算法那样“一把回到解放前”,因为还能收到3个相同的ack,那表示现在网络状况也不太差,因此不会把cwnd重置为1。

此时会把ssthresh重置为cwnd/2,cwnd重置为新的ssthresh值,然后进入拥塞避免算法。

在这里插入图片描述

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

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

相关文章

9. SVG中的text元素

SVG (Scalable Vector Graphics) 提供了强大的文本渲染能力&#xff0c;其中<text>元素是常用 的文本操作的元素。本文将详细介绍<text>标签的基本使用方法&#xff0c;并展示如何通过<tspan>和<textPath>增强文本的表现力。 <text>标签基础 &…

【PHP【实战项目】系统性教学】——使用最精简的代码完成用户的登录与退出

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

MyBatis——MyBatis 参数处理

一、单个简单类型参数 简单类型包括&#xff1a; byte short int long float double char Byte Short Integer Long Float Double Character String java.util.Date java.sql.Date parameterType 属性&#xff1a;告诉 MyBatis 参数的类型 MyBatis 自带类型自动推断机制…

【Linux】centos7安装软件(rpm、yum、编译安装),补充:查找命令的相关文件路径,yum安装mysql

【Linux】技术上&#xff0c;Linux是内核。而术语上&#xff0c;我们通常说的Linux是完整的操作系统&#xff0c;其实称为"Linux发行版"&#xff0c;是将Linux内核和应用系统打包&#xff0c;由不同的发行家族发行了不同版本。Linux发行版众多&#xff0c;主要有RedH…

Debian常用命令:高效管理与运维的必备指南

在Linux世界中&#xff0c;Debian以其稳定性、安全性和开源精神赢得了广大用户的青睐。作为一个基于Linux的操作系统&#xff0c;Debian拥有丰富且强大的命令行工具&#xff0c;这些命令对于系统管理员和开发者来说至关重要。本文将为您介绍一系列Debian系统中的常用命令&#…

基于Javaee的影视创作论坛的设计与实现+vue论文

系统简介 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装影视创作论坛软件来发挥其高效地信息处理的作用&#xf…

询问贴:这要怎么设置捏,寻思着总不该一个一个挖空吧????

这要怎么设置捏&#xff0c;寻思着总不该一个一个挖空吧&#xff1f;&#xff1f;&#xff1f;&#xff1f;

【javaSE】认识异常(1)

❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&a…

联丰策略股票杠杆股票交易市场突破3100点!A股稳了?

查查配近期,大盘再次来到3100点附近。 重要关口得到有效突破,市场情绪明显升温,甚至有投资者高喊:反转已经在路上!但也有谨慎者认为,市场仍有回调风险,围绕3000点震荡或是接下来的主旋律。 联丰策略拥有一支由知名互联网公司和国内证券金融机构的行业专家组成的一流运营团队。…

HTML炫酷的相册

目录 写在前面 HTML简介 完整代码 代码分析 系列推荐 写在最后 写在前面 本期小编给大家带来一个炫酷的旋转相册&#xff0c;快来解锁属于你的独家记忆吧&#xff01; HTML简介 HTML&#xff08;全称为超文本标记语言&#xff09;是一种用于创建网页结构和内容的标记语…

Python 编程语言中的 None 到底是什么?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 让我们一起深入了解 Python 中的 None。 什么是 None&#xff1f; 在 Python 编程语言中&#xff0c;None 是一个特殊的常量&#xff0c;它代表了 “无” 或 “没有值”。你可以把它想象成一个空盒子…

日本率先研发成功6G设备,刺痛了谁?为何日本能率先突破?

日本率先研发成功6G设备&#xff0c;无线数据速率是5G的百倍&#xff0c;这让日本方面兴奋莫名&#xff0c;毕竟日本在科技方面从1990年代以来太缺少突破的创新了&#xff0c;那么日本为何如今在6G技术上能率先突破呢&#xff1f; 日本在1980年代末期达到顶峰&#xff0c;它的科…

电商数据都能采集监测吗

品牌在做市场分析、渠道控价时&#xff0c;一般都需要先采集电商数据&#xff0c;数据的采集&#xff0c;不是只涉及部分平台&#xff0c;分析的准确和控价的全面性&#xff0c;使得数据的要求也会被提高&#xff0c;品牌要能采集不同平台、不同店铺的SKU数据&#xff0c;同时还…

【IMX6ULL项目】IMX6ULL上Linux系统实现产测工具框架

电子产品量产测试与烧写工具。这是一套软件&#xff0c;用在我们的实际生产中&#xff0c; 有如下特点&#xff1a; 1.简单易用&#xff1a; 把这套软件烧写在 SD 卡上&#xff0c;插到 IMX6ULL 板子里并启动&#xff0c;它就会自动测试各个模块、烧写 EMMC 系统。 工人只要按…

Scratch四级:第08讲 排序算法

第08讲 排序算法 教练&#xff1a;老马的程序人生 微信&#xff1a;ProgrammingAssistant 博客&#xff1a;https://lsgogroup.blog.csdn.net/ 讲课目录 常考的排序算法项目制作&#xff1a;“三个数排序”项目制作&#xff1a;“成绩查询”项目制作&#xff1a;“排序”项目制…

使用LLaMA Factory来训练智谱ChatGLM3-6B模型

使用LLaMA Factory来训练智谱ChatGLM3-6B模型时&#xff0c;以下是一个训练过程&#xff1a; 1. 环境搭建 a. 安装Python和Anaconda 下载并安装适合你操作系统的Python版本&#xff08;推荐Python 3.10或更高版本&#xff09;。安装Anaconda&#xff0c;以管理Python环境和依…

“等保测评通过指南:打造企业安全生态环境“

等保测评&#xff0c;即网络安全等级保护测评&#xff0c;是企业构建安全生态环境的重要环节。以下是通过等保测评的指南&#xff0c;旨在帮助企业打造一个安全的网络环境&#xff1a; 理解等保测评的重要性&#xff1a; 等保测评是确保企业信息系统安全得到有效保护的重要标准…

轻松上手Spring AOP,掌握切面编程的核心技巧

文章目录 AOP 是什么AspectJSpring AOP切点表达式execution()语法结构示例注意事项 通知&#xff08;Advice&#xff09;类型如何使用准备阶段定义切面定义并使用切点测试 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍…

轨迹规划 | 图解纯追踪算法Pure Pursuit(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 纯追踪算法原理推导2 自适应纯追踪算法(APP)3 规范化纯追踪算法(RPP)4 仿真实现4.1 ROS C仿真4.2 Python仿真4.3 Matlab仿真 0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详细介绍全局规划…

Android面试题之Kotlin和Java之间互操作

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 互操作性和可空性 要注意Java中所有类型都是可空的String!表示平台数据类型 public class JavaTest {public String generateName() {return …