java网络原理(二)------TCP确认应答和超时重传

news2024/9/27 7:19:24

一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可靠性的关键。

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

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

相关文章

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板 —— 杭州 2024-03-20 凌晨1:06 code review! 文章目录 CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板1.通用CMakeLists.txt模板2.GPT4给出的改进建议3.git clon…

【爬虫】实战-爬取Boss直聘信息数据

专栏文章索引:爬虫 所用工具: 自动化工具:DrissionPage 目录 一、找到目标数据(2个确定)​ 1.确定目标网页 2.确定目标网址 二、编写代码​ 三、查看数据​ 五、总结 一、找到目标数据(2个确定) 1.确定目标网页 打开目标网站 网站&am…

夜神-安卓9模拟器安装 面具(Magisk)

方法1-自带本地安装 1.模拟器助手添加安卓9 的模拟器 2.启动模拟器并安装Magisk Terminal Emulator.apk、Magisk.apk 新开的安卓9 安装这两个apk 3.打开Magisk Terminal Emulator 1、允许 2、输入m回车 3、输入y回车 4、超级用户授权允许1、 2和3 4 允许后跳到这个…

xAI开发的一款巨大型语言模型(HLM)--Grok 1

在xAI发布Grok的权重和架构之后,很明显大型语言模型(LLM)的时代已经过去,现在是巨大型语言模型(HLM)的时代。这个混合专家模型发布了3140亿个参数,并且在Apache 2.0许可下发布。这个模型没有针对…

Jenkins中支持maven构建遇到仓库报错问题

目的 Jenkins中支持maven构建(Jenkins使用docker安装) 问题 1.构建一个maven项目 2.执行报错 /var/lib/jenkins/local_maven_repo/com/sx/root/1.0.4/root-1.0.4.pom.part.lock (No such file or directory) Failed to transfer Could not transfer artifact co…

【Spring整合QQ个人邮箱】

整合腾讯邮箱&#xff0c;首先需要在腾讯邮箱上开启服务&#xff0c;获取到授权码&#xff1b; 获取步骤如下&#xff1a; 进入设置 进入账号页 开启协议获取授权码 JavaMailSender配置 引入依赖 <!--邮件发送依赖--> <dependency><groupId>org.spring…

EI Scopus双检索| 2024年智能交通与未来出行国际会议(CSTFM 2024)

会议简介 Brief Introduction 2024年智能交通与未来出行国际会议(CSTFM 2024) 会议时间&#xff1a;2024年10月18日-20日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;CSTFM 2024-2024 International Conference on Smart Transportation and Future Mobility(CSTFM 202…

学习笔记Day13:Linux进阶

Linux进阶 Vim——Linux自带的文本编辑器 功能强大 命令模式 使用 vim <file>进入后的默认模式可以上下左右移动光标 方向键/hjkl快速到所在行的开头^/末尾$向下移动30行30j&#xff08;上左右同&#xff09;上下翻页Ctrlf向上&#xff0c;Ctrlb向下翻页快速回到文件第…

网络原理(5)——IP协议(网络层)

目录 一、IP协议报头介绍 1、4位版本 2、4位首部长度 3、8位服务器类型 4、16位总长度 5、16位标识位 6、3位标志位 7、13位偏移量 8、8位生存空间 9、8位协议 10、16位首部检验和 11、32位源IP地址 12、32位目的IP地址 二、IP协议如何管理地址&#xff1f; 1、动…

【STM32嵌入式系统设计与开发】——6矩阵按键应用(4x4)

这里写目录标题 一、任务描述二、任务实施1、SingleKey工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;LED IO初始化函数(LED_Init())&#xff08;3&#xff09;开发板矩阵键盘IO初始化&#xff08;ExpKeyBordInit()&#xff09;&…

HCIA-Datacom H12-811 更新

完整题库及答案解析&#xff0c;请直接扫描上方二维码&#xff0c;持续更新中 在WLAN发展历史中&#xff0c;初级移动办公时代的主要无线协议标准不包括以下哪项&#xff1f; A. 802.11ac B. 802.11g C. 802.11b D. 802.11a 答案&#xff1a;A OSPF协议在进行主从关系选举…

Apipost智能Mock功能详解

在接口开发过程中&#xff0c;Mock功能可以帮助开发者快速测试和验证接口的正确性和稳定性&#xff0c;以便快速迭代和修复问题。Apipost推出智能Mock功能&#xff0c;可以在智能期望中填写一些触发条件&#xff0c;开启后&#xff0c;Apipost会根据已设置的触发条件&#xff0…

Qt教程 — 3.6 深入了解Qt 控件:Display Widgets部件(2)

目录 1 Display Widgets简介 2 如何使用Display Widgets部件 2.1 QTextBrowser组件-简单的文本浏览器 ​2.2 QGraphicsView组件-简单的图像浏览器 Display Widgets将分为两篇文章介绍 文章1&#xff08;Qt教程 — 3.5 深入了解Qt 控件&#xff1a;Display Widgets部件-CSDN…

MyBatis是纸老虎吗?(五)

最近看到这样一则消息《全球首位AI工程师诞生&#xff0c;“码农”未来会消失&#xff1f;》&#xff0c;文章提到百度董事长兼首席执行官李彦宏认为未来将不会存在“程序员”这种职业。行业大佬的这种说法&#xff0c;让我异常恐慌。难道程序员就这样被淘汰了&#xff1f;AI真…

YOLOv8 | 注意力机制 | ShuffleAttention注意力机制 提升检测精度

YOLOv8成功添加ShuffleAttention ⭐欢迎大家订阅我的专栏一起学习⭐ &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680;&#x1f680; YOLOv5涨点专栏&#xff1a;http://t.csdnimg.cn/1Aqzu YOLOv8涨点专栏…

力扣236 二叉树的最近公共祖先 Java版本

文章目录 题目描述代码 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&…

PDF文件如何以数字进行批量重命名?以数字重命名的PDF文件

在日常生活和工作中&#xff0c;我们经常需要处理大量的PDF文件&#xff0c;如文档、报告、合同等。为了更高效地管理这些文件&#xff0c;一个有效的方式就是对它们进行批量命名。批量命名不仅能提高文件的组织性&#xff0c;还能节省大量时间。下面&#xff0c;我们将详细介绍…

【数据分析案列】--- 北京某平台二手房可视化数据分析

一、引言 本案列基于北京某平台的二手房数据&#xff0c;通过数据可视化的方式对二手房市场进行分析。通过对获取的数据进行清冼&#xff08;至关重要&#xff09;&#xff0c;对房屋价格、面积、有无电梯等因素的可视化展示&#xff0c;我们可以深入了解北京二手房市场的特点…

docker学习笔记 三-----docker安装部署

我使用的部署环境是centos 7.9 1、安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 安装完成如下图 2、添加docker的软件信息源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo url地址为如…

飞桨AI应用@riscv OpenKylin

在riscv编译安装飞桨PaddlePaddle参见&#xff1a; 算能RISC-V通用云编译飞桨paddlepaddleopenKylin留档_在riscv下进行paddlelite源码编译-CSDN博客 安装好飞桨&#xff0c;就可以用飞桨进行推理了。刚开始计划用ONNX推理&#xff0c;但是在算能云没有装上&#xff0c;所以最…