TCP重传机制详解——01概述

文章目录

  • TCP重传机制详解——01概述
    • 什么是TCP重传?
    • TCP为什么要重传?
    • TCP如何做到重传?
    • TCP重传方式有哪些
      • 超时重传(timeout or timer-based retransmission)
      • 快速重传(fast retransmission或者fast retransmit)
      • 改进的重传机制,早期重传(ER,Early Retransmit)
    • REF

TCP重传机制详解——01概述

什么是TCP重传?

重传,表示的重复传输。在生活中,就是书信的重复传输;在用户使用的网络世界里,就是数据和信息的重复传输;在TCP/IP协议中,就是报文的重复传输。
TCP重传就像寄信一样,如果你没收到回执,就说明信可能没送到,于是你就再寄一次,直到对方告诉你信收到了为止。在网络里,TCP就是帮你这样安全送“信”的,如果电脑A发给电脑B的信息没被确认收到,TCP就会重新发送这个信息,确保信息一定能到达B电脑。

TCP为什么要重传?

我们都知道TCP的三个特点,分别是面向连接、可靠、字节流式。
重传的目的就是尽可能的保证TCP的可靠。

TCP如何做到重传?

TCP重传的最基本的元素就是seq和ack字段,也就是在数据分段的前提下,如何知道哪一个数据丢失了,哪一个数据接收到了。所以seq和ack的值就是让我们可以知道我们需要重传哪些数据的依据。

  • 序号(Sequence Numbers): 每个TCP数据段都携带一个序号字段,表示数据段中数据的起始字节在整个数据流中的位置。发送端在发送数据时,会给每个数据段分配一个唯一的序列号,以便接收端可以按照正确的顺序重新组装数据流。
  • 确认应答(ACKnowledgments): 接收端在接收到数据段后,会通过ACK应答告诉发送端已成功接收的数据段的序列号。ACK字段中携带的值是期望接收的下一个数据段的序列号,即上次已成功接收数据段的序列号加上传送的数据字节数。

所以,需要知道这个前提,不用想的太复杂,之后的很多机制都是基于此。TCP重传的本质设计思路,便是基于序号(Sequence Numbers)和确认应答(ACKnowledgments)

TCP重传方式有哪些

超时重传(timeout or timer-based retransmission)

这种重传方式是发出去的数据在RTO超时后还没有收到对应的ACK就会进行超时重传。

  • RTO(Retransmission Time Out),传输超时时间
  • RTT(Round Trip Time),往返时间,数据发送至收到ACK的时间。
    RTO值是根据RTT进行公式计算的,而网咯是动态变化的,所以往返时间也并非确定,所以RTO也是动态变化的

RTO超时重传
RTO倍增,指数回避,RTT-2RTO-4RTO-8RTO-16RTO.......
如果得不到回应,超时重传会一直重传下去吗?
不会!会有次数限制吗?

内核参数场景
/proc/sys/net/ipv4/tcp_syn_retries初始SYN握手重试次数
/proc/sys/net/ipv4/tcp_syn_retries第二次SYN+ACK握手重试次数
/proc/sys/net/ipv4/tcp_syn_retries第二次SYN+ACK握手重试次数
/proc/sys/net/ipv4/tcp_retries1在超时后第一次尝试多少次重传(针对数据段)
/proc/sys/net/ipv4/tcp_retries2在超时后最多尝试多少次重传(针对数据段)

关于tcp_retries1和tcp_retries2的深入理解:tcp_retries1和tcp_retries2

快速重传(fast retransmission或者fast retransmit)

当TCP注意到累计ack(即TCP头中的ack number)不再推进或者接收端通过SACK信息指示发送端接收端存在洞(hole)时候就会触发发送端的重传,通常来说快速重传比超时重传更高效。
触发机制:

类型触发条件
dup ACKdup ACK重复三次
SACK三个SACK选项块
FACK一次ACK+SACK(ACK-SACK之间有三个包未确认)
partial ACK一个ACK连续丢包情况下只确认部分收到了
dup ACKthin stram下dup ACK重复一次
注:
1. 当ACK报文中的ack值和SACK块之间存在空洞时,可以判定为partial ACK;
2. 在乱序接收数据包后只发送了一个重复的ACK,并且没有收到后续数据包,可以判定为thin stream

改进的重传机制,早期重传(ER,Early Retransmit)

谷歌还对快速重传提出了一种改进的重传机制,即早期重传(ER,Early Retransmit),主要解决某些特定场景下,没有足够的dupack出发的快速重传造成的问题。

REF

TCP重传概述
Linux超时重传引入示例
基础快速重传

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

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

相关文章

ECS Fargate 上部署 SkyWalking UI 并通过 ALB 提供服务

在本篇文章中,我们将演示如何使用 AWS CLI 在 ECS Fargate 上部署 SkyWalking UI,并通过 Application Load Balancer (ALB) 提供公网访问入口,同时确保容器无法直接从公网访问。以下是详细步骤: 1. 创建 ALB aws elbv2 create-load-balancer \--name skywalking-ui-alb \…

蓝桥集训之格子游戏

蓝桥集训之格子游戏 核心思想&#xff1a;并查集 将二维坐标转化为一维坐标 x*ny每次将两个点合并 同时判断两点是否在同一集合内若在 则本次连接可以成环 #include<iostream>#include<cstring>using namespace std;const int N 40010; //原本的n 的平方int p…

Avalonia(11.0.2)+.NET6 打包运行到银河麒麟V10桌面系统

操作系统配置 项目结构 .net版本 这次我们是在银河麒麟V10系统上打包运行Avalonia(11.0.2)+.NET6.0的程序 开始打包 准备Linux下的桌面快捷方式以及图标 调整AvaloniaApplication2.Desktop.csproj的配置项,重点看下图红色线圈出来的部分,里面涉及到了LinuxPath的设置。完整的配…

突破编程_C++_C++11新特性(type_traits的概念以及核心类型特性)

1 type_traits 的概述 type_traits 是 C 标准模板库&#xff08;STL&#xff09;中的一个头文件&#xff0c;它定义了一系列模板类&#xff0c;这些模板类在编译期获取某一参数、某一变量、某一个类等的类型信息&#xff0c;主要用于进行静态检查。通过使用 type_traits&#…

k8s-多容器Pod、容器保护策略、宽限期、最大生命周期、嵌入式脚本、多容器Pod、资源监控工具

资源对象文件 一、模板与帮助信息 1、资源对象文件优势 命令无法实现高级复杂的功能某些资源对象使用命令无法创建方便管理、保存、追溯历史 2、如何生成资源对象模板 资源对象 Pod 模板使用 run 生成 [rootmaster ~]# kubectl run myweb --imagemyos:nginx --dry-runcli…

10、chrome拓展程序的实现

一、拓展程序的实现 拓展程序项目的构成 和前端项目一样&#xff0c;拓展程序也是有Html、CSS、JS文件实现的&#xff0c;现在看来它就是一个静态的前端页面。但是不同的是&#xff0c;拓展程序中还需要额外的一个清单文件&#xff0c;就是manifest.json&#xff0c;清单文件可…

Prompt进阶系列5:LangGPT(提示链Prompt Chain)--提升模型鲁棒性

Prompt进阶系列5:LangGPT(提示链Prompt Chain)–提升模型鲁棒性 随着对大模型的应用实践的深入&#xff0c;许多大模型的使用者&#xff0c; Prompt 创作者对大模型的应用越来越得心应手。和 Prompt 有关的各种学习资料&#xff0c;各种优质内容也不断涌现。关于 Prompt 的实践…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;九&#xff09; 下一篇&#xff1a; SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十一&#xff09; 38、sqlite3_column_value sqlite3_column_valu…

云计算系统等保测评对象和指标选取

1、云计算服务模式与控制范围关系 参考GBT22239-2019《基本要求》附录D 云计算应用场景说明。简要理解下图&#xff0c;主要是云计算系统安全保护责任分担原则和云服务模式适用性原则&#xff0c;指导后续的测评对象和指标选取。 2、测评对象选择 测评对象 IaaS模式 PaaS模式…

Python Flask 返回json类型数据

from flask import Flask, make_responseapp Flask(__name__)app.route("/") def hello():data {"name": "张三"}return make_response(data)if __name__ __main__:app.run(debugTrue)如果像返回字符串那么可以用 return make_response(json.…

HTML(二)

一、表格标签 1.1表格的主要作用 表格主要用于显示、展示数据&#xff0c;因为它可以让数据显示的非常的规整&#xff0c;可读性非常好。特别是后台展示数据的时候&#xff0c;能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据表现得很有条理。 1.2 表格的…

工作量证明机制

引言 区块链是一几年极其火爆的技术概念,因为比特币的超高价格引起了公众对区块链技术的关注。犹记得当年各类区块链包装的应用游戏层出不穷,区块链所到之处,投资流量唾手可得,真可谓占尽天时,那种勃勃生机,万物竞发的境界,犹在眼前。短短十年之后,热度不在。不过也很…

鸿蒙一次开发,多端部署(十一)交互归一

对于不同类型的智能设备&#xff0c;用户可能有不同的交互方式&#xff0c;如通过触摸屏、鼠标、触控板等。如果针对不同的交互方式单独做适配&#xff0c;会增加开发工作量同时产生大量重复代码。为解决这一问题&#xff0c;我们统一了各种交互方式的API&#xff0c;即实现了交…

Spring Boot集成chronicle queue快速入门demo

1.chronicle queue介绍 Chronicle Queue使用一个内存映射文件来持久化每一条消息。这使我们能够在进程之间共享消息。它直接将数据存储到堆外内存&#xff0c;因此&#xff0c;使其没有GC开销。它被设计用来为高性能应用程序提供低延迟的消息框架。使用开源的Chronicle Queue可…

【SQL】1407. 排名靠前的旅行者

题目描述 leetcode题目&#xff1a;1407. 排名靠前的旅行者 Code 写法一 先过滤&#xff0c;再连表 -- 写法一&#xff1a;先过滤再连表 select name, ifnull(summ, 0) as travelled_distance from Users left join(select user_id, sum(distance) as summfrom Ridesgroup …

kubernetes K8s的监控系统Prometheus安装使用(一)

简单介绍 Prometheus 是一款基于时序数据库的开源监控告警系统&#xff0c;非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做…

网络安全知识核心之RIP的工作原理

RIP 动态路由选择协议&#xff08;网络层协议&#xff09; RIP 是一种基于距离矢量&#xff08;Distance-Vector&#xff09;算法的协议&#xff0c;它使用跳数&#xff08;Hop Count&#xff09;作为度量来衡量到达目的网络的路由距离。RIP 通过 UDP 报文进行路由信息的交换&…

前端工程化的理解

简单来说&#xff0c;前端工程化是对前端开发流程的改良&#xff0c;是效率工具。 可以通过一下四个块来理解前端工程化 模块化&#xff1a; 就是将代码拆分&#xff0c;分成独立的单独的相互依赖的片段 首先说JS&#xff0c;CommonJS和ES Module都是JS模块化的一种表现形式&a…

TS + Vue3 elementUI 表格列表中如何方便的标识不同类型的内容,颜色区分 enum

TS Vue3 elementUI 表格列表中如何方便的标识不同类型的内容&#xff0c;颜色区分 enum 本文内容为 TypeScript 一、基础知识 在展示列表的时候&#xff0c;列表中的某个数据可能是一个类别&#xff0c;比如&#xff1a; enum EnumOrderStatus{"未受理" 1,"…

SQL执行原理

文章目录 SQL执行原理慢SQL分析优化案例优化步骤&#xff1a; 分库分表实施分库分表时&#xff0c;如何保证数据一致性&#xff1f;实践案例案例实施垂直拆分的步骤&#xff1a; SQL执行原理 SQL&#xff08;Structured Query Language&#xff09;是一种用于管理与查询关系数…