javaEE 初阶 — 超时重传机制

news2024/12/23 6:08:44

文章目录

  • 超时重传机制
    • 1. 数据重复传输问题
    • 2. 如何解决数据重复传输问题
    • 3. 重传次数问题

TCP 的工作机制:

确认应答机制

超时重传机制



如果传输数据的时候丢包了该怎么办?

利用 超时重传,也就是超过了一定的时间,如果还没响应就重新传输。

丢包涉及到两种情况:

  1. 发送的数据丢了。
  2. 返回的 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 可靠性。

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

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

相关文章

回顾 | 开学季(一)- 在 Windows / macOS 上配置你的开发环境

点击蓝字关注我们编辑:Alan Wang排版:Rani Sun微软 Reactor 为帮助广开发者,技术爱好者,更好的学习 .NET Core, C#, Python,数据科学,机器学习,AI,区块链, IoT 等技术,将…

社交登陆OAuth2.0

QQ、微博、github 等网站的用户量非常大,别的网站为了 简化自我网站的登陆与注册逻辑,引入社交登陆功能; 步骤: 1)、用户点击 QQ 按钮 2)、引导跳转到 QQ 授权页 3)、用户主动点击授权&#xff…

Linux 服务器(centos7)搭建 Web 版 VSCode

首先到code-server的git地址找到下载链接 打开https://github.com/cdr/code-server/releases,选择一个版本下载,我选择的是code-server-4.9.1-linux-amd64.tar.gz,这是 64 位 Linux 的通用版。 下载压缩包到服务器并解压 cd /home mkdir v…

Python-第四天 Python循环语句

Python-第四天 Python循环语句一、while循环1.while循环的基础语法2.while循环的基础案例3.while循环的嵌套应用4.while循环的嵌套案例二、for循环1.for循环的基础语法1.1基础语法1.2 range语句2.for循环的嵌套应用三、循环中断 : break和continue1.continue2.break四、 综合案…

nginx相关反爬策略总结笔记

引言 互联网站点的流量一部分由人类正常访问行为产生,而高达30%-60%的流量则是由网络爬虫产生的,其中一部分包含友好网络爬虫,如搜索引擎的爬虫、广告程序、第三方合作伙伴程序、Robots协议友好程序等;而并非所有的网络爬虫都是友好的&#x…

【C#项目】图书馆管理系统-WinForm+MySQL

文章目录前言一、业务梳理与需求分析1.功能描述2.实现步骤3.功能逻辑图二、数据库设计1.实体-关系(E-R图)概念模型设计2.数据表设计三、WinForm界面交互设计1、界面交互逻辑2、项目树3、主界面登录界面4、 图书查询界面5、图书借阅界面6、图书插入界面7、…

pixhawk2.4.8-地面站配置-APM固件

目录一、硬件准备二、APM固件、MP地面站下载三、地面站配置1 刷固件2 机架选择3 加速度计校准4 指南针校准5 遥控器校准6 飞行模式7 紧急断电&无头模式8 基础参数设置9 电流计校准10 电调校准11 起飞前检查(每一项都非常重要)12 飞行经验四、遇到的问…

10.数据库恢复技术

其他章节here 梳理 名词解释 事务:事务是用户定义的 一个数据操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位 事务≠程序 事务是恢复和并发控制的基本单位 (事务时数据库应用程序的基本逻辑单元&am…

制造业升级转型:制造业上市公司-智能制造词频统计数据集

发展智能制造,关乎中国制造业转型升级的成效。基于中国制造业上市公司年报,通过文本数据挖掘,提取关键词反映企业对智能制造的关切焦点,进而运用词频及共词网络分析,洞察中国智能制造的发展态势。 研究发现&#xff0…

OpenAI最重要的模型【CLIP】

最近的 AI 突破 DALLE和 Stable Diffusion有什么共同点? 它们都使用 CLIP 架构的组件。 因此,如果你想掌握这些模型是如何工作的,了解 CLIP 是先决条件。 此外,CLIP 已被用于在 Unsplash 上索引照片。 但是 CLIP 做了什么&…

若依框架---为什么把添加和更新分成两个接口

👏作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者 📕系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

SpringCloud-Netflix学习笔记11——Hystrix实现服务降级

服务降级 是什么? 整体资源快不够了,忍痛将某些服务先关掉,待渡过难关,再开启回来。 如下图,在某一个时间段,访问服务A的请求特别多,而访问服务B和服务C的请求特别少,这时我们可以把…

实战打靶集锦-004-My-Cmsms

**写在前面:**记录一次艰难曲折的打靶经历。 目录1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 WEB服务探查4.1.1 浏览器访问4.1.2 目录枚举4.1.3 控制台探查4.1.4 其他目录探查4.2 阶段小结5. 公共EXP搜索5.1 CMS搜索5.2 Apache搜索5.3 PHP搜索5.4 MySQL搜索5…

DaVinci:色度 - 亮度网格

调色页面:色彩扭曲器 Color:Color Warper相对于色相 - 饱和度网格,色度 - 亮度 Chroma - Luma网格在颜色的亮度控制上更加灵活。◆ ◆ ◆工作原理分析色度 - 亮度网格来自色彩空间三维模型中圆柱体垂直切分的两个 90 交叉的纵向平面。网格上…

介绍架构分类、设计及架构师工作

title: 介绍架构分类、设计及架构师工作 date: 2019-06-07 13:49:00 tags: 架构分类架构设计功能设计架构师 categories:架构 介绍 本文从理论上分析、梳理架构相关知识,帮助自己更好的理解架构工作。 什么是架构和架构分类 什么是架构 关于架构的定义业界有太多…

致敬白衣天使,学习Python读取

名字:阿玥的小东东 学习:Python、c 主页:阿玥的小东东 故事设定:现在学校要求对所有同学进行核酸采集,每位同学先在宿舍内等候防护人员(以下简称“大白”)叫号,叫到自己时去停车场排…

JDK 8 JVM内存结构详解

前言 本文所介绍的是 JDK 1.8 版本,其他版本的 JDK 在这里并不一定正确;内容主要摘自周志明的《深入理解Java虚拟机》一书的关键点,并根据自身的理解进行记录。感兴趣的同学可以去阅读原著。 JVM 的内存结构,主要包括以下 5 个区…

Jupyter 插件配置和主题设置

Jupyter 插件配置和主题设置 前提需要暗转Anaconda 或者系统已有Jupyter。 即使想在conda 虚拟环境中使用Jupyter 也不用在虚拟环境中重新安装和配置Jupyter相关包。 在base环境中,下载插件管理包: pip install jupyter_contrib_nbextensions -i htt…

开源项目 —— 原生JS实现斗地主游戏 ——代码极少、功能都有、直接粘贴即用

目录 效果如下 目录结构 GameEntity.js GrawGame.js konva.min.js PlayGame.js veriable.js index.html 结语: 前期回顾 卡通形象人物2 写代码-睡觉 丝滑如德芙_0.活在风浪里的博客-CSDN博客本文实现了包含形象的卡通小人吃、睡、电脑工作的网页动画https://…

【Pytorch项目实战】之语义分割:U-Net、UNet++、U2Net

文章目录博主精品专栏导航一、前言1.1、什么是图像分割?1.2、语义分割与实例分割的区别1.3、语义分割的上下文信息1.4、语义分割的网络架构二、网络 数据集2.1、经典网络的发展史(模型详解)2.2、分割数据集下载三、算法详解3.1、U-Net3.1.1、…