javaEE 初阶 — 超时重传机制
文章目录
- 超时重传机制
- 1. 数据重复传输问题
- 2. 如何解决数据重复传输问题
- 3. 重传次数问题
TCP 的工作机制:
确认应答机制
超时重传机制
如果传输数据的时候丢包了该怎么办?
利用 超时重传,也就是超过了一定的时间,如果还没响应就重新传输。
丢包涉及到两种情况:
- 发送的数据丢了。
- 返回的 ACK 丢了。
发送方是区分不了是哪种情况,于是这两种就都会被认为是丢包了。
由于丢包是一个概率性事件,(通常概率较小)因此,如果重新发送一下这个数据报,还是有很大的概率成功传输的。
因此,TCP 就引入了重传机制,在丢包的时候,就要再发一次同样的数据。

如何判断这次传输是丢包了,还是 ACK 还在返回的路上呢?
TCP 直接引入了一个 时间阈值,发送方发送了一个数据之后,就会等待 ACK ,此时就会开始计时。
如果在这个时间阈值之内也没有收到 ACK ,就不管 ACK 是还在路上,还是彻底丢了,就会直接视为丢包了。
就好比老师要收你的作业,你说没带,但是此时老师认为没带就是没写。
1. 数据重复传输问题
这是由于重传,接收方重复的消息收到了两次。

把数据发送过去之后,返回的 ACK 丢包了,由于重传,又把相同的数据重新传输了一遍。
就好比张三妈妈喊他吃饭,他虽然听见了,但是还在忙自己的事情并没有过来。
妈妈就相当于是发送方,张三就相当于是接收方,而张三还没有过来吃饭就相当于是 ACK 还未返回。
这个时候,妈妈就会再喊一遍,张三听到后决定过来吃饭,相当于 ACK 返回了。
张三作为接收方,收到作为发送方的妈妈两次发送的数据。
如果发送的数据是一个支付请求,发生重传后,那将会造成支付两次的情况。
2. 如何解决数据重复传输问题
TCP 对于重复数据的传输是有特殊处理的,也就是去重。
TCP 存在一个 “接受缓冲区” 这样的存储空间(接收方操作系统内核里的一段内存)
每个 TCP 的 socket 对象都有一个接收缓冲区(也有一个发送缓冲区)
主机A 收到 主机B 的数据后,其实是 B 的网卡读到数据了,然后把这个数据放到 B 对应 socket 的 接收缓冲区 中。
后序应用程序使用 getInputStream 进一步的使用 read ,也就是从接收缓冲区里来读数据。
可以把这个 接受缓冲区 想象成一个阻塞队列。
根据数据的序号,TCP 很容易识别当前接收缓冲区里的这两条数据是否是重复的。
如果重复,就把后来的这份数据直接丢弃,保证了应用程序调用 read 读到的数据一定是不重复的。
网络上传输的数据可能会后发先至,TCP 使用这个接收缓冲区,对收到的数据进行重新排序,
使应用程序 read 到的数据是保证有序的(和发送顺序一致)
小结:
由于去重和重新排序机制的存在,发送方只要发现 ACK 还没有按时到达就会重传数据。
即使重复传输了。即使顺序乱了,借助去重和排序,接收方都能很好的处理。(去重和排序都依赖与TCP报头上的序号)
3. 重传次数问题
重传的数据是有可能再次丢包的,因此超时重传是有可能会重传多次的。
但是实际上如果重传了几次后都没有传过去,此时扔继续重传,意义已经不大了。
假设一次传输的丢包概率为 10%(这已经是一个非常大的数字了),那么传输的成功率为 90%。
如果第一次传输丢包,第二次传输也丢包了,此时的的丢包概率是 1%(10% * 10%),如果第三次也丢了,概率就是0.1%。
虽然重传都丢包的概率原则上讲是非常低的,但是如果这个情况真的出现了,只能说明此时丢包的概率远远不止 10%,
或者此时的网络出现了重大事故。
因此,重传达到一定次数的时候就不会继续重传,此时会认为出现了故障。
接下来 TCP 会尝试重置连接(相当于是重连一样),如果重置还是失败,就彻底断开连接。
重传的时候,第一次传重传和第二次重传的超时时间间隔是不一样的,一般来说,重传的轮次越大,超时时间间隔就越大。
超时时间变大,重传的频率就会降低。
因为重传次数越多,说明重传成功的概率就越小,此时重传的太快也是白浪费系统资源。
小结:
可靠传输是 TCP 最核心的部分,TCP 的可靠传输就是通过 确认应答 + 超时重传 来进行体现的。
其中确认应答描述了是传输顺利的情况,而超时重传描述的是传输出现问题的情况。
这两者相会配合,共同支撑整体的 TCP 可靠性。
相关文章:
javaEE 初阶 — 超时重传机制
文章目录超时重传机制1. 数据重复传输问题2. 如何解决数据重复传输问题3. 重传次数问题TCP 的工作机制:确认应答机制 超时重传机制 如果传输数据的时候丢包了该怎么办? 利用 超时重传,也就是超过了一定的时间,如果还没响应就重新…...
小米5x wlan无法打开解决
诱因:想要利用空置设备做节点服务器或者边缘计算,因此解锁并刷了magisk,印象中在刷之前wlan已经无法打开无法进行wifi联网 表现: 1 WLAN开关无法打开,或者虚假打开,无法扫描wifi 2 设置->我的设备->全…...
负载均衡之最小活跃数算法
文章目录[toc]一、概念二、场景与设计思路三、实现四、代码下载一、概念 活跃数 集群中各实例未处理的请求数。 最小活跃数 集群中各个实例,哪个实例未处理的请求数据最小,就称之为最小活跃数。 二、场景与设计思路 场景 以获取微服务地址为场景。 设计…...
JavaScript 评测代码运行速度的几种方法
一、使用 performance.now() API 在 JavaScript 中,可以使用 performance.now() API 来评测代码的运行速度。该 API 返回当前页面的高精度时间戳,您可以在代码执行前后调用它来计算代码执行所需的时间。 例如: let t0 performance.now();…...
Linux 编译器 gcc/g++
本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 目录 前言 正文 gcc/g常用命令 自定义可执行程序名命令-o 预处理指令-E 编译指令-S 汇编指令-c 链接指令gcc 命令巧记口诀 链接库 动态库-动态链接 静态库…...
2.Java基础【Java面试第三季】
2.Java基础【Java面试第三季】前言推荐2.Java基础01_字符串常量Java内部加载-上58同城的java字符串常量池面试code讲解intern()方法---源码解释02_字符串常量Java内部加载-下whyOpenJDK8底层源码说明递推步骤总结考查点03_闲聊力扣算法第一题字节跳动两数求和题目说明面试题解法…...
Java高级-多线程
本篇讲解java多线程 基本概念: 程序、进程、线程 **程序(program)**是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。 **进程(process)**是程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程…...
mysql高级(事务、存储引擎、索引、锁、sql优化、MVCC)
文章目录1.事务1.1 四大特性ACID1.2 并发事务2.存储引擎2.1 InnoDB2.2 MyISAM2.3 Memory2.4 存储引擎特点2.5 存储引擎的选择3.性能分析3.1 查看执行频次3.2 慢查询日志3.3 profile3.4 explain4.索引4.1 索引结构B-TreeBTreeHash面试题4.2 索引分类思考题4.3 语法4.4 使用规则最…...
Java后端开发功能模块思路
文章目录前言一、查找接口及参数信息1.1 找访问路径1.2 参数及返回结果信息1.3 编写功能模块函数二、代码设计思路三、总结前言 对于正在学习Java后端开发的同学来说,对于Java后端功能模块的开发过程及思路要有一个整体清晰的流程。才能保证在开发过程中更加的顺畅…...
CAPL(vTESTStudio) - DoIP - TCP发送_05
TCP发送 参数定义 版本号:02 FD or 01 FE or 其他任意值数据类型:00 05 or 00 06 or 80 01 or其他任意值数据长度:想要发送的任意长度...
使用IntelliJ IDEA搭建datax-web开发环境
记录:372场景:使用IntelliJ IDEA搭建datax-web开发环境,以及datax-web基本使用。版本:JDK 1.8Python 2.7.5datax-web开源地址:https://github.com/WeiYe-Jing/datax-web1.配置Maven环境1.1安装目录目录:D:\…...
[SSD固态硬盘技术 14] GC垃圾回收太重要了
今天介绍臭名昭著的垃圾收集 过程(或“GC”),maybe 这是对JAVA 工程师而言。当遇到GC导致速度降低时候, 他们真的想跳脚。 我想到我的小孩打疫苗,哭的哇哇叫, 在他的眼里疫苗应该也是讨厌的吧, 但事实真的如此吗? 但首先,让我们考虑一下如果根本没有 GC,闪存系统会发…...
lamada表达式、stream、collect整理
lamada表达式格式 格式:( parameter-list ) -> { expression-or-statements } 实例:简化匿名内部类的写法 原本写法: public class LamadaTest { public static void main(String[] args) { new Thread(new Runnable() { …...
Nacos 入门微服务项目实战
Nacos 核心源码精讲 - IT贱男 - 掘金小册全方位源码精讲,深度剖析 Nacos 注册中心和配置中心的核心思想。「Nacos 核心源码精讲」由IT贱男撰写,375人购买https://s.juejin.cn/ds/BuC3Vs9/ Hi,大家好,欢迎大家来学习《Nacos 核心源…...
【c++】类和对象:让你明白“面向一个对象有多重要”:构造函数,析构函数,拷贝构造函数的深入学习
文章目录 什么是面向对象?一:类是什么? 1.类的访问限定符 2.封装 3.类的实例化 4.this指针二:类的6个默认成员函数 1.构造函数 2.析构函数 3.拷贝构造函数什么是面向对象? c语言是面向…...
职场IT老手教你3步教你玩转可视化大屏设计,让领导眼前一亮!
我是制造企业的IT中心的研发人员,平常工作就是配合业务部门出出报表,选型一些商业软件,并在内部负责实施运维。最近领导出去参观了一些数字化转型比较领先的工厂和制造企业,回来就甩给我几张图,问能不能我们也做几个这…...
【光伏功率预测】基于EMD-PCA-LSTM的光伏功率预测模型(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
大数据Kylin(二):Kylin安装使用
文章目录 Kylin安装使用 一、Kylin安装要求 二、Kylin安装 1、Kylin安装前环境准备...
我们的微服务中为什么需要网关?
说起 Spring Cloud Gateway 的使用场景,我相信很多小伙伴都能够脱口而出认证二字,确实,在网关中完成认证操作,确实是 Gateway 的重要使用场景之一,然而并不是唯一的使用场景。在微服务中使用网关的好处可太多了&#x…...
互联网医院源码 线上问诊 智慧医院源码 C#源码
互联网医院平台源码 智慧医院管理系统源码 开发环境:ASP.NET C# VS2019 SQL2008 依托于实体医院利用互联网技术对接院内业务信息系统,向患者提供基于线上问诊、预约挂号、缴费结算、医患互动、诊后随访、健康科普和复诊等全面的医疗健康互联网服务。…...
像素幻梦工坊实战落地:数字艺术教育机构像素创作课AI教具部署
像素幻梦工坊实战落地:数字艺术教育机构像素创作课AI教具部署 1. 项目背景与教育价值 在数字艺术教育领域,像素艺术作为入门门槛较低但创意空间广阔的艺术形式,正受到越来越多教育机构的青睐。然而传统像素艺术教学面临两大挑战:…...
节能模式:OpenClaw+nanobot的间歇性任务调度技巧
节能模式:OpenClawnanobot的间歇性任务调度技巧 1. 为什么需要节能模式 去年夏天,我的电费账单突然飙升。排查后发现,那台24小时运行OpenClaw的工作站竟然是耗电大户——它持续调用着本地部署的Qwen大模型,GPU风扇昼夜不停地呼啸…...
DeepSeek-OCR-2实战教程:OCR结果JSON Schema解析与结构化数据入库指南
DeepSeek-OCR-2实战教程:OCR结果JSON Schema解析与结构化数据入库指南 1. 项目简介 DeepSeek-OCR-2是基于深度学习的智能文档解析工具,专门针对结构化文档内容提取而设计。与传统的OCR工具只能提取纯文本不同,这个工具能够精准识别文档的排…...
MySQL局域网远程连接测试教程
MySQL局域网远程连接测试教程1本地服务器安装MySQL服务器,安装MySQL shell, Workbench(非必须)防火墙配置2远程访问用户电脑配置IP配置安装 Workbench客户端1本地服务器 安装MySQL服务器,安装MySQL shell, Workbench(非必须) 点击右下角的Advanced Opt…...
HunyuanVideo-Foley效果展示:火车进站音效+月台场景视频生成实录
HunyuanVideo-Foley效果展示:火车进站音效月台场景视频生成实录 1. 效果展示开场 想象一下这样的场景:一列蒸汽火车缓缓驶入月台,伴随着汽笛声、铁轨摩擦声和人群嘈杂声。现在,通过HunyuanVideo-Foley技术,我们可以一…...
SEO_从基础到精通,系统学习SEO的完整路径解析
<h2>SEO的基础:了解搜索引擎优化的核心概念</h2> <p>搜索引擎优化(SEO)是一个广泛且复杂的领域,它的核心在于提升网站在搜索引擎结果页面(SERP)中的自然排名。了解SEO的基础概念是每一个…...
5步掌握抖音音乐批量下载:douyin-downloader高效使用指南
5步掌握抖音音乐批量下载:douyin-downloader高效使用指南 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容创作的浪潮中,背景音乐已成为视频作品的灵魂元素。然而࿰…...
iMeta入选新锐期刊分区表生物学1区Top
2026年3月24日,2026年新锐期刊分区表正式发布。iMeta被评选为生物学1区Top期刊,标志着iMeta期刊学术声誉与影响力持续提升。自创刊以来,iMeta的每一步成长都离不开期刊编委、审稿专家及广大同行的鼎力支持。未来,iMeta将再接再厉&…...
告别复杂配置!5分钟掌握OCAT:OpenCore图形化配置神器
告别复杂配置!5分钟掌握OCAT:OpenCore图形化配置神器 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxiliaryTools 如果你…...
实战指南:用快马为django项目生成定制化vmware开发环境,开箱即用
实战指南:用快马为Django项目生成定制化VMware开发环境,开箱即用 在实际开发场景中,虚拟机环境需要与具体项目需求紧密结合。最近我在做一个Django项目时,发现每次换电脑或重装系统都要重新配置开发环境,特别浪费时间…...
