前端——http的三次握手四次挥手

news2024/11/28 6:54:53

首先要知道在客户端与服务器端进行一个 http 请求的发送和返回的过程当中,我们需要创建一个 TCP 连接(TCP connection);因为 http 只存在请求和响应,不存在连接这个概念的;请求和响应都是数据包,他们之间需要经过一个传输的通道,这个传输的通道就是通过 TCP connection 创建的一个从客户端发起,服务端接收的一个连接。这个连接是可以一直保存连接;http 请求时在连接的基础上去发送的;在 TCP 连接上面可以发送多个 http 请求的(在不同的 http 版本里面是不一样的,在 1.0 里面这个连接同时创建 http 请求,请求完毕就会关闭这个 TCP 连接;在 1.1 中可以通过某种声明方式,使得这个连接一直保持,第一个请求发送完毕之后,可以进行第二个请求;2.0 的版本中 http 请求时可以并发的)

#说明

图片来源:《图解HTTP》

简单示意图:

客户端–发送带有 SYN/Seq 标志的数据包–一次握手–服务端服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

客户端发起一个要创建连接的数据包(SYN/Seq)的请求发送到服务端服务器端接收到客户端的请求,返回一个 SYN/ACK 标志的数据包,其中 ACK 就是客户端发送 Seq + 1,而且再次发送一个服务端的 Seq。客户端接收到服务端发送的数据,表明允许连接,再次向服务端发送数据确认可以接收到数据,发送 ACK 等于上一步返回的 Seq + 1,以及新的数据 Seq;#为何要三次握手

简单的说就是为了防止服务端开启一些无用的连接;因为网络连接是有延迟的(因为之间需要通过各种复杂的方式进行传输);需要三次握手来确定客户端与服务器端保持连接以及发送数据成功。

第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常

第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常

第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

所以三次握手就能确认双发收发功能都正常,缺一不可。

#四次挥手

#TCP关闭连接过程

Client 向 Server 发送 FIN 包,表示 Client 主动要关闭连接,然后进入 FIN_WAIT_1 状态,等待 Server 返回 ACK 包。此后 Client 不能再向 Server 发送数据,但能读取数据。Server 收到 FIN 包后向 Client 发送 ACK 包,然后进入 CLOSE_WAIT 状态,此后 Server 不能再读取数据,但可以继续向 Client 发送数据。Client 收到 Server 返回的 ACK 包后进入 FIN_WAIT_2 状态,等待 Server 发送 FIN 包。Server 完成数据的发送后,将 FIN 包发送给 Client,然后进入 LAST_ACK 状态,等待 Client 返回 ACK 包,此后 Server 既不能读取数据,也不能发送数据。Client 收到 FIN 包后向 Server 发送 ACK 包,然后进入 TIME_WAIT 状态,接着等待足够长的时间(2MSL)以确保 Server 接收到 ACK 包,最后回到 CLOSED 状态,释放网络资源。Server 收到 Client 返回的 ACK 包后便回到 CLOSED 状态,释放网络资源。

#为什么要四次挥手

TCP 是全双工信道,何为全双工就是客户端与服务端建立两条通道,通道1: 客户端的输出连接服务端的输入;通道2: 客户端的输入连接服务端的输出。两个通道可以同时工作:客户端向服务端发送信号的同时服务端也可以向客户端发送信号。所以关闭双通道的时候就是这样:

客户端:我要关闭输入通道了。 服务端:好的,你关闭吧,我这边也关闭这个通道。

服务端:我也要关闭输入通道了。 客户端:好的你关闭吧,我也把这个通道关闭。

 

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

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

相关文章

牛客网 HJ56 完全数计算

前言:内容包括四大模块:题目,代码实现,大致思路,代码解读 题目: 描述 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。 它所有的真因子…

sed和awk

文章目录1、sed的简单介绍2、sed的使用方法2.1 命令行格式2.2 案例2.3 sed结合正则使用2.4 脚本格式3、awk的简单介绍4、awk的使用方法4.1 命令行模式4.2 脚本模式5、awk内部相关变量5.1 案例6、awk工作原理7、awk进阶使用8、awk脚本编程8.1 案例1、sed的简单介绍 sed是流编辑…

【计算机网络】Linux环境中的网络套接字编程

文章目录前言一、预备知识理解源IP地址和目的IP地址认识端口号认识UDP协议和TCP协议了解网络字节序二、socket 套接字socket 常见APIsockaddr 和 sockaddr_in三、UDP Socket编程封装UdpSocket实现UDP通用服务器实现英译汉服务器实现UDP通用客户端实现英译汉客户端四、地址转换函…

一文详解Yolov5——基于Yolov5的火灾检测系统

✨原创不易,还希望各位大佬支持一下\textcolor{blue}{原创不易,还希望各位大佬支持一下}原创不易,还希望各位大佬支持一下 👍 点赞,你的认可是我创作的动力!\textcolor{green}{点赞,你的认可是…

SAP ERP系统实施隐式增强中“声明“和“代码“的区别和用途介绍

SAP ERP系统在实施隐式增强的时候会跳出一个增强模式选择“声明”或者“代码”,这步骤应该如何选择对于刚接触这类增强的开发人员通常会感到疑惑,不知道应该选择哪个(如下图)。 点击“信息”可以看到官方的英文的解释如下: 这两个选项有什…

通达信收费接口查询可申购新股c++源码分享

有很多股民在做股票交易时为了实现盈利会借助第三三方炒股工具帮助自己&#xff0c;那么通达信收费接口就是人们常用到的&#xff0c;今天小编来分享一下通达信收费接口查询可申购新股c源码&#xff1a; std::cout << " 查询可申购新股: category 12 \n"; c…

maven的学习与理解之 maven的下载与配置文件的修改

maven的学习之maven的下载与配置文件的修改 maven的下载 maven的下载地址&#xff1a; <http://us.mirrors.quenda.co/apache/maven/maven-3/3.5.4/binaries/maven的安装 zip文件下载之后 解压到没有中文的路径下 这个路径后面maven项目使用频繁 建议路径简单…

电商销量查询:鲸参谋2023年1月平板电视品牌销售数据

根据鲸参谋平台的电商数据显示&#xff0c;1月份在京东平台上各类大家电的销售中&#xff0c;平板电视销售量共计210万件左右&#xff0c;总销售量排名第一&#xff0c;环比增长了26.43%&#xff0c;领先于洗衣机、冰箱、冷柜和空调等热销大家电。 ​*数据源于鲸参谋-类目排行分…

C语言--数据的存储1

目录数据类型的介绍类型的意义类型的基本归类整形家族浮点型家族构造类型--自定义类型指针类型空类型整形在内存中的存储大小端大小端如何区分为什么会有大小端判断机器字节序从本章开始&#xff0c;我们将正式进入C语言的进阶学习中。本篇内容我们将学习 数据的存储数据类型的…

Python深度学习实战PyQt5基本控件使用解析

PyQt5 提供了丰富的输入输出控件。本文介绍通过 QtDesigner 工具栏创建常用的基本控件&#xff0c;包括各种按钮控件、文本输入控件和调节输入控件1. PyQt5 控件简介1.1 什么是控件控件也称控件对象&#xff0c;是 Qt用户界面上最基本的组件类型&#xff0c;也是构成用户界面的…

作为研发如何使用Github Api?

文章目录使用步骤账号创建进行开发者相关设置API操作演示Github API好处推荐的Github API&#x1f31f;个人主页: 个人主页 &#x1f6b5;‍♀️个人介绍:每天进步一点点&#xff0c;生活变得好一点点。 &#x1f4cc;作为一位开发&#xff0c;不管是非工作的还是工作中的人士&…

指针的进阶

指针的进阶一级目录二级目录三级目录先来回顾一下&#xff1a;字符指针指针数组数组指针数组指针的定义&数组名vs数组名数组指针的使用数组参数 指针参数一维数组传参二维数组传参一级指针传参二级指针传参函数指针函数指针数组指向函数指针数组的指针回调函数指针和数组笔…

图表控件TeeChart for .NET系列教程六:选择一个系列类型(使用系列)

TeeChart for .NET是优秀的工业4.0 WinForm图表控件&#xff0c;官方独家授权汉化&#xff0c;集功能全面、性能稳定、价格实惠等优势于一体。TeeChart for .NET 中文版还可让您在使用和学习上没有任何语言障碍&#xff0c;至少可以节省30%的开发时间。 TeeChart for .NET最新…

python基于django的自媒体社区交流平台

自媒体社区平台采用python技术,基于django框架,mysql数据库进行开发,实现了以下功能&#xff1a; 本系统主要包括管理员,用户,商家和普通管理员四个角色组成,主要包括以下功能&#xff1a; 1;前台&#xff1a;首页、需求通告、优质案例、帮助中心、意见反馈、个人中心、后台管理…

区块链安全:从web3.0到数字货币

互联网发展的三个阶段 web1.0 静态页面&#xff0c;内容只能供用户去阅读&#xff0c;类似于在网络上读报纸或者看书。 web2.0 动态互联网&#xff0c;实现用户之间的互动&#xff0c;比如twitter&#xff0c;facebook&#xff0c;titok等。 web2.0中厂商用免费或极低的成…

基于UDP/TCP实现客户端服务器的网络通信程序

目录&#xff1a;前言基于UDP实现客户端服务器的网络通信程序基于TCP实现客户端服务器的网络通信程序前言网络编程的核心是Socket API&#xff0c;它是操作系统给应用程序提供的网络编程API&#xff0c;可以认为是socket api是和传输层密切相关的。在传输层里面&#xff0c;提供…

leetcode刷题---递归思想

leetcode刷题---递归思想&#xff09;1.1 递归介绍1.2 基本步骤1.3 代表题目1.3.1 入门题---青蛙跳1.3.2.1 初级题226.翻转二叉树112.路径总和1.3.3 中级题---汉诺塔问题1.3.4 进阶题---细胞分裂1.1 递归介绍 如果在函数中存在着调用函数本身的情况&#xff0c;这种现象就叫递…

java Resource

参看本文前 你要先了解 spring中的 Autowired和Qualifier 注解 如果之前没有接触过 可以查看我的文章 java spring 根据注解方式按(类型/名称)注入Bean 然后 创建一个java项目 引入spring注解方式 所需要的包 然后 在src下创建包 我们这里直接叫 Bean 在Bean下创建包 叫UserD…

【GIC】处理中断

目录 一、当中断变为pending时发生了什么&#xff1f; 二、中断响应 三、虚假的中断 四、运行优先级&抢占 五、结束中断 六、检查系统的当前状态 6.1最高优先级等待中断和运行优先级 6.2单个INTID的状态 一、当中断变为pending时发生了什么&#xff1f; 前面的文章…

0207 事件

事件监听事件监听版本事件类型事件概念事件在编程时系统内发生的动作或者发生的事情例子点击按钮鼠标经过拖拽鼠标事件监听&#xff08;注册事件&#xff0c;绑定事件&#xff09;让程序员检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即调用一个函数做出响应…