【面试八股总结】传输控制协议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. 可以知道网络中是不是把「发送方」的数据包给复制了。

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

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

相关文章

电商技术揭秘五:电商平台的个性化营销与数据分析

文章目录 引言1. 个性化营销的概念与价值1.1 个性化营销的定义1.1.1 个性化营销的基本概念1.1.2 个性化营销在电商领域的重要性 1.2 个性化营销的核心价值1.2.1 提升用户体验1.2.2 增加转化率和客户忠诚度1.2.3 优化营销资源配置 2. 用户画像与行为分析2.1 用户画像的构建2.1.1…

SpringBoot+thymeleaf完成视频记忆播放功能

一、背景 1)客户要做一个视频播放功能,要求是系统能够记录观看人员在看视频时能够记录看到了哪个位置,在下次观看视频的时候能够从该位置进行播放。 2)同时,也要能够记录是谁看了视频,看了百分之多少。 说明:由于时间关系和篇幅原因,我们这里只先讨论第一个要求,第…

智能小车测速(3.26)

模块介绍: 接线: VCC -- 3.3V 不能接5V,否则遮挡一次会触发3次中断 OUT -- PB14 测速原理: cubeMX设置: PB14设置为gpio中断 打开定时器2,时钟来源设置为内部时钟,设置溢出时间1s&#xff0c…

视频监控/云存储/AI智能分析平台EasyCVR集成时调用接口报跨域错误的原因

EasyCVR视频融合平台基于云边端架构,可支持海量视频汇聚管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强,支持多协议、多类型设备接入,包括:国标G…

【已解决】Error: error:0308010C:digital envelope routines::unsupported

前言 场景🎬 使用 Ant Design , 执行 npm run dev 出现异常。 文章目录 前言场景🎬 异常信息解决方案方案一(推荐)MAC | Linux 电脑成功⬇️ Windows 电脑 方案2: 不懂留言 JavaPub 异常信息 我直接异常信息,你可以…

Tomcat部署flowable出现consider increasing the maximum size of the cache

使用Apache Tomcat/8.5.32部署运行flowable-6.5.0时发现控制台有警告 问题原因:解决方法: 使用Apache Tomcat/8.5.32部署运行flowable-6.5.0时发现控制台有警告 01-Apr-2024 20:55:08.877 警告 [localhost-startStop-1] org.apache.catalina.webresources.Cache.ge…

拥塞控制算法系列之:Swift-谷歌2020年SIGCOM-包级别端到端TIMELY拥塞控制算法

核心要点: 谷歌 2020 SIGCOM基于delay的AIMD拥塞拆分EC和FC,时延敏感场景优势分别计算EC和FC的wnd(最核心)保障吞吐和低延迟。Swift 因利用延迟的简单性和有效性而闻名包级别的论文:https://dl.acm.org/doi/pdf/10.11…

C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 C刊级 | Matlab实现GWO-BiTCN-BiGRU-Attention灰狼算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测效果一览基本介绍程序设计参考…

stream使用

stream流式计算 在Java1.8之前还没有stream流式算法的时候&#xff0c;我们要是在一个放有多个User对象的list集合中&#xff0c;将每个User对象的主键ID取出&#xff0c;组合成一个新的集合&#xff0c;首先想到的肯定是遍历&#xff0c;如下&#xff1a; List<Long> u…

xss【2】

1.xss钓鱼 钓鱼攻击利用页面&#xff0c;fish.php黑客钓鱼获取到账号密码存储的位置 xss进行键盘记录 2.xss常规防范 3.xss验证payload XSS&#xff08;跨站攻击&#xff09;_details/open/ontoggle-CSDN博客

C++ 哈希思想应用:位图,布隆过滤器,哈希切分

C 哈希思想应用:位图,布隆过滤器,哈希切分 一.位图1.位图的概念1.问题2.分析3.位图的概念4.演示 2.位图的操作3.位图的实现1.char类型的数组2.int类型的数组3.解决一开始的问题位图开多大呢?小小补充验证 4.位图的应用1.给定100亿个整数&#xff0c;设计算法找到只出现一次的整…

C#开发中一些常用的工具类分享

一、配置文件读写类 用于在开发时候C#操作配置文件读写信息 1、工具类 ReadIni 代码 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks;namesp…

VScode debug python(服务器)

方法一&#xff1a; 创建launch.json文件&#xff1a; launch.json文件地址&#xff1a; launch.json文件内容&#xff1a; {"version": "0.2.0", //指定了配置文件的版本"configurations": [{"name": "Python: Current File&…

达梦数据库 优化

谁进行优化&#xff1f;优化什么&#xff1f; 优化不能仅从数据库方面考虑&#xff0c;比如&#xff0c;在存储达到数据库极限、应用涉及人员设计的代码稀巴烂的情况下&#xff0c;进行调优就是杯水车薪的效果。 涉及到优化人员&#xff1a; 数据库管理员应用程序架构师应用…

MySQL高可用MHA

一、MHA概述 1.1 什么是 MHA MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作。 MHA能在…

笔记本电脑win7 Wireless-AC 7265连不上wifi6

1.背景介绍 旧路由器连接人数有限&#xff0c;老旧&#xff0c;信号不稳定更换了新路由器&#xff0c;如 TL-XDR5430易展版用户电脑连不上新的WIFI网络了&#xff0c;比较着急 核心问题&#xff1a;有效解决笔记本连接wifi上网问题&#xff0c;方法不限 2.环境信息 Windows…

Nginx 高级

文章目录 Nginx反向代理概念配置 负载均衡概念配置 动静分离概念配置 网关防盗链keepalivednginx跨域 Nginx 反向代理 概念 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络上的服务器&…

LabVIEW挖坑指南

一、挖坑指南 1.1、输出变量放在条件框内 错误写法&#xff1a; 现象&#xff1a;如果没进入对应的分支&#xff0c;输出为默认值 正常写法&#xff1a; 让每个分支输出的值都在预料之内。 1.2、统计耗时不准 错误写法 现象&#xff1a;统计出来的耗时是2000ms 正常写法&a…

ES8 学习 -- async 和 await / 对象方法扩展 / 字符串填充

文章目录 1. async 和 await1.1 基本语法1.2 使用示例1.3 案例练习 2. 对象方法扩展2.1 Object.values(obj)2.2 Object.entries(obj)2.3 Object.getOwnPropertyDescriptors(obj)使用示例 3. 字符串填充4. 函数参数的末尾加逗号 1. async 和 await async 函数&#xff0c;使得异…

基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“汽车销售分析与管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 销售经理系统首页图 客户管理图 车辆…