前端网络---三次握手四次挥手

三次握手

指建立tcp链接时,需要客户端和服务器总共发送三个包,主要作用是确认双方接受和发放能力是否正常,初始化 客户端处于Closed状态,服务端处于 Listen 状态

在三次握手开始之前,先对字段有所了解

1、seq 序列号 随机数 seq = x 每次连接都会携带一个自己的随机序列号

2、ack 确认号 ack = seq + 1 确认上一次收到了序列号 除了第一次连接都会携带

3、ACK 确认收到序列号 ACK = 1 除了第一次连接都会携带

4、SYN 发起一个新连接 SYN = 1

5、FIN 释放一个连接 FIN = 1

第一次握手🤝  客户端给服务器发送一个TCP报文

1、SYN = 1建立一个新的链接

2、seq = x 随机序列号

此时客户端处于SYN-SEND状态

第二次握手🤝   服务器收到SYN报文后,回复浏览器

1、SYN = 1同意建立一个新的链接

2、ACK = 1确认收到序列号

3、ack = x + 1确认收到序列号是x

4、seq = y 随机序列号

服务端进入SYN-REVD阶段

第三次握手🤝    浏览器收到报文后回复服务器

1、ACK = 1确认收到序列号

2、ack = y + 1确认收到序列号是y

3、seq = x+1 上一次浏览器发送的 seq = x 基础上 + 1

服务器和浏览器同时进入 ESTABLISHED 状态

关于三次握手可能问到的面试题

三次握手的作用

1、确认服务器和客户端的接受和发送能力正常

2、指定自己的初始化序列号,为后面的可靠传输做准备

什么是半连接队列

1、服务器第一次收到客户端的SYN后,处于SYN-REVD状态,此时双方还没有建立连接,服务器会把此时情况下的连接放到队列里,我们把这种队列称为半连接队列

什么是全连接队列

1、当双方已经完成三次握手,此时的请求连接会放到全连接对列里,如果队列满了会出现丢包的情况

四次挥手

1、客户端和服务器要断开连接时进行的四次挥手

2、刚开始双方都处于 ESTABLISHED 状态

第一次挥手🙋   客户端发起断开连接

1、FIN = 1 关闭连接

2、seq = q 随机序列号

客户端处于FIN-WAIT-1状态

第二次挥手🙋   服务器收到客户端的断开请求,开始处理内部处理操作

1、ACK = 1 确认收到序列号

2、ack = q + 1 确认收到序列号q

3、seq = w 随机序列号

服务器进入 COLSE-WAIT 处理阶段

客户端进入 FIN-WAIT-2 阶段 等待服务器处理

第三次挥手🙋   服务器处理完毕,回复客户端

1、ACK = 1 确认收到序列号

2、ack = q + 1 确认收到序列号q

3、seq = v 随机序列号

4、FIN = 1 关闭连接

服务器进入 LAST-ACK 阶段 等待浏览器确认收到

第四次挥手🙋   客户端收到服务器报文,回复服务器

1、ACK = 1 确认收到序列号

2、ack = v + 1 确认收到序列号v

3、seq = q + 1 

浏览器进入 TIME-WAIT 阶段,此时TCP未释放掉,等待 2MSL(毫秒),等待服务器收到自己的报文,然后进入 COLSE 阶段

为什么是四次 挥手

客户端发送FIN报文后,表示客户端当前没有数据需要处理,而不代表服务端没有数据需要处理。此时需要服务端回复ACK确认收到报文后,开始处理内部数据。当内部数据处理完后,再回复FIN可以关闭连接

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

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

相关文章

JetBrains Rider 2024.1.1 .NET集成开发环境 mac/win

JetBrains Rider是一个新的跨平台的基于Inte lliJ平台和ReSharper的. NET集成技术开发工作环境。 Rider提供了大量人工智能系统代码进行编辑管理功能,如不同类型的代码可以完成、自动设备名称发展空间设计导入、自动通过插入大括号和突出研究显示信息匹配作为分隔符…

torchEEG工具箱

文章信息: 题目:TorchEEGEMO:基于脑电图的情绪识别深度学习工具箱 期刊:Expert Systems with Applications 环境:pytorch 1.11.0 CUDA 11.3 摘要: ​ 一个python工具箱TorchEEG,将工作流程分为五个模块…

软考 - 系统架构设计师 - 架构风格例题

问题一: 什么是软件架构风格? 软件架构风格指特定软件系统组织方式的惯用模式。组织方式描述了系统的组成构件和这些构件的组织方式。惯用模式反映了众多系统所共有的结构和语义。 集成开发环境与用户的交互方式 (实际上询问在交互方面&am…

干货-PMP常考知识点,都给你们汇总到这里了

PMP认证考试考来考去,其实就是那些知识点。把这些知识点吃透了,你会发现做题稳准狠。不仅速度快,正确率也有很大的提升。 我们结合了10几年PMP备考辅导经验,给大家梳理了这些PMP常考的知识点集锦,希望能帮到大家&#…

css中all 的使用记录

all 在 CSS 中是一个特殊的属性值,它允许我们重置元素或元素父级的所有属性到其初始值、继承的值或取消设置的值。这一属性非常有用,特别是在需要快速重置多个属性的情况下,它避免了逐一设置每个属性的繁琐过程。 先看一下浏览器兼容性&#…

【SAP HANA 15】SQL锁表 (查询,解锁)

锁表查看 --锁表检查语句 SELECT C.CONNECTION_ID,PS.STATEMENT_STRINGFROM M_CONNECTIONS C JOIN M_PREPARED_STATEMENTS PSON C.CONNECTION_ID PS.CONNECTION_ID AND C.CURRENT_STATEMENT_ID PS.STATEMENT_IDWHERE C.CONNECTION_STATUS RUNNINGAND C.CONNECTION_TYPE Re…

第二届数据安全大赛暨首届“数信杯”数据安全大赛数据安全积分争夺赛-东区预赛部分WP

这里写目录标题 检材下载:1.理论题2.数据安全:pb:Sepack: 3.数据分析:数据分析(1)数据分析1-1:数据分析1-2:数据分析1-3: 数据分析(3)数据分析3-1:数据分析3-2&#xff1…

2024年04月18日优雅草便民tools开源-git以及dcloud同步-长期更新

优雅草小工具-数据来自优雅草api赋能 优雅草小工具-数据来自优雅草api赋能-优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益工具,2024年1月17日正式发布v1.0.0版本,本工具为了方便大众免费使用,本生活小工具会陆续加入…

Oracle——领先的企业级数据库解决方案

一、WHAT IS ORACLWE: ORACLE 数据库系统是美国 ORACLE 公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S 体系结构的数据库之一,ORACLE 通常应用于大型系统的数…

C#基于SSE传递消息给Vue前端实现即时单向通讯

一、简述 通常前端调用后端的API,调用到了,等待执行完,拿到返回的数据,进行渲染,流程就完事了。如果想要即时怎么办?如果你想问什么场景非要即时通讯,那可就很多了,比如在线聊天、实…

gpt能生成ppt吗

gpt能生成ppt吗 GPT是一个高度通用的工具,适用于多种场景和领域,制作ppt只是它强大功能的冰山一角,具体包括: 信息查询与解释: 提供科学、技术、历史、文化等领域的详细解释和背景信息。 解答疑问,帮助…

前端css中transition的使用

前端css中transition的使用 一、前言二、transition的4个属性三、例子1.源码12.源码1运行效果 四、结语五、定位日期 一、前言 CSS中的transition(过渡),根据字面意思就可以理解成一种变化状态的过程。当我们有一个方形,我们想让…

Java在MySQL数据报错Data truncation: Data too long for column ‘**‘ at row 1 处理

问题 在Java SpringBoot MyBatis 框架的项目中,一切正常,不过在一个接口的参数字段传入过大的数据就会报此错误: 请求常:org.springframework.dao.DataIntegrityViolationException: Error updating database.Cause:com.mysql.cj.jdbc.excep…

漫画项目管理 | 遇到强势甲方的不合理项目需求,我该怎么办?

🤷‍♂️ 遇到甲方强烈要求不合理需求怎么办? 🤸‍♂️看似离谱的功能客户却一定要加? 🤹‍♂️时间紧任务重,甲方却“什么都想要“? 🤾‍♂️明明初稿很完美,却被要求改来改去?** 👨‍…

学习STM32第十六天

RTC实时时钟 一、简介 RTC是一个独立的BCD格式定时器,提供一个时钟日历,两个可编程报警中断,一个具有中断功能周期性可编程唤醒标志,RTC和时钟配置系统处于后备区域。 通过两个32位寄存器以BCD格式实现秒、分钟、小时&#xff08…

Qt日志使用

QsLog使用 这篇讲qt的日志还是比较好的,可以在自己的函数里面配置这个日志框架实现自己所需的功能。 我接触的项目里面,假如有个函数功能执行错误了,我希望可以快速定位到这个错误,这个时候就需要到了日志,我咨询了有经…

使用Python脚本检测服务器信息并定时发送至管理员邮箱

在日常的系统管理工作中,监测服务器的资源占用情况至关重要,我们需要及时获得通知以便采取相应措施。我新装了一台UbuntuServer服务器,写了一个可以定期收集服务器的CPU、内存、网络和磁盘信息,并通过邮件将这些信息发送给管理员的…

Seal^_^【送书活动第一期】——《Vue.js+Node.js全栈开发实战(第2版)》

Seal^_^【送书活动第一期】——《Vue.jsNode.js全栈开发实战(第2版)》 一、参与方式二、本期推荐图书2.1 前 言2.2 作者简介2.3 图书简介2.4 本书特色2.5 编辑推荐2.6 书籍目录 三、正版购买 一、参与方式 1、关注博主的账号。 2、点赞、收藏、评论博主的…

C++练级之路——类和对象(下)

目录 1、构造函数初始化列表 2、类型转换 3、explicit关键字 4、static成员 5、友元 友元函数 友元类 6、内部类 7、匿名对象 8、拷贝构造时的一些编译器优化 差不多结束了,类和对象! 1、构造函数初始化列表 初始化列表:以一个冒号…

了解MySQL的复制

了解MySQL的复制 MySQL的复制允许数据从一个MySQL数据库服务器(主服务器)复制到一个或多个MySQL数据库服务器(从服务器)。复制在数据库的扩展性和数据备份方面扮演着重要角色,特别是在大型企业和高可用性的应用场景中…
最新文章