计算机网络:运输层 —— TCP 的超时重传机制

news/2024/11/24 23:00:00/

文章目录

TCP 的超时重传

TCP 的超时重传是保证数据可靠传输的重要机制之一

  • 保证数据可靠性:通过超时重传机制,即使在网络状况不佳,出现数据包丢失等情况时,也能够确保数据最终能够完整、准确地被接收方接收,从而保证了数据传输的可靠性。

  • 自适应网络变化:能够根据网络的实时状况动态调整超时时间和重传策略,较好地适应不同网络环境下的传输需求,提高网络资源的利用率和数据传输效率。

超时重传时间的选择

发送方在发送数据后会启动一个定时器,若在规定时间内未收到接收方的确认报文(ACK),则认为该数据丢失,进而触发重传机制,重新发送该数据,直至发送成功。

TCP 超时重传时间 RTO的选择是TCP最复杂的问题之一,超时重传时间RTO应略大于往返时间RTT

TCP下层是复杂的因特网环境:主机 A 所发送的报文段可能只经过一个高速率的局域网,也可能经过多个低速率的网络,并且每个IP数据报的转发路由还可能不同。

不能直接使用略大于某次测量得到的往返时间 RTT 样本的值作为超时重传时间 RTO。但是,可以利用每次测量得到的 RTT 样本,计算加权平均往返时间 R T T S RTT_S RTTS,这样可以得到比较平滑的往返时间。

在这里插入图片描述

超时重传时间RTO的值应略大于加权平均往返时间 R T T S RTT_S RTTS 的值(而不是某个 RTT 样本的值)

[RFC 6298] 建议使用下式来计算超时重传时间 RTO

在这里插入图片描述

在 TCP 连接建立初期,超时重传时间(RTO)会被赋予一个初始值。例如,根据最初的简单公式,初始值可能为 1 秒;而依据修正公式,初始 RTO 应为 a + 4 d a+4d a+4d,其中 a 、 d a、d ad 为相关参数,如初始化 a a a 为 0,初始化 d d d 为 3 秒

如果所测量到的 RTT 样本不正确,那么所计算出的 R T T S RTT_S RTTSRTT,自然就不正确,进而所计算出的 RTO 也就不正确。然而,RTT 的测量确实是比较复杂的。

在这里插入图片描述

通过上述两个例子可以看出:当发送方出现超时重传后,收到确认报文段时,是无法判断出该确认到底是对原数据报文段的确认还是对重传数据报文段的确认,也就是无法准确测量出RTT,进而无法正确计算RTO。

基于以上问题,Karn 提出了一种算法,但该算法又引出了新问题,因此要对 Karn算法 进行修正:

在这里插入图片描述
也就是说:报文段每重传一次,就把 RTO 增大一些。典型的做法是将新 RTO 的值取为I日 RTO2 倍

在数据正常传输过程中,发送方会根据往返时间(RTT)不断更新 RTO 的值。RTT 是指数据包从发送方发送出去到接收方返回确认报文所需的时间 。发送方通常使用特定的公式来综合旧的 RTT 值和新测量到的 RTT 值,以更准确地估计当前网络状况下合适的 RTO

但在重传情况下,RTO 不使用上述正常传输时的公式计算,而是采用指数退避的方式。比如,当 RTO 为 1 秒时发生数据重传,下一次重传的 RTO 会变为 2 秒,再下次变为 4 秒,以此类推,直至达到 64 秒。

重传策略

  • 普通超时重传:发送方等待 ACK 的定时器超时后,会重传未被确认的数据报文段。并且,每次重传后会重新启动定时器,等待接收方的确认。

  • 快速重传:当接收方收到失序的报文段时,会立即发送一个重复的 ACK。如果发送方连续收到三个重复的 ACK,就可推断有一个报文段丢失,此时发送方不必等待定时器超时,会立即重传丢失的报文段,这就是快速重传机制。快速重传能够有效减少因等待超时带来的延迟,更快地恢复数据传输。

  • 选择性确认重传:这是一种 TCP 扩展机制,接收方可以通过选择性确认SACK)告知发送方哪些数据包已成功接收,哪些需要重传。发送方根据这些信息,仅重传丢失的数据包,避免了不必要的全量重传,提高了传输效率.

与拥塞控制的关联

相关阅读网络>计算机网络:运输层 —— TCP 的拥塞控制

  • 慢启动阶段:当发生超时重传时,通常意味着网络可能出现了拥塞或其他问题。此时,会将慢启动门限(ssthresh)设置为当前拥塞窗口(cwnd)的一半,同时将 cwnd 重新设置为 1 个报文段大小,重新进入慢启动阶段,以较慢的速度重新探测网络的承载能力,避免再次造成网络拥塞

  • 快速恢复阶段:在快速重传之后,发送方进入快速恢复阶段。此时,ssthresh 同样被设置为当前 cwnd 的一半,而 cwnd 则被设置为 ssthresh 加上 3 倍的报文段大小。之后,发送方每收到一个新的 ACK,就将 cwnd 增加 1 个报文段大小并发送 1 个分组,直到再次检测到拥塞。


http://www.ppmy.cn/news/1549656.html

相关文章

spi 回环

///tx 极性0 (sclk信号线空闲时为低电平) /// 相位0 (在sclk信号线第一个跳变沿进行采样) timescale 1ns / 1ps//两个从机 8d01 8d02 module top(input clk ,input rst_n,input [7:0] addr ,input …

【Docker项目实战】使用Docker部署puter云桌面系统

【Docker项目实战】使用Docker部署puter云桌面系统 一、puter介绍1.1 puter简介1.2 puter特点1.3 puter使用场景二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载puter镜像4.1 …

#Verilog HDL# Verilog中的ifdef/ifndef/else等用法

目录 示例1: 示例2: 示例3: 示例4: 通过示例讲解,`ifdef/`ifndef/`elsif/`else/`endif 的用法 示例1: // Style #1: Only single `ifdef `ifdef <FLAG>// Statements `endif// Style #2: `ifdef with `else part `ifdef <FLAG>// Statements `else// Sta…

性能优化--CPU微架构

一 指令集架构 Intel X86, ARM v8, RISC-V 是当今广泛使用的指令架构的实例。 大多数现代架构可以归类为基于通用寄存器的加载和存储型架构&#xff0c;在这种架构下&#xff0c;操作数倍明确指定&#xff0c;只能使用夹在和存储指令访问内存。除提供基本的功能之外&#xff0c…

智能体来了:构建用于具有结构化输出的内容审核的智能 AI Agent 智能体

智能体来了&#xff1a;一个专注于AI Agent开发的专业学习与交流社区&#xff01; 在本教程中&#xff0c;我们将探索如何创建一个可以管理内容并生成结构化报告的智能 AI 智能体。我们将使用 OpenAI 的结构化输出和函数调用的新功能来构建这个高级系统。我们的目标是开发一种能…

AI在营销中的应用:从自动化到机器学习的四种类型

人工智能&#xff08;AI&#xff09;正在以飞快的速度改变各个行业&#xff0c;尤其是在营销领域&#xff0c;它展现了巨大的潜力。从自动执行重复任务到动态优化营销策略&#xff0c;AI 为企业带来了效率和决策能力的全面升级。然而&#xff0c;根据应用的复杂性和系统集成程度…

Android 在Android.bp或Android.mk文件移除原生内置应用

Android 在Android.bp或Android.mk文件移除原生内置应用 1.在SystemUI或者Launcher的Android.bp文件中配置overrides android_app {name: "SystemUI",defaults: ["platform_app_defaults"],static_libs: ["SystemUI-core",],resource_dirs: [],…

SQLynx让数据库变得简单!

SQLynx让数据库管理和开发变得更简单&#xff0c;SQLynx是一款旨在简化飞客使用体验的创新型工具&#xff0c;它为数据库管理者、数据库分析师和开发人员提供了一个直观、易用、高效的平台&#xff0c;首先&#xff0c;SQLynx拥有直观友好的用户界面。无论您是新建还是导表&…