Java 面试题:TCP重传机制与拥塞控制 --xunznux

文章目录

  • TCP重传机制
    • 1. 超时重传(Timeout Retransmission)
    • 2. 快速重传(Fast Retransmission)
    • 3. 选择性确认(Selective Acknowledgment, SACK)
    • 4. D-SACK(Duplicate sAcK)
    • 5. 总结
  • TCP的拥塞控制机制
      • 1. **慢启动(Slow Start)**
      • 2. **拥塞避免(Congestion Avoidance)**
      • 拥塞发生
        • 超时重传:
        • **快速重传(Fast Retransmit)**
      • 4. **快速恢复(Fast Recovery)**
      • 5. **Tahoe 和 Reno 算法**
      • 6. **NewReno 算法**
      • 7. **拥塞窗口回退**
      • 8. **BBR (Bottleneck Bandwidth and RTT)**
      • 总结

TCP重传机制

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的协议,它通过一系列机制来保证数据的可靠传输,其中之一就是重传机制。TCP 的重传机制能够确保在网络传输过程中,丢失的或损坏的数据包能够被重新发送,从而保证数据的完整性和可靠性。
TCP 实现可靠传输的方式之一,是通过序列号与确认应答。在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息但是如果传输的过程中,数据包丢失了,就会使用重传机制来解决。
TCP 重传机制主要包括以下几部分:

1. 超时重传(Timeout Retransmission)

  • 基本原理:每当 TCP 发送一个数据包时,都会启动一个定时器,如果在指定的时间内没有收到对应的 ACK(确认报文),则认为该数据包在传输过程中丢失,TCP 会重新发送该数据包。这种机制称为超时重传。
  • 超时重传的两种情况:发送方的数据包丢失;接收方的确认应答丢失。
  • 重传时间间隔(RTO, Retransmission Timeout):
    • 重传时间间隔(RTO)是根据往返时间(RTT, Round Trip Time)动态计算的,RTT 是指数据包从发送到接收到 ACK 的时间。TCP 使用一个名为 加权移动平均算法(EWMA, Exponential Weighted Moving Average)来计算 RTT,并以此来确定 RTO。
    • TCP 会根据网络状况调整 RTO 的值。如果 ACK 在预期的时间内没有收到,RTO 会呈指数级增长(指数退避算法),这样可以避免在网络拥塞时频繁重传导致的恶性循环。
    • RTO较长的影响:网络的空隙时间增大,降低了网络传输效率。
    • RTO较短的影响:发送方还未等到确认应答就进行了不必要的重传,导致网络负荷增大。
  • 重传次数限制:TCP 并不会无限次地重传数据包,而是会有一个最大重传次数的限制。如果超过这个次数,TCP 会放弃连接并通知应用程序发生了严重的网络错误。
  • 如果超时重发的数据,再次超时又要重传的时候,TCP的策略是将超时间隔加倍,也就是每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。避免由于网络拥塞造成的重传导致进一步加剧了拥塞情况。(拥塞控制)

2. 快速重传(Fast Retransmission)

  • 基本原理:当 TCP 接收方接收到一个失序的数据包(即后续的数据包),但未接收到预期的数据包时,它会立即发送一个重复的 ACK 报文来通知发送方已经接收到的数据包编号,并提示发送方丢失了某个特定的数据包。
  • 三次重复 ACK:当发送方连续收到三个相同的 ACK(称为 Triple Duplicate ACK),意味着很可能一个数据包丢失了。此时,发送方会立即重传这个丢失的数据包,而不必等待 RTO 超时。这种机制称为快速重传。
  • 优点:快速重传机制大大减少了数据包丢失后的等待时间,提高了网络的传输效率。快速重传解决了超时时间的问题,但还面临另外一个问题:重传的时候,是重传之前的一个,还是重传所有的问题。

3. 选择性确认(Selective Acknowledgment, SACK)

  • 基本原理:SACK 是 TCP 的一种扩展选项,用于提高重传效率。常规的 ACK 只能确认已经接收到的连续数据块,但如果某个数据块丢失,而后续的数据块已经接收到了,接收方无法通过常规的 ACK 来通知发送方哪些具体数据块需要重传。

  • SACK 机制:

    • SACK 选项允许接收方通知发送方,除了一部分丢失的数据包,其他的哪些数据包已经接收到了。这就使得发送方只需重传那些丢失的数据包,而无需重传已经成功接收的部分。
    • SACK 选项有效地减少了重传的数量,特别是在高丢包率的网络中,可以显著提高传输效率。
  • SACK 的作用:在没有 SACK 的情况下,TCP 可能不得不重传已经成功接收的数据包,这种不必要的重传会导致带宽的浪费和传输延迟。SACK 通过允许接收方精确指示丢失的字节范围,避免了不必要的重传。

4. D-SACK(Duplicate sAcK)

主要使用了SACK来告诉【发送方】有哪些数据被重复接收了。下面举例来说明D-SAcK 的作用:
使用D-SACK的好处:
(1) 可以让【发送方】知道,是发出去的包丢了,还是接收方回应的ACK包丢了;
(2) 可以知道是不是【发送方】的数据包被网络延时了;
(3) 可以知道网络中是不是把【发送方】的数据包给复制了。

接收方:  <---- ACK A  <---- ACK B  <---- ACK C
发送方:  (因误判重传) B ----> C
接收方:  <---- D-SACK: B (重复的B)  <---- D-SACK: C (重复的C)

D-SACK 与 SACK 的区别

  • SACK:SACK 主要用于通知发送方哪些字节范围的数据包已经成功接收,允许发送方仅重传丢失的部分数据,避免不必要的重传。
  • D-SACK:D-SACK 是 SACK 的一种扩展,它不仅通知发送方成功接收到的数据,还通知发送方重复接收到的数据,从而帮助发送方检测和优化重传机制。

5. 总结

TCP 重传机制是保证数据传输可靠性的核心。通过超时重传、快速重传、快速恢复以及 SACK 机制,TCP 能够有效地处理网络中的数据包丢失、乱序等问题。不同的 TCP 实现和版本可能会在这些基础机制上进行优化,以适应不同的网络条件和应用场景。在现代网络环境中,这些重传机制共同作用,确保了 TCP 的可靠性和高效性。

TCP的拥塞控制机制

TCP 的拥塞控制机制是为了防止网络过载而设计的一组算法,旨在确保网络稳定性和高效性。TCP 通过动态调整发送速率,确保网络资源合理分配,避免拥塞引发的丢包和延迟问题。TCP 拥塞控制主要由以下几个阶段和算法组成:

1. 慢启动(Slow Start)

  • 概述:慢启动是 TCP 连接建立后的初始阶段,目的是逐渐探测网络的可用带宽,防止突然增加的数据量造成网络拥塞。

  • 工作原理

    • TCP 连接建立后,拥塞窗口(Congestion Window, CWND)被初始化为一个较小的值(通常为1个MSS,最大报文段大小)。Maximum Segment Size 最大报文段长度 1500-20-20=1460字节。
    • 每次收到对方的确认 ACK 报文后,CWND 的大小会指数级增长,即每经过一个 RTT(Round-Trip Time),CWND 会翻倍,直到达到一个预设的阈值(Slow Start Threshold, SSTHRESH)或发生丢包。⼀般来说 ssthresh 的大小是65535字节。
  • 优点:能够在连接建立初期快速增加数据传输速率,迅速利用可用的网络带宽。

  • 缺点:如果网络带宽有限,指数增长的 CWND 可能会迅速引发拥塞。

2. 拥塞避免(Congestion Avoidance)

  • 概述:当 CWND 达到慢启动阈值 SSTHRESH 时,TCP 进入拥塞避免阶段,逐步提高传输速率,避免网络过载。也就是说,将ssthresh换算为MSS单位,在慢启动阶段,每次全部收到cwnd的ACK后,cwnd值就翻倍了。而在拥塞避免阶段,是线性增加,每次收到一轮的ACK,也就是上一次cwnd发出的全部包的ACK后,cwnd才增加1个MSS。

  • 工作原理

    • 在拥塞避免阶段,CWND 以线性增长的方式缓慢增加。每经过一个 RTT,CWND 增加一个 MSS 的大小,而不是像慢启动阶段那样翻倍增长。
    • 这种方式使得网络能够逐渐适应流量的增加,避免因流量增长过快而引发拥塞。
  • 优点:通过线性增长 CWND,平衡了网络负载,减少了拥塞发生的可能性。

  • 缺点:当网络带宽充足时,线性增长的 CWND 增加较慢,可能无法充分利用网络资源。

那么,当进入拥塞避免,每次+1时,什么时候才会不再继续加?
随着每次发送的数量越发越多, 最终会超出带宽限制,于是就会有某条报文发生超时。有可能是发的中途丢了, 亦或者是返回的数据全阻塞住了,一条都回不来。这时就发生了超时重传。进入拥塞发生
阶段。

拥塞发生

超时重传:

这个时候,ssthresh 和 cwnd 的值会发生变化:

  • ssthresh 设为 cwnd/2
  • cwnd 重置为 1
    接着,就重新开始慢启动,慢启动是会突然减少数据流的。这真是一旦「超时重传」,马上回到解放前。但是这种方式太激进了,反应也很强烈,会造成网络卡顿。
快速重传(Fast Retransmit)
  • 概述:快速重传是指在收到三个重复的 ACK 报文后,TCP 立即重传被认为丢失的报文段,而不必等待超时。

  • 工作原理

    • 当发送方连续收到三个相同的 ACK 报文时,认为接收方可能丢失了下一个报文段,因此立即重传该报文段,而不是等待超时后再重传。

TCP 认为这种情况不严重,因为大部分没丢,只丢了一小部分,则 ssthresh 和 cwnd 变化如下:

  1. cwnd=cwnd/2,也就是设置为原来的一半
  2. ssthresh=cwnd
  3. 进入快速恢复算法
  • 优点:快速重传缩短了丢包后的恢复时间,减少了网络延迟。

  • 缺点:快速重传机制依赖于重复 ACK 的数量,在高丢包率的网络环境下,可能误判或无法有效工作。

4. 快速恢复(Fast Recovery)

  • 概述:快速恢复是在快速重传后,避免进入慢启动阶段,通过调整 CWND 恢复数据传输速率。

  • 工作原理

    • 快速重传后,TCP 将 SSTHRESH 设置为当前 CWND 的一半,并将 CWND 设置为 SSTHRESH 的值。然后通过线性增长的方式恢复传输速率,避免重新进入慢启动阶段。
  • 优点:快速恢复能够在发生丢包后迅速恢复传输速度,提高网络利用率。

  • 缺点:在严重拥塞情况下,快速恢复可能无法有效工作,需要结合其他机制来调整。

5. Tahoe 和 Reno 算法

  • Tahoe:是早期的 TCP 拥塞控制算法,采用了慢启动、拥塞避免和超时重传的机制。每次发生丢包时,CWND 被重置为 1,进入慢启动阶段。

  • Reno:在 Tahoe 的基础上,Reno 增加了快速重传和快速恢复机制,提高了在轻微拥塞情况下的恢复能力。

6. NewReno 算法

  • 概述:NewReno 是 Reno 的改进版本,优化了部分丢包时的恢复过程。

  • 工作原理

    • 在快速重传阶段,如果有多个报文段丢失,NewReno 不会立即进入恢复阶段,而是保持在快速重传阶段,直到所有丢失的报文段都被重传完毕。这样可以避免多次进入恢复阶段,提高了传输效率。

7. 拥塞窗口回退

  • 概述:当网络出现拥塞(如丢包或延迟增大),TCP 会回退 CWND 的值,从而减少传输速率。

  • 工作原理

    • 当检测到丢包后,TCP 会将 CWND 降低到 SSTHRESH 的值,然后重新进入拥塞避免阶段,逐步提高传输速率。
  • 优点:通过降低传输速率,缓解了网络拥塞,减少了丢包率。

8. BBR (Bottleneck Bandwidth and RTT)

  • 概述:BBR 是一种新的拥塞控制算法,不依赖于丢包率,而是基于带宽和 RTT 的估算来确定最优的发送速率。

  • 工作原理

    • BBR 通过测量网络的瓶颈带宽和最小 RTT 来动态调整发送速率,确保数据流量不会超过网络的承载能力,从而减少拥塞。
  • 优点:BBR 在高带宽、低延迟网络中表现出色,能够更有效地利用可用带宽。

总结

TCP 的拥塞控制机制通过多种算法的结合,确保在不同网络条件下都能有效地调节传输速率,减少拥塞发生的概率,保障数据传输的可靠性和效率。各个阶段和算法相互配合,使得 TCP 能够在拥塞情况下迅速恢复并高效利用网络资源。

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

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

相关文章

iPhone备忘录不小心删除了怎么办?

在日常使用iPhone的过程中&#xff0c;备忘录作为我们记录重要信息、灵感闪现和日常琐事的小帮手&#xff0c;其重要性不言而喻。然而&#xff0c;有时候因为操作失误或是不小心点击&#xff0c;我们可能会将珍贵的备忘录内容删除&#xff0c;这无疑会让人感到焦虑与不安。但请…

APP长文本内容编辑器功能实现方案

背景 CSDN APP 中原有编辑器页面为纯H5适配&#xff0c;整体用户交互体验差&#xff0c;如何优化APP端编辑器用户体验是我们团队需要思考的问题。下面我们以iOS为例展开讨论。 一、方案调研 我们分析了几款国内内容发布的APP&#xff0c;如知乎、今日头条、简书&#xff0c;…

华为海思招聘-芯片与器件设计工程师-数字芯片方向- 机试题——(共九套)(每套四十题)

华为海思招聘-芯片与器件设计工程师-数字芯片方向- 机试题-题目分享——共九套&#xff08;每套四十题&#xff09; 岗位——芯片与器件设计工程师 岗位意向——数字芯片 真题题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&am…

不再畏惧猫咪浮毛,希喂、安德迈、美的宠物空气净化器性能PK

夏天来了&#xff0c;宠物换毛季加上天气闷热&#xff0c;难消的异味和漫天乱飞的猫毛双重夹击&#xff0c;家里的空气质量直线下降。还是鼻炎患者的我感到非常不适&#xff0c;有股想把家里两只毛孩子逐出家门的冲动。每天不是梳毛就是在吸毛的路上&#xff0c;猫咪们还爱到处…

Redis的内存淘汰策略-noeviction

noeviction 策略简介 noeviction 是 Redis 的默认内存淘汰策略。当 Redis 的内存使用达到配置的最大限制&#xff08;maxmemory&#xff09;时&#xff0c;该策略不会删除任何现有键&#xff0c;而是直接返回错误。这意味着 Redis 将拒绝写操作&#xff08;如 SET、LPUSH 等&a…

若依 Vue3的前后端分离系统管理 创建

RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框架|Java|SpringBoot|SrpingBoot2.0…

uniapp 封装uni.login 实现全局调用

封装utils app.vue中 使用globalData 注册 utils 页面中使用方法 定义app 调用方法

win10/11环境变量path误删了如何恢复?

首先&#xff0c;我们可以尝试使用 set 命令来临时设置 PATH&#xff1a; set PATH%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\ 这会在当前的 CMD 会话中设置 PATH。 如果你想永久设置 PATH&#xff0c;我…

【Docker】个人笔记

文章目录 Docker三个基本概念镜像(Image)容器(Container)仓库(Repository) Docker命令基础命令查看版本信息显示详细信息从仓库拉取镜像列出本地存储的镜像删除一个或多个镜像列出所有运行中的容器运行一个新的容器停止一个运行中的容器启动一个已停止的容器重启一个容器删除一…

零知识证明-非对称加解密算法(三)

前言 非对称加解密算法 &#xff0c;就有对称加解密算法 1:对称算法 定义 对称算法&#xff0c;加解密双方使用一个密钥。即加密秘钥和解密秘钥相同。 对称加密又分为&#xff1a;分组加密和流加密 分组加密 分组加密是每次只能处理特定长度的一块数据的一类密码算法&#xff0…

回归预测|基于卷积神经网络-鲸鱼优化-最小二乘支持向量机的数据回归预测Matlab程序 CNN-WOA-LSSVM

回归预测|基于卷积神经网络-鲸鱼优化-最小二乘支持向量机的数据回归预测Matlab程序 CNN-WOA-LSSVM 文章目录 一、基本原理1. 数据预处理2. 特征提取&#xff08;CNN&#xff09;3. 参数优化&#xff08;WOA&#xff09;4. 模型训练&#xff08;LSSVM&#xff09;5. 模型评估和优…

搭建webRTC cotrun流媒体服务器

1.二进制安装方式 https://blog.csdn.net/yushangyong/article/details/129973873 2.docker搭建方式 https://hub.docker.com/r/coturn/coturn 版本4.6.2-r11

(最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)

&#xff08;最新&#xff09;华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—&#xff08;共12套&#xff09;&#xff08;每套四十题&#xff09; 岗位——硬件技术工程师 岗位意向——单板硬件开发 真题题目分享&#xff0c;完整版带答案(有答案和解析&#xff0…

工业软件架构1:(QT和C++实现)

工业软件架构 - 事件驱动 - 1 0.事件总线&#xff08;EventBus&#xff09;1. 传感器模块&#xff08;Sensor Module&#xff09;2. 硬件控制模块&#xff08;Hardware Control Module&#xff09;3. 按键处理模块&#xff08;Button Handler Module&#xff09;4. 界面管理模块…

单位的一位干部去世了,该单位领导参加他的追悼会致辞是这样写的?

单位的一位干部去世了&#xff0c;该单位领导参加他的追悼会致辞是这样写的&#xff1f; 这是一篇单位工会领导参加本单位一位普通干部追悼会的致词 &#xff08;范文点评&#xff09; 胡某晔同志追悼会悼词 各位来宾、各位亲友&#xff1a; 今天&#xff0c;我们怀着十分沉痛…

基于深度学习的单目标跟踪系统

基于深度学习的单目标跟踪&#xff0c;效果吊打传统算法&#xff0c;3060显卡上达到实时&#xff0c;代码python和c两个版本都有。 基于深度学习的单目标跟踪系统是一种先进的计算机视觉技术&#xff0c;它可以实现实时的、高精度的目标跟踪。与传统的基于特征匹配或模板匹配的…

【宝马中国-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

一些零碎的关于合约测试,ERC20调用的知识

文章目录 前言一、vm.startPrank&#xff08;user&#xff09;是什么&#xff1f;二、approve 方法场景设定步骤 1: 用户授权步骤 2: 合约使用授权步骤 3: 检查授权状态示例代码 ERC20 approve的源代码代码解释代码解释应用场景示例注意事项代码解释可能的重载版本 _approve事件…

关于武汉芯景科技有限公司的实时时钟芯片XJ8337开发指南(兼容DS1337)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.时钟功能 2.闹钟功能&#xff08;两个闹钟&#xff09; 3.振荡器停止控制 4.频率输出&#xff08;1HZ、1.096KHZ、8.192KHZ、32.768KHZ&#xff09; 5.振荡器停止检测 6.闹钟中断标志 四、程序代…

MySQL 查询优化详解

在使用 MySQL 数据库时&#xff0c;查询性能往往是影响应用程序整体性能的关键因素。通过对查询进行优化&#xff0c;可以显著提升数据库的响应速度和处理能力。本文将深入探讨 MySQL 查询优化的几个重要方面&#xff0c;包括查询分析与执行计划&#xff08;EXPLAIN&#xff09…