java网络原理(二)------TCP确认应答和超时重传
一Tcp协议
TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。
二.TCP协议段格式


知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节,范围是0到65535.如果端口号超过了65535那么这个端口号是不合法的。

tcp的报头是变长的,Tcp报头的最大长度是60字节,前20个字节是固定的,报头最短长度是20字节。选项部分可以有 ,也可以没有,可以是一个,也可以是多个。

当tcp的空间不够用了,可以升级拓展空间。
确认应答
tcp的特点是:有连接,全双工,可靠,面向字节流。那么可靠的传输机制是什么样的呢?确认应答是保证tcp可靠性的重要条件。
比如我给女生发信息,第一条信息是我们一起去吃麻辣烫,第二条是做我女朋友。

正常情况是女生同意和我一起吃麻辣烫但是不做我女朋友,有没有可能是第二条回应先过来,第一条回应后过来

后发先至导致意思全变了,女生拒绝了吃麻辣烫但是答应做我女朋友,那么对我来说更加开心。那么这种后发先至的情况有没有可能存在?一定是存在的,网络从a->b中间的路径很多,每个节点的路由器繁忙程度也不一样,此时就会有后发先至的可能性。解决这个问题针对数据进行编号。

当客户端发送数据时,会把数据转换为一个一个字节,然后对每个字节进行编号,假设第一次发送编号1到1000的,第二次发送1001-2000,第三次2001-3000.

第一次主机A发送编号1-1000的数据,主机B收到后会给A返回一个编号1001的数据(不一定发送的是1到1000的数据,可能编号是1到500,1到600都有可能,但主机B返回的一定是A发送编号的最后一位加1),主机A收到后说明1到1000的数据已经成功发送,下一次发送的数据应该从1001开始。


32位序号是每次发送的第一个字节编号,32为确认序号是最后一个字节编号加1。
搞清楚当前是普通报文和应答报文是很有必要的。

当ack为0时是一个普通报文,此时只有32为序号是有效的。
当ack时1时表示是一个应答报文,这个报文的32为序号和32位确认序号都是有效的。
主机A发送1000到2000的数据时,主机B收到后同样会发送一个TCP数据报,32位确认序号是1001,主机A收到反馈后会把32为确认序号+1和发过来的32为序号进行对比,如果相等说明数据发送成功,如果不相等说明发送失败。保证了数据传输的可靠性。
超时重传
丢包,在网络上很可能出现发一个数据,然后丢了。路由器和交换机就是交通枢纽,数据传输的时要经过很多路由器和交换机,传输的线路结构复杂,传输的数据量也不确定,如果设备太繁忙,后面的数据等待太久就会出现丢包的可能。
超时重传是主机A给主机B发信息,如果主机A收不到确认应答既发送失败,主机A等待一定的时间后会重新给A发送一次。超时重传相等于确认应答进行的重要补充。

不管是应答报文丢失还是数据本身丢失都会重新发送。如果是应答报文丢失,那么同一条信息B收到了2次,本身是有问题的。
接收方收到数据后,需要对数据进行去重,把重复的数据丢失掉。
tcp会在内核中给每个socket对象安排一个内存空间,相当于一个队列,也称为接收缓存区,收到的数据都会被放在内存缓存区中,并且按照序号进行排序,当B主机读数据的时候,会把数据从队列中读走并删除,如果有重复的,下一次主机A发过来的数据编号一定大于队列队首元素的编号,这时候说明上次主机B发给主机A的数据重复发送过去了,把重复的数据删除即可。
为啥重传的时候能传过去?
丢包本来就是一个概率性的问题,假设丢包的概率是10%,那么连续传2次丢包的概率是10%*10%=1%,那么随着重传的次数增多丢包的概率会越来越小,如果重传了很多次都没收到,那么说明是重大网络事故。每次未收到数据都需要等待一定的时间,如果超过等待时间还没有收到,那么就要重传。超时重传不是一个固定的值,会随着时间的轮次增加,而进一步增加。
如果重传到一定的程度会自动放弃。次数就会重置tcp的连接。

rst为1为一个复位报文,如果网络出现严重的故障,复位操作就无法完成,最终放弃连接。
超时重传和确认应答是保证tcp可靠性的关键。
相关文章:
java网络原理(二)------TCP确认应答和超时重传
一Tcp协议 TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。 二.TCP协议段格式 知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节,范围是0到65535.如…...
机器学习:智能时代的核心引擎
目录 一、什么是机器学习 二、监督学习 三、无监督学习 四、半监督学习 五、强化学习 一、什么是机器学习 机器学习是人工智能的一个分支,它主要基于计算机科学,旨在使计算机系统能够自动地从经验和数据中进行学习并改进,而无需进行明确…...
Docker-Image
Docker Docker 镜像是什么为什么需要镜像镜像命令总览docker imagesdocker tagdocker pulldocker pushdocker rmidocker savedocker loaddocker image inspectdocker historydocker importdocker image prunedocker build Docker 镜像是什么 Docker image 本质上是一个 read-on…...
YOLOv8 如何实现多主干特征融合方式 | GhostNet+ShuffleNet / SwinTransformer+ShuffleNet
文章目录 前言模块添加方法双特征提取例子`GhostNet+ShuffleNet` 双主干结构图代码`Swin+ShuffleNet` 双主干结构图代码参数量与计算量1. 什么是YOLO-Magic框架?2. 如何加入这个框架?3. 加入后如何使用框架?4. GitHub组织是什么?...
工作需求ElementUi组件的使用
加油,新时代打工人! 组件源码 <template><div mouseenter"mousein true" mouseleave"mousein false"><el-input type"text" clearable autocomplete"off" v-model"searchDoc.originName…...
自动驾驶轨迹规划之时空语义走廊(一)
欢迎大家关注我的B站: 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.摘要 2.系统架构 3.MPDM 4.时空语义走廊...
[环境配置].ssh文件夹权限修改方法
问题描述: 通过VSCode中的Remote Explorer或者通过CMD等命令行窗口连接远程机器时,会因为提示 "Bad owner or permissions on C:\\Users\\xxx/.ssh/config"而导致失败,最终呈现在VSCode中的效果是,弹窗提示"Could…...
LeetCode刷题【树状数组、并查集、二叉树】
目录 树状数组307. 区域和检索 - 数组可修改406. 根据身高重建队列673. 最长递增子序列的个数1409. 查询带键的排列 并查集128. 最长连续序列130. 被围绕的区域 二叉树94. 二叉树的中序遍历104. 二叉树的最大深度101. 对称二叉树543. 二叉树的直径108. 将有序数组转换为二叉搜索…...
使用POI以OLE对象的形式向excel中插入附件(pdf为例)
前言: 最近在使用easyExcel操作excel文件时,一直想找到一个方法可以往excel中填充附件,但是目前只发现POI可以插入附件,于是将方法记录如下: 实现: 这个方法主要是使用 Apache POI 的 HSSFWorkbook 类来…...
Unity构建详解(2)——SBP的初始设置和脚本编译
【SwitchToBuildPlatform】 核心逻辑如下 EditorUserBuildSettings.SwitchActiveBuildTarget(m_Parameters.Group, m_Parameters.Target); 直接调用切换平台的接口,一般来说,这个步骤不会执行,我们打包时肯定会事先将平台切换好的 【Rebu…...
Matlab使用教程(持续更新)
1. Matlab Matlab被广泛的应用在数据分析,汽车仿真,机器人以及医学研究等众多方面。 它可以帮助我们理解研究复杂的系统。 在60年代和70年代,计算机使得科学家和工程师完成了以前不可能进行的计算;但是需要懂得计算机编程。 C…...
管理能力学习笔记一:角色转身
管理能力学习是为了解决角色转身后面临的更多更复杂的的问题。初晋管理层,需要转变工作习惯,学会分配时间。 角色转身 建立“授权”意识 通过匹配工作内容与下属员工能力,分配工作,避免陷入下属能力不足 -> 不愿授权 -> 下…...
Redis面试题 概要
文章目录 Redis面试题 概要缓存穿透布隆过滤器缓存击穿缓存雪崩数据同步数据持久化数据过期策略Redis的数据淘汰策略Redis + Lau 限流Redis面试题 概要 Redis是一个基于 C 语言开发的开源 NoSQL 数据库,Redis 的数据是保存在内存中的(内存数据库,支持持久化),因此读写速度…...
原型,模板,策略,适配器模式
原型模式 原型模式(创建型模式),核心思想就是:基于一个已有的对象复制一个对象出来,通过复制来减少对象的直接创建的成本。 总结一下,原型模式的两种方法,浅拷贝只会复制对象里面的基本数据类型…...
Ollama 在本地快速启动并执行LLM【大语言模型】
文章目录 1. 什么是Ollama?1.1. SDK库1.2. 提供的api服务1.3. [支持的LLM](https://ollama.com/library)2. 如何安装2.1.下载docker镜像2.2. 启动docker容器3. 如何使用?3.1. 如何加载模型3.2. 使用 Ollama CLI 进行推理3.3. 使用 Ollama API 进行推理参考1. 什么是Ollama?...
ubuntu : 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
往后看,90%能解决你的问题 原文链接:学一下 (suxueit.com) 我相信很多人刚使用ubuntu都遇到过这个问题,如果没有遇到,可能是你运气好使用了正确的软件源 libprotobuf-dev : 依赖: zlib1g-dev 但是它将不会被安装 zlib1g-dev : 依…...
瑞芯微RK3576|触觉智能:开启科技新篇章
更多产品详情可关注深圳触觉智能官网! “瑞芯微,创新不止步!”——全新芯片RK3576即将震撼登场。指引科技风潮,创造未来无限可能!这款芯片在瑞芯微不断创新和突破的道路上,不仅是对过往成就的完美延续&…...
Visual Studio 2013 - 清理
Visual Studio 2013 - 清理 1. 清理1.1. 工程清理1.2. 解决方案清理 References 1. 清理 Debug Release 1.1. 工程清理 (right mouse click on the project) -> 清理 1.2. 解决方案清理 (right mouse click on the solution) -> 清理解决方案 References [1] Yongq…...
1、初识JVM
一、JVM是什么? JVM的英文全称是 Java Virtual Machine,其中文译名为Java虚拟机。它在本质上就是是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 JVM执行流程如下 二、JVM有哪些功能? 2.1 解释和运行 对字节码文…...
JavaScript 权威指南第七版(GPT 重译)(七)
第十六章:用 Node 进行服务器端 JavaScript Node 是 JavaScript 与底层操作系统的绑定,使得编写 JavaScript 程序读写文件、执行子进程和在网络上通信成为可能。这使得 Node 作为以下用途变得有用: 现代替代 shell 脚本的方式,不…...
万象视界灵坛效果展示:浅蓝格点底纹上CLIP文本嵌入的t-SNE降维散点图
万象视界灵坛效果展示:浅蓝格点底纹上CLIP文本嵌入的t-SNE降维散点图 1. 平台概览 万象视界灵坛(Omni-Vision Sanctuary)是一款基于OpenAI CLIP技术的高级多模态智能感知平台。它将复杂的语义对齐过程转化为直观的视觉体验,采用…...
sgayadgsdvwdc
一、OpenAI 1.OpenAI是什么简单来说,OpenAI 大模型 是由美国人工智能公司 OpenAI 开发的一系列大型语言模型(LLMs) 。你可以把它们想象成拥有巨大“知识储备”和“学习能力”的超级大脑,它们被训练用来理解和生成人类语言…...
2001-2024年上市公司供应链地理距离
一家企业的供应商和客户,究竟分布在多远的空间范围内? 这一问题不仅关系到企业采购与销售网络的空间延伸程度,也关系到区域市场整合、要素跨区流动以及企业突破本地市场约束的能力。已有研究表明,企业的供应商选择和客户拓展通常会…...
Python实战:四种图像平滑技术对比与代码实现
1. 图像平滑技术入门指南 第一次接触图像处理时,我被"椒盐噪声"这个词逗笑了 - 想象一下炒菜时不小心把盐和胡椒撒在照片上的场景。实际上,这种黑白杂点的专业术语就叫椒盐噪声,是图像处理中最常见的干扰类型之一。作为计算机视觉的…...
八. 实战:CUDA-BEVFusion部署优化-从预处理到3D检测全流程解析
1. CUDA-BEVFusion部署优化全景解析 在自动驾驶感知系统中,BEVFusion作为多模态融合的标杆算法,其部署效率直接影响着车载计算单元的实时性表现。本次我们将深入CUDA-BEVFusion的完整部署流水线,从数据预处理到3D检测输出的每个环节ÿ…...
PHP农业监控系统可视化升级全记录,从MySQL原始数据到实时热力图的7大关键跃迁
第一章:PHP农业监控系统可视化升级全记录,从MySQL原始数据到实时热力图的7大关键跃迁传统农业监控系统长期依赖静态表格与离散折线图展示温湿度、土壤pH、光照强度等指标,数据更新延迟达5–15分钟,且空间分布关系完全缺失。本次升…...
0基础Go语言Eino框架智能体实战-chatModel
0基础Go语言Eino框架智能体实战-chatModel 摘要:本文详细介绍如何使用Go语言、Eino框架和Gin框架构建一个完整的智能聊天服务。涵盖环境搭建、大模型调用、API创建、日志输出、异常处理等核心知识点,适合零基础入门人工智能应用开发,源码在此…...
JAVA:Spring Boot 集成 RDF4J 实现欺诈技术检测
1、简述 在大数据、知识图谱和金融风控等领域,RDF(Resource Description Framework) 是一种用于表示和查询关联数据的强大工具。RDF4J 是一个流行的 Java 库,用于操作 RDF 数据集,并支持 SPARQL 查询,能够帮助我们进行复杂的欺诈检测。 项目的核心功能: RDF 数据存储:…...
终极TypeORM实战指南:从零到精通的完整TypeScript ORM培训方案
终极TypeORM实战指南:从零到精通的完整TypeScript ORM培训方案 【免费下载链接】typeorm TypeScript & JavaScript ORM for Node.js — supports PostgreSQL, MySQL, MariaDB, SQLite, SQL Server, Oracle, and more. 项目地址: https://gitcode.com/GitHub_T…...
SimpleX协议标准化之路:终极隐私通信的完整指南
SimpleX协议标准化之路:终极隐私通信的完整指南 SimpleX是全球首个完全不需要任何用户标识符的通信平台,为隐私保护设立了新的标准。作为100%隐私设计理念的先行者,SimpleX通过其革命性的协议架构,彻底改变了我们对安全通信的认知…...
