当前位置: 首页 > news >正文

TCP机制之确认应答及超时重传

TCP因为其可靠传输的特性被广泛使用,这篇博客将详细介绍一下TCP协议是如何保证它的可靠性的呢?这得主要依赖于其确认应答及超时重传机制,同时三次握手四次挥手也起到了少部分不作用,但是主要还是由确认应答和超时重传来决定的;注意:这里的可靠传输并不是说100%能把数据发送给接收方,但是至少可以知道数据是否传输到了接收方!

目录

确认应答

超时重传

发的数据丢了

返回的ack丢了

两种机制的总结


确认应答

确认应答是实现可靠传输的核心机制!

A给B发送一条"今晚吃火锅吗"的消息,站在A的角度如何知道消息是否丢包了呢?此时B给A回复了一句"好呀",这样A就可以知道消息正常到达了B,B给A返回的信息就称为应答报文(ack);生活中随处可见这样的应答机制,比如打电话就是可靠传输;现在是单条消息的发送,考虑更复杂一点的情况,多条消息的传输:

为什么会出现上图的第二种情况呢?由于网络上存在"后发先至",这个时候收到消息的顺序就可能存在变数!如何解决这种问题呢,TCP引入了序号和确认序号来区分.

任何一条数据(包括应答报文)都是有序号的,但是确认序号只有应答报文有,普通报文确认序号字段里的值没有意义,一条报文是不是应答报文取决于TCP报文格式中的ACK标志位是否是1;此时引入序号和确认序号后的交互情况如图所示:

此时引入序号后,就不怕顺序乱了,即使顺序乱了,也可以通过确认序号来区分当前应答报文是针对哪个数据进行回复的了;但是实际上TCP序号并不是按照"一条两条"这样的方式来编号的,TCP是面向字节流的,所以TCP的编号也是按照字节来编号的!

确认序号一般是接收到的数据的最后一个字节+1,这里的1001有两层含义:

  • 表示1001之前的数据全部接收到了
  • 表示接收方向发送方索要1001及之后的数据了

总结:

TCP可靠传输能力,最主要是通过确认应答机制来保证的,通过应答报文,就可以让发送方清楚的知道传输是否成功,进一步引入序号和确认序号,针对多组数据进行详细的区分!

超时重传

上述讨论确认应答的时候,只是讨论了顺利传输的情况,如果丢包了呢?数据丢包涉及到两种情况:

  1. 发的数据丢了
  2. 返回的ack丢了

不管是哪种,站在发送方的角度来看,就是没有收到ack,无法区分具体是哪种情况,所以这两种情况一视同仁,都认为是丢包,此时TCP就引入了超时重传机制.

超时重传机制是TCP协议针对丢包情况进行的一种挽救措施,TCP引入了一个时间阈值,发送方在这个时间阈值内如果没有接收到应答报文则默认为是丢包,此时就会重新再发一次同样的数据(简单概括就是超过一定时间还没响应就重新传输),这个时间是可以配置的,并且在不同系统上的默认值都可能存在差异,这里不做讨论.

发的数据丢了

发的数据丢了的话只需要再发送一次即可.

返回的ack丢了

返回的ack丢了的话,这个是一件比较恐怖的事情,如果这是一个支付请求的话,发送方超时重传就会造成进行了两次的支付请求,针对这种重复的数据传输,TCP也做了特殊处理:

TCP存在一个"接收缓冲区"这样的存储空间(接收方操作系统内核里的一段内存,每个TCP的socket对象,都有一个接收缓冲区),主机B收到主机A的数据其实就是B的网卡读到数据了,然后把这个数据放到B的对应socket的接收缓冲区中,后续应用程序使用getInputStream,进一步使用read就是从接收缓冲区来读数据,该缓冲区不仅有去重的作用,同时也有排序的作用.

总结:

由于去重和重排机制的存在,发送方只要发现ack没有按时到达,就会重传数据,即使重复了,即使顺序乱了,都没事,接收方都能很好的处理好,去重和排序都依赖TCP报头的序号!

两种机制的总结

可靠传输是TCP最核心的部分.

TCP的可靠传输就是通过 确认应答 + 超时重传 来进行体现的;其中确认应答描述的是传输顺利的情况,超时重传描述的是传输出现问题的情况,这两者相互配合,共同支撑的TCP的可靠性!

相关文章:

TCP机制之确认应答及超时重传

TCP因为其可靠传输的特性被广泛使用,这篇博客将详细介绍一下TCP协议是如何保证它的可靠性的呢?这得主要依赖于其确认应答及超时重传机制,同时三次握手四次挥手也起到了少部分不作用,但是主要还是由确认应答和超时重传来决定的;注意:这里的可靠传输并不是说100%能把数据发送给接…...

Openharmony3.2 源码编译(ubuntu 22.04) 过程记录

OS: ubuntu 22.04 x64 1. 下载源码 1.1 安装码云repo工具 sudo apt install python3-pip git-lfsmkdir ~/bin curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 -o ~/bin/repo chmod ax ~/bin/repo pip3 install -i https://repo.huaweicloud.com/repository/p…...

PostgreSQL 数据库使用 psql 导入 SQL

最近我们有一个 SQL 需要导入到 PostgreSQL ,但数据格式使用的是用: -- -- TOC entry 7877 (class 0 OID 21961) -- Dependencies: 904 -- Data for Name: upload_references; Type: TABLE DATA; Schema: public; Owner: - --COPY public.upload_refere…...

容器编排学习(三)端口映射与Harber镜像仓库介绍

一 对外发布服务(端口映射) 1 概述 新创建容器的IP 地址是随机的 容器在重启后每次 IP 都会发生变化 容器服务只有宿主机才能访问 如何才能使用容器对外提供稳定的服务? 容器端口可以与宿主机的端口进行映射绑定 从而把宿主机变成对应的服务&a…...

Day_13 > 指针进阶(2)

目录 1.函数指针数组 2.指向函数指针数组的指针 3.回调函数 qsort()函数 代码示例 void* 4.结束 今天我们在进阶指针的基础上,学习进阶指针的第二部分 1.函数指针数组 首先我们回顾一下指针数组 char* arr[5]://字符指针数组 - 数组 - 存放的是字符指针 in…...

对Transformer中的Attention(注意力机制)的一点点探索

摘要:本文试图对 Transformer 中的 Attention 机制进行一点点探索。并就 6 个问题深入展开。 ✅ NLP 研 1 选手的学习笔记 简介:小王,NPU,2023级,计算机技术 研究方向:文本生成、摘要生成 文章目录 一、为啥…...

车内信息安全技术-安全技术栈-软件安全

操作系统 1.隔离技术 信息安全中的隔离技术通常指的是将不同安全级别的信息或数据隔离开来,以保护敏感信息不受未授权的访问或泄露。在操作系统中,常见的隔离技术包括:虚拟化技术:通过虚拟化软件,将物理计算机分割成多个独立的虚拟计算机,每个虚拟计算机都可以运行独立的…...

Redis常见命令

命令可以查看的文档 http://doc.redisfans.com/ https://redis.io/commands/ 官方文档(英文) http://www.redis.cn/commands.html 中文 https://redis.com.cn/commands.html 个人推荐这个 https://try.redis.io/ redis命令在线测试工具 https://githubfa…...

Android Studio实现一笔画完小游戏

文章目录 一、项目概述二、开发环境三、详细设计3.1、数据库设计3.2、普通模式3.3、随机模式3.4、关卡列表 四、运行演示五、项目总结六、源码获取 一、项目概述 Android一笔画完是一种益智游戏,玩家需要从起点开始通过一条连续的线,将图形中所有的方块…...

【Python 程序设计】数据人员入门【02/8】

一、说明 介绍如何管理 Python 依赖项和一些虚拟环境最佳实践。 以下文章是有关 Python 数据工程系列文章的一部分,旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。迄今为止,本初学者指南包括&#…...

学习笔记——树上哈希

普通子树哈希 树上的很多东西都是转化成链上问题的,比如树上哈希 树上哈希,主要是用于树的同构这个东西上的 什么是树的同构? 如图,不考虑节点编号,三棵树是同构的 将树转化成链,一般有两种方式&#xf…...

Opencv快速入门教程,Python计算机视觉基础

快速入门 OpenCV 是 Intel 开源计算机视觉库。它由一系列 C 函数和少量 C 类构成, 实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也 可以使用某些外部库。 OpenCV 对非…...

laravel 报错误信息 Carbon\Exceptions\InvalidFormatException

Carbon\Exceptions\InvalidFormatException Unexpected data found. at vendor\nesbot\carbon\src\Carbon\Traits\Creator.php:687 683▕ return $instance; 684▕ } 685▕ 686▕ if (static::isStrictModeEnabled()) { ➜ 687…...

UI自动化之混合框架

什么是混合框架,混合框架就是将数据驱动与关键字驱动结合在一起,主要用来回归业务主流程,将核心流程串联起来。 上一篇我们写到了关键字驱动框架,关键字驱动框架是针对一个业务场景的单条测试用例的。 我们以163邮箱的登录到创建…...

SQL创建用户-非DM8.2环境(达梦数据库)

DM8:达梦数据库SQL创建用户-非DM8.2环境 环境介绍 环境介绍 在没有图形化界面,或者想快速创建用户,可以使用一下SQL语句;将其中的 CESHI 替换为要创建的用户名即可,默认创建了数据表空间,索引表空间,文件大…...

Thread类中run和start的区别

答:调用线程类中的 start 方法,才开始创建并启动线程,而线程被回收,则是要执行完线程的入口方法(对于主线程来说,则是要执行完 main 方法),这里要回收线程则是要将(&…...

ElementUI浅尝辄止35:Checkbox 多选框

一组备选项中进行多选 1.如何使用? 单独使用可以表示两种状态之间的切换,写在标签中的内容为 checkbox 按钮后的介绍。 //在el-checkbox元素中定义v-model绑定变量,单一的checkbox中,默认绑定变量的值会是Boolean,选…...

讲讲如何用IDEA开发java项目——本文来自AI创作助手

使用IDEA开发Java项目,您可以按照以下步骤进行操作: 下载并安装IntelliJ IDEA 您可以从JetBrains官网下载并安装最新版的IntelliJ IDEA。 创建项目 启动IDEA,在欢迎界面中选择“Create New Project”或者在主菜单中选择“File”->“Ne…...

Kafka3.0.0版本——消费者(Range分区分配策略以及再平衡)

目录 一、Range分区分配策略原理1.1、Range分区分配策略原理的示例一1.2、Range分区分配策略原理的示例二1.3、Range分区分配策略原理的示例注意事项 二、Range 分区分配策略代码案例2.1、创建带有4个分区的fiveTopic主题2.2、创建三个消费者 组成 消费者组2.3、创建生产者2.4、…...

WeiTools

目录 1.1 WeiTools 1.2 getTime 1.3 getImageView 1.4 StringEncode 1.4.1 // TODO Auto-generated catch block WeiTools package com.shrimp.xiaoweirobot.tools;...

自定义季度数据聚合:tsibble实践

在处理时间序列数据时,通常我们会按季度或年份进行聚合。但有时候,业务需求可能需要我们按照一些非传统的季度区间来聚合数据。本文将介绍如何使用R语言中的tsibble包,结合一个实际案例,展示如何实现自定义的季度数据聚合。 问题描…...

017、提升Agent的可靠性:错误处理与异常捕获机制

017、提升Agent的可靠性:错误处理与异常捕获机制 你的Agent在调用外部API时突然超时,在解析用户输入时遇到意外格式,甚至因为一个简单的除零错误而彻底崩溃——这些不是“如果”,而是“何时”会发生的问题。本文将为你构建Agent的免疫系统,让它从脆弱不堪变得坚如磐石。 前…...

TVA在汽车动力电池模组全流程检测中的应用(8)

前沿技术背景介绍:AI 智能体视觉系统(TVA,Transformer-based Vision Agent),是依托Transformer架构与因式智能体所构建的新一代视觉检测技术。它区别于传统机器视觉与早期AI视觉,代表了工业智能化转型与视觉…...

GPT5.5数据分析与商业智能实战从入门到提效2026最新

想稳定体验GPT-5.5的数据分析能力,推荐直接用库拉,这是一个AI聚合平台,已上线GPT-5.5,国内直连,注册即用。GPT-5.5来了,数据分析的工作方式正在被重写4月24日,OpenAI正式发布GPT-5.5。官方称这是…...

基于LLM与OpenClaw的AI智能体架构实践:构建自动化学生助理

1. 项目概述:一个能主动思考的AI学生助理如果你是一名学生,或者曾经是,你一定对那种被各种作业、实验报告和项目截止日期追着跑的感觉深有体会。日历上密密麻麻的标记,稍不留神就可能错过一个重要的提交时间。传统的待办事项应用需…...

Upload-Labs靶场通关前必读:从安装到漏洞分类的完整学习路线

Upload-Labs靶场通关实战指南:从漏洞解析到防御体系构建 当你第一次打开Upload-Labs靶场界面,面对20个看似相似却又各不相同的文件上传关卡时,是否感到无从下手?这个看似简单的靶场实则暗藏玄机,涵盖了从基础绕过到高级…...

思源宋体7字重:开发者如何用免费字体解决中文排版三大难题

思源宋体7字重:开发者如何用免费字体解决中文排版三大难题 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文网页字体渲染发愁吗?每次看到中文字体在不…...

告别抓包失败!雷电模拟器+安卓7.0+系统级证书安装保姆级教程(Fiddler/Charles通用)

雷电模拟器HTTPS抓包终极指南:系统级证书安装与疑难攻克 每次调试移动应用时,看到HTTPS流量那一行行"unknown"是不是血压瞬间拉满?作为移动端开发者,我们80%的调试时间都耗在和抓包工具的搏斗上。而安卓7.0引入的网络安…...

10分钟掌握正则表达式:从入门到精通的完整指南

10分钟掌握正则表达式:从入门到精通的完整指南 【免费下载链接】learn-regex Learn regex the easy way 项目地址: https://gitcode.com/gh_mirrors/le/learn-regex 正则表达式(regex)是一种强大的文本模式匹配工具,广泛应…...

AI复杂性分布外泛化:系统2推理能力突破

1. 复杂性分布外泛化:AI推理能力的新范式在评估人工智能系统时,我们常常陷入一个认知陷阱:将模型在熟悉数据集上的优异表现等同于真正的智能。这种现象在大型语言模型(Large Language Models, LLMs)时代尤为明显——模型能够流畅地回答常见问…...