JavaEE初阶---网络原理值TCP篇(三)

news2024/11/7 20:50:20

文章目录

  • 1.延时应答机制
  • 2.捎带应答
  • 3.面向字节流---粘包问题
    • 3.1问题引入
    • 3.2解决方法
  • 4.异常情况的处理
  • 5.TCP的心跳机制
  • 6.TCP/UDP的对比

1.延时应答机制

例如我们的这个剩余空间大小10kb,如果我们直接返回ack,这个发送方的窗口大小只能是10kb,但是如果我们进行延时,例如我们演示200ms,这个时间里面,我们的这个接收方就处理2kb,这个时候我们的返回的ack就是12kb,这个时候我们的发送方的窗口大小就可以调大一些,提高传输效率;

2.捎带应答

这个是在我们的延时应答的基础上面的;我们的这个延时应答就会导致这个ack返回的这个时间不是一触即发的,而是需要等待一部分时间,当我们的这个等待时间到了这个socket执行这个close操作的时候,我们的这个ack和fin就会被一起返回去,这个就是顺路的事情,因此我们把这个情况称之为捎带应答

3.面向字节流—粘包问题

3.1问题引入

当我们的这个应用层的数据包被按照下面的这个方式进行传输的时候:

在我们的这个接受方的缓冲区,实际上就是连接在一起的,这个时候我们的接收方根本就不知道这个数据是一次方送过来的还是多次发送过来的,至于我们是三次发送过去的这个情况,我们的这个接收方根本就不知道;

image-20241031092549839

3.2解决方法

1)引入分隔符:

例如下面的这个就是引入我们的这个\n作为分隔符,这个时候我们的这个接收方从这个缓冲区进行这个数据的读取的时候,就知道这个是几个部分;

image-20241031092817123

2)引入长度:

我们的这个发送方进行这个aaa发送的时候,标记上这个数据的长度3,其他的发送的数据包也是以此类推,这样的话我们的这个接收方从这个数据缓冲区里面读取数据的时候,就知道根据这个标识的长度知道一次性读取的这个数据的长度----有效的解决我们的粘包问题;

image-20241031092926101

4.异常情况的处理

进程崩溃:这个时候进程结束了,就会触发我们的这个fin,直接进行这个正常的4次挥手的过程;

主机关机:这个时候先会触发这个终止进程,此时就会发送这个fin,对方收到之后就会返回这个fin和ack,实际上就是我们的四次挥手,但是这个时候我们的继承已经终止了,这个系统可能已经关闭了,如果这个时候的系统已经关闭了,我们的这个ack和fin来迟了,这个时候我们的最后的一个(也就是4次挥手里面的第四次)ack也就无法响应,我们的这个接收方就会认为是自己的这个相应对方没有收到,这个时候就会不断的进行重传,但是这个时候我们的对端已经挂掉了,因此他在重新传输几次之后就知道不是自己的问题,这个时候对端也会断开连接(这个过程的理解需要不断的结合我们上面介绍的这个四次挥手的过程);

掉电关机:这个就是一瞬间的情况,我们的彼此根本就不知道是什么情况,下面分为两个情况进行考量:

1)我们的接收方掉电:我们的发送方等待返回的这个ack,但是因为我们的接收方已经因为这个掉电挂掉了,因此这个时候就会触发超时重传,触发我们的这个TCP里面的重置链接,发起“复位报文段”;

2)我们进行数据发送的这一方掉电:这个时候我们的这个接收方还在等待我们发送的数据,这个时候我们的接收方没有办法确认这个是数据没有发送还是我们的这个发送方已经挂掉了;

在我们的这个TCP里面,提供了这个心跳包的机制:就是不携带任何的业务逻辑,希望得到对方的一个应答,如果对方没有进行应答,而且我们重复多次之后都是没有相应的,我们的这个接收方就视为这个发送方挂掉了,这个时候就会释放连接;

网线断开:这个情况下实际上和这个掉电的情况基本一致:

A----------------------------B之间通信:

我们的这个时候两个之间正在进行通信,这个时候网线断开:

A就会不断的进行超时重传–》连接重置----》单方向的是释放这个链接;

B会触发这个心跳包----》发送端没有进行任何的响应—》单方面的释放连接;

5.TCP的心跳机制

我们进行日常的开发的时候,经常会遇到这个心跳机制(尤其是在这个分布式系统上面)

如何识别这个机器是不是挂掉了,这个时候就可以使用我们的心跳进行检测,一般我们后面用到的这个心跳,都是在这个应用程序里面自主实现,而不是像这个TCP里面的这个心跳;

两个的区别就是:

自主实现的心跳很敏感,时间很短,但是我们自己里面的这个TCP的心跳机制周期很长;

6.TCP/UDP的对比

1)TCP的优势是可靠传输,适用于绝大多数的场景;

2)UDP的优势是进行高效率的传输,适合于可靠性不敏感,性能要求高的场景------局域网内部之间进行的通信,因为一个局域网里面自己进行通信的时候,出现丢包的情况不大,我们这个时候希望的是高效的传输数据;

3)如果是传输比较大的数据包,TCP优先,因为我们的这个UDP有64位传输大小限制;

4)广播传输:优先使用UDP,UDP天然支持广播传输,如果使用TCP的话,需要我们自己写代码;

==什么是广播?==就是我们的数据需要发送给这个局域网里面的所有的设备,这个就是广播;

例如我们生活里面的这个投屏:我们的手机向局域网里面的所有设备都发送这个数据包,询问:你们谁是电视,谁可以接受我的投屏,电视这个时候会进行回应,并且把自己的这个端口号和IP告诉了手机,手机就可以实现投屏,在这个过程里面,我们的这个手机寻找投屏设备的时候:把数据包发送给这个局域网里面的所有的设备,这个就是广播的过程;

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

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

相关文章

慢sql优化和Explain解析

要想程序跑的快,sql优化不可懈怠!今日来总结一下常用的慢sql的分析和优化的方法。 1、慢sql的执行分析: 大家都知道分析一个sql语句执行效率的方法是用explain关键词: 举例:sql:select * from test where bussiness_…

Java后端面试内容总结

先讲项目背景,再讲技术栈模块划分, 讲业务的时候可以先讲一般再特殊 为什么用这个,好处是什么,应用场景 Debug发现问题/日志发现问题. QPS TPS 项目单元测试,代码的变更覆盖率达到80%,项目的复用性高…

【10月】新款3DMAX插件排行榜

根据近期的行业动态和插件发布情况,整理并推荐一些在10月或近期内受到关注的3DMAX新款插件。 1. MaxToCAD插件 功能特点:允许用户将3D MAX中的三维模型快速转换为CAD软件可识别的二维平面图,适用于需要将3D设计导出为施工图或平面图的设计师…

【数据结构与算法】第7课—数据结构之队列

文章目录 1. 队列1.1 什么是队列1.2 队列的结构1.3 队列初始化1.4 队列入栈1.5 出队列1.6 查找队列有效元素个数1.7 取队头和队尾数据1.8 销毁链表 2. 用两个队列实现栈3. 用两个栈实现队列4. 循环队列 1. 队列 注:文中Queue是队列,Quene是错误写法 1.1 …

window快捷键:window + v 打开剪切板历史记录 / 非常实用

一、剪切板历史记录功能介绍 1.1、window v 打开剪切板历史记录 / 文字、图片都可记录 1.2、window v 最近使用 1.3、window v 表情符号 1.4、window v GIF 1.5、window v 颜文字 1.6、window v 符号 二、欢迎交流指正

手机功耗异常大数据看板建设

一、背景 基于《软件绿色联盟应用体验标准—功耗标准》监控软硬件资源功耗异常类别与趋势 上述为手机功耗问题的前世今生及我们应该在哪些维度建立功耗的埋点监控支持分析​ 二、目标 手机端侧建立alarm\wakelock\wakeup\gps\bt\cpu\sensor\netTriffic等功耗相关的使用次数和时…

多彩电子显示屏

在仓储管理的广阔舞台上,一款名为“仓库46代”的创新标签悄然登场,它不仅是技术的飞跃,更是智慧仓储的新篇章。这款标签,以其独特的515.6x260x29mm身材,优雅地融入了繁忙的仓库环境,其沉稳的黑色外观&#…

sklearn|机器学习:决策树(一)

文章目录 sklearn|机器学习:决策树(一)(一)概述(二)实战1. 环境配置2. sklearn 中的决策树(1)模块 sklearn.tree(2)sklearn 基本建模流…

服务器Linux系统网络重启失败 Restarting network (via systemctl):......

网络重启时报错: Linux 网络服务重启失败可能由网络配置工具冲突或配置错误引起。 冲突问题:在 Linux 中,network 和 NetworkManager 这两个工具可能会冲突,禁用 NetworkManager 可以尝试解决该问题。 先停止服务 systemctl s…

域控操作二十四:主域故障辅域接替

模拟环境:上海DC1故障无法开机,导致只有一个DNS的电脑无法上网(实际可以添加DC2但是为了实验就不说了) FSMO还在DC1上 使用powershell把角色迁移到DC2 ntdsutil roles connections connect to server DC2SHA.whbk.cn quitSeize …

边缘AI计算技术应用-实训解决方案

一、解决方案架构 1.1 来自产业的项目 实训项目全部是基于产业的商业化项目,经过角色拆解、任务拆解、代码拆解、部署流程拆解等过程,讲其标准化为教师可以带领学生完成的实训内容,真正帮助学生接触产业前沿技术和工作内容,提升就…

贪心算法习题其二【力扣】【算法学习day.18】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…

【Axure原型分享】颜色选择器——填充颜色

今天和大家分享颜色选择器——填充颜色的原型模板,点击颜色区域可以弹出颜色选择器,点击可以选择对应颜色,颜色区域会变色我们选择的颜色,具体效果可以观看下方视频或者打开预览地址体验。 【原型效果】 【Axure高保真原型】颜色…

SQL实战训练之,力扣:1843. 可疑银行账户

目录 一、力扣原题链接 二、题目描述 三、建表语句 四、题目分析 五、SQL解答 六、最终答案 七、验证 八、知识点 一、力扣原题链接 1843. 可疑银行账户 二、题目描述 表: Accounts ---------------------- | Column Name | Type | ---------------------- | acco…

软件系统交付阶段必备文档,验收体系配套资料,软件系统各阶段各步骤相关配套资料,各类软件建设方案(word,ppt)

软件文档交付清单是指在软件开发项目完成后,开发团队需要准备的一份详细清单,用于确保交付的软件产品符合客户需求并达到预期的质量标准。以下是软件文档交付清单中可能包含的一些关键要素 软件资料清单列表部分文档清单:工作安排任务书&…

Day07爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? class Solution {public int climbStairs(int n) {if (n 1) return 1;if (n 2) return 2;return climbStairs(n - 1) climbStairs(n - 2);} }用…

【51单片机】串口通信原理 + 使用

学习使用的开发板:STC89C52RC/LE52RC 编程软件:Keil5 烧录软件:stc-isp 开发板实图: 文章目录 串口硬件电路UART串口相关寄存器 编码单片机通过串口发送数据电脑通过串口发送数据控制LED灯 结束语 串口 串口是一种应用十分广泛…

c盘满了怎么清理垃圾而不误删?6招轻松清理C盘,快来试试

c盘满了怎么清理垃圾而不误删?相信平时工作生活中离不开电脑,随着使用电脑时间就了,C 盘的空间会不断被占据,进而致使系统运行变得迟缓,甚至出现卡顿现象。因此,定期清理 C 盘的是非常重要的。很多电脑小白…

Android 托管 Github Action 发布 Github Packages ,实现 Mvn 免费自动化托管

自从多年前 JCenter 关闭服务之后,GSY 项目版本就一直发布在 Jitpack 上,如今每个月也都有大概 10w 左右下载,但是近年来时不时就会出现历史版本丢失的问题,而且有时候还不是某个具体版本丢失,而是版本里的某几个依赖突…

MATLAB中pinv函数用法

目录 语法 说明 示例 使用伪逆求解线性方程组 pinv的功能是得到矩阵的Moore-Penrose 伪逆。 语法 B pinv(A) B pinv(A,tol) 说明 B pinv(A) 返回矩阵 A 的 Moore-Penrose 伪逆。 B pinv(A,tol) 指定容差的值。pinv 将 A 中小于容差的奇异值视为零。 示例 使用伪逆…