【JavaEE】——四次挥手,TCP状态转换,滑动窗口,流量控制

8e19eee2be5648b78d93fbff2488137b.png

阿华代码,不是逆风,就是我疯

你们的点赞收藏是我前进最大的动力!!

希望本文内容能够帮助到你!!

目录

一:断开连接的本质

二:四次挥手

1:FIN

2:过程梳理

3:能合二为一吗?

三:“三次握手”和“四次挥手”异同

1:相同点

2:不同点

四:TCP连接状态转换

1:TCP状态转换图

2:LISTED

3:ESTABLISHED状态

4:CLOSE_WAIT(面试高频)

(1)过程梳理

(2)作用

5:TIME_WAIT(面试高频)

(1)过程梳理

(2)作用

五:滑动窗口

1:批量传输

2:滑动窗口

3:ack丢包

4:数据丢包

(1)快速重传

注意点①

注意点②

(2)优点

(3)总结

六:流量控制

1:缓存区上限

2:窗口动态变化


一:断开连接的本质

通过上一篇文章的学习,我们知道“三次握手”的目的和本质就是让通信双方能够保存对端的信息,当信息这个数据量过大的时候,就要引用数据结构。

那么断开连接的本质就是把对端的信息从数据结构中进行删除,释放掉

二:四次挥手

1:FIN

同样我们先认识一下TCP数据报包中,6个标志符中的FIN——结束报文段

单词为finish(结束)——>缩写为FIN

在之前的学习中,我们调用通过ServerSocket类调用close方法就会触发FIN,这里的FIN也是在内核中完成。

同样如果我们结束一个进程也会触发FIN【JavaEE】——TCP回显服务器(万字长文超详细)-CSDN博客

2:过程梳理

引入:与“三次握手”中“一定是客户端先主动”不同,“四次挥手”中服务器和客户端两者谁都可以先主动(分手像极了爱情~)这里我们用“客户端先主动”充当例子

(1)客户端发起FIN(结束报文段)

(2)服务器ACK应答并且也发起FIN(结束报文段)

(3)客户端ACK应答

3:能合二为一吗?

引入:在上述图解步骤下,服务器和客户端各自给对方发起FIN,并再给对方返回ACK,“四次挥手”后代表着通信双方“和平分手”。那么这里的②③步骤是否也能“合并”呢?

答案是:可以合并,但是不能100%的合并——“如合~”

如果②③两者发送的时间间隔很长,那么就不能合并

三:“三次握手”和“四次挥手”异同

1:相同点

都是需要有一端先发起SYN/FIN,然后对端在返回ACK

传输顺序:syn/ack/syn/ack     fin/ack/fin/ack

2:不同点

三次握手中中间两次一定能够合并,四次挥手中中间来那个词不一定能够合并

三次握手中一定是客户端先主动,四次挥手中谁先主动都可以

四:TCP连接状态转换

引入:在TCP的连接中,数据结构会保存两端的信息,在这里面就有一个属性,叫做“状态”,操作系统可以根据状态的不同,决定应该对连接做什么

1:TCP状态转换图

铁铁们看到这个图脑壳都大了吧,俺也是,这里我们只介绍几个比较重要的状态即可

2:LISTED

listed(译为:已登录的)表示:服务器这边已经建立好了ServerSocket,并且绑定好了端口号,随时准备接收客户端的连接

步骤一:我们先启动服务器(代码在之前TCP回显服务器那一篇文章,直接复制粘贴即可)

【JavaEE】——TCP回显服务器(万字长文超详细)-CSDN博客

步骤二:打开命令窗口,输入netstat -ano

步骤三:服务器加上限制条件,我们看9090这个在代码里选择连接的端口

3:ESTABLISHED状态

注:established(译为:已建立的)

表示:客户端和服务器已经建立完毕(三次握手完了)

步骤四:客户端和服务器连接进入ESTABLISHED

注:这里双方进入时间差极小,肉眼是看不出来先后顺序的,除非精确查看日志里的时间戳

4:CLOSE_WAIT(面试高频)

close_wait(译为:关闭等待)——谁被断开连接,谁进入close_wait状态

(1)过程梳理

看图客户端发起FIN断开连接(四次挥手),服务器收到后发送ACK应答报文后进入close_wait状态。

这个状态是比较难观察到的,因为服务器发送ACK和FIN的时间间隔极短,即关闭socket文件的时间极短,此时close_wait -> last_ack 状态的切换非常快

(2)作用

阻塞等待客户端数据请求

注:如果发现服务器或者客户端出现大量的CLOSE_WAIT,意味着很可能是socket没有关闭,出bug了。

5:TIME_WAIT(面试高频)

谁主动断开连接,谁进入TIME_WAIT状态

(1)过程梳理

服务器返回给客户端ASK和FIN,客户端收到返回ASK应答后,进入TIME_WAIT状态

(2)作用

如果最后一个ACK丢包了,服务器迟迟收不到ACK,就会重传一个FIN,客户端收到后也会相应重传一个ACK。

TIME_WAIT就为这个过程留下充足的时间,这个等待的时间不是无休止的等待(连机器都不会无限制的等待,更何况爱情呢~),最多2MSL(MSL是系统内核的配置项)

五:滑动窗口

引入:之前我们简单了解一次数据传输,所经历的过程。 

我们可以发现一个问题:发一个数据就要等一个ack,这样的效率是不足以满足现在“信息爆炸”的现状的。

所以我们引出:批量传输这个概念

1:批量传输

顾名思义——先发一个数据,不等ack了,下一个数据接着发,连续发了好多个ack之后,使用同一份时间来等待ack

好处:减少了总的等待的时间内(下面这张图能非常形象的表现出来)

2:滑动窗口

3:ack丢包

看图——

1001的ack应答丢包了,但是2001这个ack没有丢包,主机A收到②这个ack后就知道主机B2001之前的数据都收到了,所以①号ack丢包问题不大,这种情况无需处理,对于TCP传输的可靠性没有影响。

4:数据丢包

(1)快速重传

注意点①

看上图,主机A发送的1001~2000这个数据丢包了,但是2001后面的数据还在发送,此时主机B就会对2001后面的数据,返回ack,多次强调下一个数据是1001,服务器收到三次这个ack之后,就知道1001~2000这个数据丢包了,就会重传(有点超时重传的感脚~)

注意点②

主机B收到1001~2000这个丢包的数据后,直接会跳到索要7001这个数据包了,而不是2001~。

这是因为TCP有一个接受缓冲区,你可以想象成一个队列

(2)优点

上述重传的过程,整体效率非常高,做到了“针对性”的丢包重传,不必重新发送,这种重传叫做“快速重传”

(3)总结

①“确认应答”、“超时重传”、“滑动窗口”、“快速重传”这四种机制并不冲突,可以同时存在。

②短时间发送了很多数据,窗口才滑的起来

③判定丢包的标准是:连续有多个ack索要同一个数据;普通传输判定标准是:ack超时没有到达

六:流量控制

引入:上述滑动窗口可以提高数据的传输效率,窗口越大,更多数据复用同一块时间,效率就更高,那么问题来了,窗口越大越好吗?显然不行

1:缓存区上限

数据到达接收方是先暂时存储在缓冲区当中,等到一定的数量后,接受方在一次性拿(read)出来

试想发送方如果一下子发送数据太快,导致接收方的缓冲区装不下了,就会导致丢包,这时在重传也没用了(因为已经返回ack了)

2:窗口动态变化

与其等待接收方缓存区满了,不如提前感知到,就减慢发送数据的速度,(下面有请我们的老朋友)

16位窗口大小,就能很好的动态控制窗口的大小,通过这个字段,来给发送方反馈发送速度,很明显这个字段对于发送方的报文中没有意义,只有ack报文中才有意义

注:这个16位并不是实际上的大小——在TCP报头中有一个参数叫做窗口扩展因子

       实际窗口大小 = 16位窗口大小* 2^窗口扩展因子

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波 前言MPU6050寄存器代码详解mpu6050.cmpu6050.h 使用说明 前言 本篇文章基于卡尔曼滤波的原理详解与公式推导,来详细的解释下如何使用卡尔曼滤波来解算MPU6050的姿态 参考资料:Github_mpu6050 MPU6050寄存器…

【漏洞复现】SpringBlade menu/list SQL注入漏洞

》》》产品描述《《《 致远互联智能协同是一个信息窗口与工作界面,进行所有信息的分类组合和聚合推送呈现。通过面向角色化、业务化、多终端的多维信息空间设计,为不同组织提供协同门户,打破组织内信息壁垒,构建统一协同沟通的平台。 》》》漏洞描述《《《 致远互联 FE协作办公…

大语言模型被证明没有推理能力,但是它的救星Prolog来了,我准备入坑了

大语言模型(LLM),如GPT等,在自然语言生成上已经展示了非凡的能力,但在推理方面,事情就没那么简单了。它们被证明在逻辑推理上存在严重的短板。大家可能都有类似体验——当你需要LLM帮你推导一个复杂的逻辑问…

cleanmymacX破解版下载 cleanmymacx激活码永久免费 mac电脑免费垃圾清理软件推荐

CleanMyMac,它的字面意思为“清理我的Mac”,是一款Mac清理工具,是MacPaw旗下的一款知名专业Mac系统软件工具,。CleanMyMac X不仅获得了苹果公司的认证,还因其丰富的功能和用户友好型设计,荣获“亚洲设计奖”…

动态量化:大模型在端侧CPU快速推理方案

作为一款高性能的推理引擎框架,MNN高度关注Transformer模型在移动端的部署并持续探索优化大模型在端侧的推理方案。本文介绍权重量化的模型在MNN CPU后端的推理方案:动态量化。动态量化指在运行时对浮点型feature map数据进行8bit量化,然后与…

Linux 和Windows创建共享文件夹实现文件共享

直接开整 1.Windows下创建共享文件夹share右击-》属性—》共享-》选择所有人-》点击共享 2.共享创建完成后可以使他的共享网络地址或者Windows ip地址-推荐使用Windows ip地址有时候 不知道什么原因他Linux解析不了网络地址 共享网络地址 —共享文件夹share 右击-》属性—》共…

基于Java实现(PC)大学班级事务管理系统

courseDesign_Java Java 课设 要求 本次设计要求利用 Java 实现 C/S 模式的大学班级内日常事务管理系统(PC 版,应用于校内网有线网络访问,暂不开发移动端),不得依赖现有的建模框架,使用 swings 技术完成如…

spring-boot学习(2)

上次学习截止到拦截器 1.构建RESfun服务 PathVariable通过url路径获取url传递过来的信息 2.MyBatisPlus 第三行的mydb要改为自己的数据库名 第四,五行的账号密码改成自己的 MaooerScan告诉项目自己的这个MyBatisPlus是使用在哪里的,包名 实体类的定义…

中级课程RHCE

RHCE 一、复习RHCSA1.1 系统安装1.1.1 安装虚拟机1.1.2 第一个快照1.1.3 第二个快照vi编辑器1.1.4 看网关网卡 1.2 文件管理1.3 目录管理1.4 用户管理1.5 权限管理1.6 存储管理1.6.1 标准分区管理实验:1.6.2 逻辑卷管理实验:1.6.3 交换空间管理实验 …

一文探索RareShop:首个面向消费者的RWA NFT商品发售平台

作者:Weilin,PANews 本轮牛市中,加密消费级应用正成为一种热门趋势,比如pump.fun和Polymarket等产品已成为C端用户的明星。加密货币正日益渗透到日常消费者的产品、服务和行为中。这意味着加密货币的使用不再局限于投机交易或去中…

跟着深度学习好书实践tensorflow神经网络

前言 2024 年诺贝尔物理学奖授予了约翰霍普菲尔德 (John Hopfield)和图灵奖得主、AI教父杰弗里辛顿(Geoffrey Hinton),"以表彰他们利用人工神经网络进行机器学习的奠基性发现和发明"。 辛顿在接受电话采访…

Github 2024-10-18Java开源项目日报Top9

根据Github Trendings的统计,今日(2024-10-18统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目8非开发语言项目1Python项目1HTML项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:476 天协议类型:OtherStar…

Mysql(4)—数据库索引

一、关于索引 1.1 简介 数据库索引是数据库管理系统中用于提高数据检索效率的数据结构。索引类似于书籍中的索引,它允许用户快速找到数据,而不需要扫描整个表。 ​ ‍ MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高My…

java幂等控制问题

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&am…

游戏逆向基础-跳出游戏线程发包

附加游戏后下断点 bp ws2_32.send send函数断下后,可以看到数据地址每次都一样 可以说明这个游戏是线程发包,所以直接在数据窗口中转到这个地址,然后对这个地址下硬件写入断点。 下了硬件写入断点后可以一层一层往上面跟,确定写…

集合框架07:LinkedList使用

1.视频链接:13.14 LinkedList使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p142.LinkedList集合的增删改查操作 package com.yundait.Demo01;im…

汽车行业焕新潮流涌动,联众优车以优质服务响应市场变化

随着消费者环保意识的改变及新能源汽车市场的快速发展,我国新能源汽车领域正掀起一股新的消费热潮,而旧车的合理处置问题也随之成为社会各界关注的焦点。今年4月末,商务部、财政部等七大部委携手颁布了《老旧汽车置换补贴实施指南》(以下简称…

学会组装、调试、维修无人机后从事飞手工作技术优势分析

学会组装、调试、维修无人机后从事飞手工作,将带来显著的技术优势,这些优势不仅提升了飞手的综合能力,也增强了其在行业中的竞争力。以下是对这些技术优势的详细分析: 一、深入理解无人机结构与功能 1. 结构认知:通过…

RabbitMQ 作为消息中间件,实现了支付消息的异步发送和接收, 同步和异步相比 响应速度具体比较

在支付场景中,使用 RabbitMQ 实现消息的异步发送和接收与同步处理相比,响应速度和整体系统性能会有显著的不同。以下是同步和异步方式在响应速度上的详细比较: 1. 同步处理方式 在同步模式下,支付消息的处理流程通常是&#xf…

exchange邮件系统ADFS双因素认证技术方案

exchange作为微软公司推出的邮件系统,在企业界有着广泛的应用,通常情况下,exchange为邮箱用户提供的认证方式是基于AD的静态密码认证,虽然微软在AD认证上已经做了大量的安全性优化,但是由于是静态密码方式认证&#xf…