【面试题12】HTTP协议三次握手和四次挥手分别是什么

文章目录

  • 一、概览
  • 二、三次握手
    • 2.1 第一步:客户端向服务端发送 SYN(同步)包
    • 2.2 第二步:服务端返回 ACK(确认)包和 SYN 包
    • 2.3 第三步:客户端返回 ACK(确认)包
  • 三、四次挥手
    • 3.1 第一步:客户端向服务器发送 FIN(结束)包
    • 3.2 第二步:服务端发送 ACK(确认)包
    • 3.3 第三步:服务端向客户端发送 FIN 包
    • 3.4 第四步:客户端发送 ACK(确认)包
  • 四、客户端和服务端谁主动断开连接
  • 总结


一、概览

本文已收录于PHP全栈系列专栏:PHP面试专区。
计划将全覆盖PHP开发领域所有的面试题,对标资深工程师/架构师序列,欢迎大家提前关注锁定。

HTTP 是一个客户端和服务端之间通信的协议,用于在 Web 上发送和接收数据。在 HTTP 通信过程中,客户端和服务端之间通过套接字建立连接。HTTP 协议是基于 TCP/IP 协议的,在传输数据的时候必须使用三次握手和四次挥手进行建立和关闭连接。在这篇文章中,我们将学习三次握手和四次挥手,以及它们各个步骤的状态,还会回答客户端和服务端谁主动断开连接的问题。

二、三次握手

在服务端和客户端之间建立连接时,需要进行三次握手过程来确保双方都已经准备好了进行通信。这个过程的目的是让服务端和客户端可以互相确认彼此的身份,并建立一个可靠的连接。以下是三次握手的步骤:

在这里插入图片描述

2.1 第一步:客户端向服务端发送 SYN(同步)包

当客户端想要和服务端建立连接时,将会发送一个 SYN 包给服务端。这个 SYN 包包含着客户端发送初始序列号的信息。

2.2 第二步:服务端返回 ACK(确认)包和 SYN 包

当服务端收到客户端的 SYN 包时,会向客户端发送一个 ACK 包进行响应。这个 ACK 包也会包含服务端的初始序列号。同时,服务端也会发送一个 SYN 包给客户端。

2.3 第三步:客户端返回 ACK(确认)包

当客户端收到服务端发送的 SYN 包时,会向服务端发送一个 ACK 包作出响应。此时,双方就已经进行了三次握手,建立了一个可靠的连接,可以开始进行通信。

三、四次挥手

在完成了数据传输之后,双方需要关闭连接。在 HTTP 协议中使用四次挥手来优雅的结束连接,使得双方都有足够的时间来处理未完成的数据传输。以下是四次挥手的步骤:

在这里插入图片描述

3.1 第一步:客户端向服务器发送 FIN(结束)包

当客户端想要关闭连接时,它会向服务端发送一个 FIN 包。FIN 包告诉服务端客户端将不再发送数据,但仍然可以继续接收数据。

3.2 第二步:服务端发送 ACK(确认)包

当服务端收到客户端发送的 FIN 包时,会向客户端发送一个 ACK 包作出响应。

3.3 第三步:服务端向客户端发送 FIN 包

一旦服务端也没有数据要发送给客户端了,它就会向客户端发送一个 FIN 包。这个 FIN 包表示服务端已经准备好关闭连接。

3.4 第四步:客户端发送 ACK(确认)包

当客户端收到服务端发送的 FIN 包时,会向服务端发送一个 ACK 包,并关闭连接。

四、客户端和服务端谁主动断开连接

在 HTTP 协议中,不管是客户端还是服务端都可以主动断开连接。通常情况下,客户端应该先发送 FIN 包来关闭连接。这是因为服务端的资源比客户端更有价值,如果客户端提前结束了连接,服务端还需要等待一段时间才能释放这些资源。

总结

三次握手和四次挥手在 HTTP 通信中扮演着非常重要的角色,用于建立和关闭连接。虽然这些过程看起来很简单,但它们确保了连接的可靠性。在这篇文章中,我们学习了三次握手和四次挥手的各个步骤及状态,以及客户端和服务端哪一个应该先发送 FIN 包。了解这些知识可以帮助我们更好地理解 HTTP 协议,从而更好地构建 web 应用程序。

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

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

相关文章

【AudioCaps数据集】windows10下载AudioCaps数据集,附百度网盘下载链接

🔥 AudioCaps是从AudioSet数据集中筛选再加工得到的数据集。 AudioCaps数据集的下载使用python的第三方库 audiocaps-download,根据README.md的提示,先进行配置下载环境: 📣 AudioCaps的下载环境配置分为四步&#x…

反AI来了…尼康的Natural Intelligence

a mutant_umbrella tree shaped like a nuclear bomb explosion,a photo-realism photograph, 4k, ultra realistic VS a mutant_umbrella tree shaped like a nuclear bomb explosion 尼康发起了一次名为:Natural Intelligence ,“不要放弃现实世界”的…

电商--抢购架构总结

文章目录 背景业务流程业务难点技术难点技术方案技术方向具体落地客户端流控网关流控容器流控后端接口流控数据库流控 流控总结优化读取加速异步化流程处理系统扩容 压测监控 总结参考文献 背景 这是个在做NFT电商项目时遇到的场景,要求运营可以商家某个系列的NFT商…

PHP 文心千帆API接口对接

一:API 调用流程简介 创建一个智能云应用。根据实际需求创建智能云应用。创建成功后,获取AppID、API Key、Secret Key 等信息。API 授权。对应用的 AppID 进行授权。获取接口访问凭证 access_token 。根据第1步获取的 API Key 和 Secret Key &#xff0c…

2023上半年软考系统分析师科目一整理-04

2023上半年软考系统分析师科目一整理-04 企业信息化 企业信息化 企业信息化工程是将( A )相结合,改善企业的经营、管理、产品开发和生产等各个环节,提高生产效率、产品质量和企业的创新能力,从而实现产品设计制造和企业管理的信息化、生产过…

RocketMQ --- 高级篇

一、高级功能 1.1、消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储。 消息生成者发送消息MQ收到消息,将消息进行持久化,在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者,然后等待消费者返回…

探索uniapp+vue3解析markdown语法|uniapp键盘撑起

最近正在尝试使用uniappvue3开发仿制chatgpt会话功能。 如上图:经过测试在h5/App端/小程序端 均支持markdown语法解析,键盘撑起后,整体页面和顶部自定义导航栏不会被顶起。 uniapp markdown解析及语法高亮 使用了markdown-it和highlight.js…

了解和使用 Docker 镜像仓库

前言 在上文 《了解和使用 Docker》 之后,反响不错,也上了热榜。本来是想直接整理一下容器编排工具 Docker Swarm 和 K8s 博文的,但是半路杀出了这个活动😂,为表敬意,先参与一波吧。 本文主要介绍一下容…

HTML 全面入门教程:从基础到高级

目录 一、基本结构和标签1. HTML 文档结构2. 常用标签 二、表单和输入元素1. 表单标签&#xff08;<form>&#xff09;2. 输入元素3.实例 三、样式和布局1. 内联样式2. 内部样式表3. 外部样式表 四、多媒体和嵌入内容1. 图像2. 音频和视频3. 嵌入内容 五、语义化标签语义…

【高频电子线路课程设计】调幅发射机

目录 高频电子线路课程设计 摘要&#xff1a; 1绪论 1.1设计的作用和目的 2调幅发射机的主要性能指标 2.1调幅发射机的工作原理 3小功率调幅发射机的设计 3.1方案的选择 3.1.1简易调幅发射机的工作原理框图 3.1.2功率分配及电源电压确定 3.1.3各级晶体管的选择 3.2…

几个基于springboot在线服务过段时间突然停掉的原因

有几个基于springboot的服务今天发现突然停掉了&#xff0c;也不知道什么原因&#xff0c;所以只能看一下日志了 主要日志如下&#xff1a; 2023-06-17 14:26:21.775 DEBUG o.s.b.f.s.DefaultListableBeanFactory- Retrieved dependent beans for bean dataSource: [mybatisCo…

DAY 79 云原生DOCKER的基本原理及镜像管理

Docker概述 云计算涌现出很多改变传统IT架构和运维方式的新技术&#xff0c;比如虚拟机、容器、微服务、Serverless&#xff08;无服务&#xff09;&#xff0c;无论这些技术应用在哪些场景&#xff0c;降低成本、提升效率是云服务永恒的主题。 1.运行物理机&#xff0c;也称…

基于深度学习的高精度奶牛检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度奶牛检测识别系统可用于日常生活中或野外来检测与定位奶牛目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的奶牛目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

pytorch 绘制一维热力图

热力图 热力图&#xff08;Heat Map&#xff09;是指用 X 轴 和 Y 轴 表示的两个分类字段确定数值点的位置&#xff0c;通过相应位置的矩形颜色去表现数值的大小&#xff0c;颜色深代表的数值大。 热力图是非常特殊的一种图&#xff0c;可以显示不可点击区域发生的事情。热力…

springcloud整合gateway

1.新建gateway模块 添加gateway依赖 2.添加gateway配置 2.1配置转发地址 2.2 配置断言规则 3.启动 order-nacos,stock-nocas,gateway模块 3.集成nacos 3.1添加nacos依赖 3.2 配置uri,添加nacos 3.3重启gateway服务

密码学中的SM2

目录 概述 功能 密钥生成 基点G的生成 模数p 密钥生成过程 加解密 加密过程&#xff1a; 解密过程&#xff1a; 数字签名 概述 对第5步r的计算方式分析 对第6步s的计算方式分析 加密模式 优缺点 论文和研究方向推荐 论文 研究方向 概述 SM2是中国密码学算法…

Jupyter notebook运行环境创建

进入到jupyter notebook,没找到自己之前创建的环境xzc_pytorch 进入到Anaconda prompt,输入如下命令 (xzc_pytorch) C:\Users\xzc> conda install ipykernel安装完后&#xff0c;重启jupyter notebook发现还是没有 &#xff0c;此时选择手动创建&#xff0c;在base环境下执…

Linux系统之部署Etherpad文档编辑器

Linux系统之部署Etherpad文档编辑器 一、Etherpad介绍1.1 Etherpad简介1.2 Etherpad特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统是否安装Node.js 四、部署Node.js 环境4.1 下载Node.js安…

DAY 76 分布式监控平台:zabbix

市场上常用的监控软件&#xff1a; 传统运维&#xff1a;zabbix、 Nagios云原生环境&#xff1a; Prometheus &#xff08;go语言开发的&#xff09; zabbix概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去…

html实现好看的个人介绍,个人主页模板5(附源码)

文章目录 1.设计来源1.1 主界面1.2 我的介绍界面1.3 我的能力界面1.4 项目案例界面1.5 联系我界面 2.效果和源码2.1 动态效果2.2 源代码2.3 源代码目录 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/13127331…