【TCP】确认应答 与 超时重传

news2024/11/6 7:06:43

确认应答 与 超时重传

  • 一. 确认应答机制
  • 二. 超时重传机制

一. 确认应答机制

确认应答: 保障可靠传输的核心机制。
可靠传输: 不是指传输过去的数据不出错, 也不是指数据一定能传输过去,而是指发送方能够知道接收方是否接收到了数据。

确认应答的关键就是接收方收到数据后,返回给发送方一个确认应答报文 (ACK acknowledge), 表示自己已经收到数据了。

在这里插入图片描述

确认应答号是 接收到的最后一个字节数据的编号 + 1
A 给 B 发送了 1000B 数据,B 返回给 A 中的 ACK 中就会带有确认号 1001,表示 1001 之前的数据已经接受到了,接下来 A 应该从 1001 开始发送。

TCP 将每个字节的数据都进行了编号。即为序列号。

注意:是按照字节进行了编号,并不是按消息的条数。

在这里插入图片描述

每一个 ACK 都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据;下一次你从哪里开始发。

如果不使用序列号和确认应答号的话,发送发就不知道接收方是针对哪些的确认应答,不知道接收方到底接收到了哪些数据。

举个栗子:
滑稽老铁给女神发送消息:

在这里插入图片描述

这种情况就说不清了,使用序列号和确认号就能解决:

在这里插入图片描述

二. 超时重传机制

在这里插入图片描述

  • 主机A发送数据给B之后,可能因为网络拥堵等原因,数据无法到达主机B
  • 所以 A 就无法收到 B 的 ACK。
  • A 等了一个特定时间间隔还没有收到B发来的确认应答,就会进行重发。

但是,主机A未收到B发来的确认应答,也可能是因为ACK丢失了,这样 A 也不能收到 ACK,也就重新发送,那么 B 就会收到了重复的数据:

在这里插入图片描述
因为主机B会收到很多重复数据,所以 TCP 协议需要能够识别出那些包是重复的包,并且把重复的丢弃掉。

去重:

这时候我们可以利用前面提到的序列号,就可以很容易做到去重的效果:

  • 接收到的数据会被放到操作系统内核的接收缓冲区。(发送方也有发送缓冲区。)
  • TCP 会根据序列号判断是否重复,如果缓冲区里面已经有这个数据了,那就直接丢弃。
  • 从而能够保证上层应用程序调用 Socket API 拿到的数据一定是不重复的。

(所以我们应用层是感知不到超时重传的过程的。)

超时的时间如何确定?

  • 最理想的情况下,找到一个最小的时间,保证 “确认应答一定能在这个时间内返回”。
  • 但是这个时间的长短,随着网络环境的不同,是有差异的。
  • 如果超时时间设的太长,会影响整体的重传效率;
  • 如果超时时间设的太短,有可能会频繁发送重复的包;

TCP 为了保证无论在任何环境下都能比较高性能的通信,因此会动态计算这个最大超时时间。

  • Linux中(BSD Unix 和 Windows 也是如此),超时以 500ms 为一个单位进行控制,每次判定超时重发的超时时间都是 500ms 的整数倍。

  • 如果重发一次之后,仍然得不到应答,等待 2*500ms 后再进行重传。

  • 如果仍然得不到应答,等待 4*500ms 进行重传。依次类推,以指数形式递增。

  • 累计到一定的重传次数,TCP 认为网络或者对端主机出现异常,强制关闭连接。

什么时候使用 TCP ?什么时候使用 UDP ?

  • 对可靠性有一定要求,日常中大多数情况都是基于 TCP。
  • UDP用于对高速传输和实时性要求较高的通信领域,例如,早期的QQ,视频传输等。
  • UDP 还有一个优势:天然支持广播。

好啦! 以上就是对 TCP 确认应答 与 超时重传机制的讲解,希望能帮到你 !
评论区欢迎指正 !

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

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

相关文章

java:asm实现ResultSet结果映射到实体类

java:asm实现ResultSet结果映射到实体类 1 前言 Spring-core包中提供了许多方便的工具类,其中org.springframework.cglib.beans下的BeanCopier工具类,主要用于bean之间的属性拷贝,性能上优于Spring-beans包下的org.springframew…

面试官:你了解Axios的原理吗?有看过它的源码吗?

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 一、axios的使用 二、实现一个简易版axios 三、源码分析 小结 一、axios的使用 关于axios的基本使用&#xff0…

暨南大学旅游管理《乡村振兴战略下传统村落文化旅游设计》校友许少辉—2023学生开学季辉少许

暨南大学旅游管理《乡村振兴战略下传统村落文化旅游设计》校友许少辉——2023学生开学季辉少许

软文发布是推动企业发展的无形动力 | 媒介启航

同样是销售产品,为什么以故事的形式呈现要比直接讲产品功效更易让消费者认同和销售呢?这就是软文的魅力,它极好的运用了人作为情感动物的喜好。因此,各大小企业纷纷做软文,比如溯源啊、初心啊、情怀啊、创业经历啊等等…

Java集成微信支付实现企业付款到零钱和商家转账到零钱的功能

Java集成微信支付实现企业付款到零钱和商家转账到零钱的功能 文章目录 [toc] 1.企业付款到零钱和商家转账到零钱的区别1.1 申请要求不同1.2 API接口不同1.3 用户收款限制1.4 商户付款额度1.5 派发方式不同1.6 打款方式不同 2.集成实现2.1 v2版本集成2.2 依赖2.3 配置2.3.1 naco…

java多线程学习笔记一

一、线程的概述 1.1 线程的相关概念 1.1.1 进程(Process) 进程(Process)是计算机的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位。 可以把进程简单的理解为操作系统中正在有运行的一…

插入排序代码及时间空间复杂度

插入排序(Insertion Sort)是一种简单的排序算法,它将一个数组分成已排序和未排序两部分,然后逐步将未排序部分的元素插入已排序部分的正确位置。以下是插入排序的代码示例以及时间和空间复杂度分析,希望对大家有所帮助…

Markdown 文档标题序号重排版(WebUI Tool)

Markdown 标题重编号 1. 项目背景 在日常写 Markdown 时,我们可能会遇到这样的情况: 文档的迁移与整合:在迁移或整合文档时,可能会让原本的标题编号混乱文档的重构:在重构文档时,例如仅仅修改了一处标题&…

malloc与free

目录 前提须知: malloc: 大意: 头文件: 申请空间: 判断是否申请成功: 使用空间: 结果: 整体代码: malloc申请的空间怎么回收呢? 注意事项: free:…

uniapp级联菜单地点区域使用label值,web端el-cascader绑定的value

效果图 一、uniapp uniapp级联菜单地点区域使用label值 1.ui使用 <uni-forms-item label="地址" name="userArea" required><view class="" style="height: 100%;display: flex;align-items: center;">

神经网络 03(参数初始化)

一、参数初始化 对于某一个神经元来说&#xff0c;需要初始化的参数有两类&#xff1a;一类是权重W&#xff0c;还有一类是偏置b&#xff0c;偏置b初始化为0即可。而权重W的初始化比较重要&#xff0c;我们着重来介绍常见的初始化方式。 &#xff08;1&#xff09;随机初始化 …

zabbix监控告警邮箱提醒,钉钉提醒

一、注册网易邮箱及其配置邮箱 1、开启POP3/SMTP/IMAP 二、service端配置邮件服务 1.安装 mailx dos2unix yum install -y mailx dos2unix mailx&#xff1a;邮件服务 mos2unix&#xff1a;用于转换文本文件格式的实用工具 查看mailx版本 2.配置mailx配置文件 编辑&#xf…

控制理论::带零点的二阶系统时域响应分析

一、系统描述 二、系统分析(分类讨论分析) 1、类型一&#xff08;极点为实数&#xff08;阻尼比>1&#xff09;&#xff0c;零点为负实数&#xff08;τ-1/b<0&#xff09;&#xff09; 1.1 定性分析 1.2 定量分析 有零点二阶系统的动态性能分析 - 豆丁网 (docin.com)

Python WEB框架FastAPI (二)

Python WEB框架FastAPI &#xff08;二&#xff09; 最近一直在使用fastapi&#xff0c;随着使用的深入发现我对于它的了解还是太少了&#xff0c;以至于踩了一些坑。所以在这里记录一下&#xff0c;愿看到的小伙伴不迷路。 路径传参并发问题 一、路径传参 这是对上一个传参…

TTS | 利用Fastspeech训练LJSpeech语音数据集后英文文本生成语音及代码详解

FastSpeech 基于 Transformer 的前馈网络&#xff0c;用于并行生成 TTS 梅尔谱图。 FastSpeech 模型与自回归 Transformer TTS 相比&#xff0c;梅尔谱图生成速度加快了 270 倍&#xff0c;端到端语音合成速度加快了 38 倍。 项目实现 docker cp LJSpeech-1.1.tar.bz2 torch_…

Kibana 安装部署 - Centos7

Kibana 安装部署 - Centos7 本文介绍一下在Centos7上部署和配置Kibana1、下载 直接去官网地址进行下载即可。【注意】&#xff1a; 一定要下载和你的ES版本一致的Kibana。比如我的ES的版本是 7.9.1&#xff0c;所以我下载的kibana就是7.9.1。下载地址 &#xff1a; https://w…

活动报名|如何使用70万预算从头训练千亿语言大模型

王业全 北京智源人工智能研究院认知模型团队负责人&#xff0c;清华大学博士&#xff0c;中国中文信息学会情感计算专委会委员&#xff0c;2022年被评为AI 2000全球最具影响力人工智能学者&#xff08;自然语言处理领域&#xff09;。主要从事语言大模型、自然语言处理方面的研…

Laravel框架 - 中间件篇

什么是中间件&#xff1f; 在 Laravel 框架中&#xff0c;中间件是一种用于处理 HTTP 请求的组件。它允许你在请求进入 路由 处理 之前 或 之后 执行一些代码逻辑。 中间件的优势和功能 处理身份验证&#xff1a;验证用户是否已经登录或者检查用户是否有权限访问特定的路由 记…

国外发达国家码农是真混得好么?

来看看花旗工作十多年的码农怎么说吧! 美国最大的论坛 Reddit&#xff0c;之前有一个热帖&#xff1a; 一个程序员说自己喝醉了&#xff0c;软件工程师已经当了10年&#xff0c;心里有 好多话想说&#xff0c;“我可能会后悔今天说了这些话。”他洋洋洒洒写了 一大堆&#xff…

Knife4jInsight ,Knife4j 的商业化产品之路

Knife4jInsight &#xff0c;Knife4j 的商业化产品之路 写在前面产品定位产品名称技术架构功能架构产品定价最后 Knife4jInsight &#xff0c;Knife4j 的商业化产品之路 在之前发布的《Knife4j新产品的想法》一文中&#xff0c;我提到想给Knife4j的生态做一些扩展&#xff0c…