【面试八股总结】传输控制协议TCP(三)

参考资料 :小林Coding、阿秀、代码随想录

一、TCP拥塞控制⭐

1.  慢启动 – Slow Start

        慢启动是指TCP连接刚建立,一点一点地提速,试探一下网络的承受能力,以免直接扰乱了网络通道的秩序。

慢启动算法:

  • 初始拥塞窗口 cwnd = 1,表明可以传一个MSS大小的数据。
  • 每当发送方收到一个ACK,cwnd大小加一。
  • 每当过了一个往返延迟时间RTT(Round-Trip Time),cwnd大小直接翻倍,乘以2,呈指数让升。
  • 慢启动拥有一个ssthresh(slow start threshold)门限,当 cwnd >= ssthresh 时,就会进入拥塞避免算法

2. 拥塞避免 – Congestion Avoidance

        当拥塞窗口大小cwnd大于等于慢启动阈值ssthresh后,就进入拥塞避免算法。算法如下:

  • 收到一个ACK,则 cwnd = cwnd + 1 / cwnd
  • 每当过了一个往返延迟时间 RTT,cwnd 大小加一

        过了慢启动阈值后,拥塞避免算法可以避免窗口增长过快导致窗口拥塞,而是缓慢的增加调整到网络的最佳值

举个🌰:

“拥塞避免”是说在拥塞避免阶段把拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。

3. 拥塞发生

        TCP拥塞控制默认认为网络丢包是由于网络拥塞导致的,所以一般的TCP拥塞控制算法以丢包为网络进入拥塞状态的信号。对于丢包有两种判定方式,一种是超时重传RTO(Retransmission Timeout),另一个是快速重传(收到三个重复确认ACK)(重传机制具体介绍见第三部分)

1)超时重传RTO

        超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开启一个计时器在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数据,直到发送成功为止。

  • 由于发生丢包,将慢启动阈值ssthresh设置为当前拥塞窗口cwnd的一半,即 ssthresh = cwnd / 2
  • cwnd重置为1 (恢复为 cwnd 初始化值)
  • 进入慢启动过程

2)快速重传

        如果发送端接收到3个以上的重复ACK,TCP就意识到数据发生丢失,需要重传。这个机制不需要等到重传定时器超时,所以叫快速重传。

  • cwnd大小缩小为当前的一半
  • ssthresh设置为缩小后的cwnd大小
  • 然后进入快速恢复算法Fast Recovery

4. 快速恢复 —— Fast Recovery

        TCP Tahoe是早期的算法,所以没有快速恢复算法,而Reno算法有。在进入快速恢复之前,cwnd 和 ssthresh 已经被更改为原有 cwnd 的一半。快速恢复算法的逻辑如下:

  • 拥塞窗口 cwnd = cwnd + 3 MSS,加 3 MSS的原因是因为收到3个重复的ACK。

  • 重传丢失的数据包。

  • 如果再收到重复的ACK,那么cwnd大小增加一。

  • 如果收到新的ACK,表明重传的包成功了,那么退出快速恢复算法。将cwnd设置为ssthresh,然后进入拥塞避免算法。

二、TCP可靠传输

        TCP协议保证数据传输可靠性的方法主要有:校验和、序列号、确认应答、超时重传、连接管理、流量控制、拥塞控制。

1. 数据校验:TCP报文头有校验和,采用CRC校验全部数据;

2. 序列号和确认应答:TCP通过给每个发送的数据段分配一个序号,以及使用确认机制ACK来跟踪数据的传输与接收。接收方会确认已经成功接收的数据,发送方则根据收到的确认确定哪些数据已经被成功传输,哪些需要重新发送。

3. 超时和重传:TCP使用超时机制来检测是否发生数据包丢失,如果发送方在一定时间内未收到确认,就认为数据包丢失,并触发响应的重传。这确保及时某个数据包在传输过程中丢失,最终仍能够被成功传递。

4. 连接管理:通信前确认通信实体的存在。(具体见【面试八股总结】传输控制协议TCP(一)-CSDN博客)

5. 流量控制:TCP使用滑动窗口机制进行流量控制,确保发送方不会以高于接收方处理速度的速率发送数据,这有助于防止接收方缓冲溢出,提高整个通信链路效率,防止数据包丢失。(具体见【面试八股总结】传输控制协议TCP(二)-CSDN博客)

6. 拥塞控制:TCP还具有拥塞控制机制,通过动态调整发送速率以适应网络状况。当网络出现拥塞时,通过拥塞窗口,减缓发送速率,防止进一步加剧拥塞。(具体见第一部分)

三、TCP重传机制

1. 超时重传

       TCP在发送数据时,会设定一个定时器,当超过指定的时间后,没有收到对方的 ACK 确认应答报文,就会重发该数据,也就是超时重传。TCP 会在以下两种情况发生超时重传:

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

超时重传时间RTO(Retransmission Timeout)

  • 当超时时间 RTO 较大时,网络的空闲时间增大,降低了传输效率。
  • 当超时时间 RTO 较小时,会引起很多报文段的不必要的重传,使网络负荷增大。

        TCP 采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时延RTT(Round-Trip Time)。

TCP保留RTT的一个加权平均往返时间RTTS(又称为平滑的往返时间)。

第一次测量到 RTT 样本时,RTTS 值就取为所测量到的 RTT 样本值。以后每测量到一个新的 RTT 样本,就按下式重新计算一次 RTTS:

新的RTTs = (1 - α) × (旧的 RTTs) + α ×(新的 RTT 样本)

式中,0 < α < 1。若 α 很接近于零,表示 RTT 值更新较慢。若选择α接近于 1,则表示 RTT 值更新较快。

2. 快速重传

        快速重传(Fast Retransmit)机制不以时间为驱动,而是以数据驱动重传。  快速重传的工作方式是当收到三个相同的 ACK 报文时,会在定时器过期之前,重传丢失的报文段。 

3. SACK 选择确认

        如果要使用选择确认,建立 TCP 连接时,就要在 TCP 首部的选项中加上“允许 SACK”的选项,而双方必须都事先商定好。在 TCP 报文段的首部中增加 SACK 选项,以便报告收到的不连续的字节块的边界。由于首部选项的长度最多只有 40 字节,而指明一个边界就要用掉 4 字节,因此在选项中最多只能指明 4 个字节块的边界信息。

4. Duplicate SACK

        Duplicate SACK 又称 D-SACK,其主要使用了 SACK 来告诉发送方有哪些数据被重复接收。

使用D-SACK的优点

  1. 可以让「发送方」知道,是发出去的包丢了,还是接收方回应的 ACK 包丢了;
  2. 可以知道是不是「发送方」的数据包被网络延迟了;
  3. 可以知道网络中是不是把「发送方」的数据包给复制了。

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

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

相关文章

OpenCV项目实战-深度学习去阴影-图像去阴影

往期热门博客项目回顾: 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 //正文开始! 图…

NoSQL(非关系型数据库)之Redis的简介与安装

一、简介 1.1 关系型数据库与非关系型数据库 1.1.1 概念 1.1.2 区别 1.2 非关系型数据库产生背景 1.3 redis 简介 1.4 redis 优点 1.5 redis 快的原因 二、安装 2.1 关闭核心防护 2.2 安装相关依赖 2.3 解压软件包并进行编译安装 2.4 设置 Redis 服务所需相关配置文…

聚道云软件连接器:助力企业财务效率提升的成功案例

客户介绍 某公司是一家实力雄厚的综合性企业,自成立以来,公司始终秉持着创新、务实、高效的经营理念,深耕多个领域,不断拓展业务版图,逐渐发展成为业界翘楚。公司经营范围广泛,涵盖了科技研发、生产制造、…

【保姆级讲解下Docker容器】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

数据分析:品牌如何借势小红书热点?

导语 近期,一碗麻辣烫,让甘肃天水成为了不少人旅行计划单上的榜首,各地食客心甘情愿地排队5、6个小时,赶赴一场“麻辣烫之约”。千瓜数据,近30天浏览量破500W,且增势迅猛。 图 | 千瓜数据 去有人的地方 &…

YOLOv8全网独家改进: 小目标 | 注意力 |卷积和注意力融合模块(CAFMAttention) | 2024年4月最新成果

💡💡💡本文独家改进:卷积和注意力融合模块(CAFMAttention),增强对全局和局部特征的提取能力,2024年最新的改进思路 💡💡💡创新点:卷积和注意力巧妙设计 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特征的提取能力;2)放在detect前面,增…

从《布瓦尔与佩库歇》实践中学习社会科学概论

从《布瓦尔与佩库歇》实践中学习社会科学概论 前情提要《布瓦尔与佩库歇》实践笔记云藏山鹰社会科学概论报告核心--信息形数身知™意合™意气实体过程意气实体过程宇宙学诠释™ 社会科学概论花间流风版导读,马斯克风格演讲[ 一尚韬竹团队供稿;] 内容展开…

带合并行、分组表头和分组表格导出excel

目录 一、实现思路 二、实现 1.引入js 2.数据处理。 ​3.合并行,根据vxe-table的span-method方法做合并行和列 4.点击导出按钮,调用导出方法 vue项目里面的一个需求,需要导出一个excel表格,数据源是后端返回的json&#xff…

寻找适合您的舒适防静电鞋:从安全到舒适的选择指南

在工作环境中,我们时常面临着各种各样的安全隐患,其中静电可能是其中之一。静电不仅会给我们带来不便,还可能引发严重的安全问题,甚至导致火灾或爆炸。因此,选择适合的防静电鞋成为了我们十分关注的话题。 舒适性与安…

获取用户位置数据,IP定位离线库助您洞悉消费者需求

获取用户位置数据是现代互联网应用中非常重要的一环。通过获取用户的位置数据,可以了解用户所在的地理位置,从而更好地为用户提供个性化的服务和推荐。而IP归属地离线库就是一种非常有用的工具,可以帮助企业准确地获取用户的位置信息。 IP归…

WebKit揭秘:从内部结构到应用程序开发

文章目录 WebKit结构简介核心模块其他组件多进程架构(WebKit2) Wekbit做了什么?应用程序如何利用 Webkit WebKit结构简介 WebKit是一个开源的浏览器引擎,它由多个模块组成,这些模块协同工作以提供Web内容的渲染和交互…

电商技术揭秘四:电商平台的物流管理系统

文章目录 引言一、物流管理系统的功能与架构1.1 物流管理系统在电商平台中的作用概述保障订单的及时配送优化库存管理控制运营成本提升客户服务水平支持数据驱动的决策应对市场变化 1.2 订单处理功能分析自动化处理流程订单分配与履行错误检测与处理机制实时订单状态更新订单数…

Hi3861 OpenHarmony嵌入式应用入门--鸿蒙开发环境搭建

目录 简介 准备材料 安装开发环境 配置开发工具和sdk 新建工程 代码编译 简介 本篇将进行hi3861开发环境的搭建,并能够编译默认工程。 准备材料 华为集成开发环境工具DevEco Device Tool 华为集成开发环境IDE DevEco Device Tool下载 | HarmonyOS设备开发 …

C语言 练习题

目录 1.统计二进制中1的个数 方法1 方法2 方法3 2.求两个数二进制中不同位的个数 方法1 方法2 3.打印整数二进制的奇数位和偶数位 4.用“ * ”组成的X形图案 5.根据年份和月份判断天数 6.结语 1.统计二进制中1的个数 【题目内容】 写一个函数返回参数二进制中 1 的个…

C++语言学习(三)——内联函数、auto、for循环、nullptr

1. 内联函数 (1)概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。 内联函数是一种编译器指令,用于告诉编译器…

开源AGV调度系统OpenTCS中的任务分派器(dispatcher)详解

OpenTCS中的任务分派器dispatcher详解 1. 引言2. 任务分派器(dispatcher)2.1 默认的停车位置选择2.2 可选停车位置属性2.3 默认的充电位置选择2.4 即时运输订单分配 3. 默认任务分派器的配置项4. 参考资料与源码 1. 引言 openTCS是一项著名的开源运输控制系统,我在…

OpenHarmony实战:轻量级系统之子系统移植概述

OpenHarmony系统功能按照“系统 > 子系统 > 部件”逐级展开,支持根据实际需求裁剪某些非必要的部件,本文以部分子系统、部件为例进行介绍。若想使用OpenHarmony系统的能力,需要对相应子系统进行适配。 OpenHarmony芯片适配常见子系统列…

PID算法调参经验分享

本篇文章旨在分享我对PID算法调节参数的经验,觉得掌握PID调参是一种十分重要的技能,在此记录一下。希望我的分享对你有所帮助。有关PID的一些文章,可以参考以下文章。 PID算法参数调节经验分享-CSDN博客 PID算法详解(代码详解篇&a…

一起来从Solidworks中导出URDF模型

这个博客是用来记录关于【从Solidworks中导出URDF模型】的学习历程: 相关课程链接见:如何从Solidworks导出URDF模型 • 古月 (guyuehome.com) 下面让我们一起开始吧!!! 1. sw_urdf_exporter插件介绍 插件下载链接&…

Free RTOS day3

1.思维导图 2.重新实现一遍任务调度算法的代码。 &#xff08;1&#xff09;抢占式调度 #include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" #include <stdio.h>osThreadId_t defaultTaskHand…