http和websocket,唠一唠(二)

这集多少有点难产了...

书接上回,咱们继续

上回书说到,初识http,及http相关的api,这回我们继续唠唠http请求中要经历哪些阶段

来,开整~

其实说到http,还要从最常见的一个问题入手来了解,其实也是一道常见的面试题,在浏览器的地址栏中输入https://juejin.cn地址,那么浏览器会进行哪些操作呢?来,我们一步步来

http通信工作流

  • 浏览器会先进行url解析,会判断输入的是一个合法的url还是一个待搜索的关键词

  • DNS,由DNS解析到指定的IP地址

  • http生成针对web服务器的http请求报文

  • 将http请求报文,分割成多份报文段,采用三次握手来确保准确送

三次握手

名词解释:

SYN:(连接建立时用于同步序号SYN这个标志位只有在TCP建立连接才会被置为1,握手完成后SYN标志位被置为0)

seq:sequence number序列号(标记数据段的顺序,就是这个报文段中的第一个字节的数据编号)

ACK:acknowledgment Number(确认号,仅当ACK=1,确认号字段才有效。ACK=0,确认号无效)

ack:(期待收到对方下一个报文段的第一个数据字节的序号)

MSL:(最大报文生存时间)

FIN:(用来释放一个连接)

  • 第一次握手

  • 首先由client(客户端)向server(服务端)主动发送一个数据请求包,并将SYN(建立连接时的同步信号)置为1,seq置为0。

  • 第二次握手

  • server(服务端)接收到了来自client(客户端)的请求,通过SYN知道这是个建立连接的请求,然后响应了数据确认包并将SYN和ACK(值为seq + 1)状态都置为1。

  • 第三次握手

  • server(服务端)收到了来自client(客户端)的响应包后确认ACK是否正确,正确后server向client发送一个数据包,数据中将SYN置为0,ACK置为1,并将ACK设置为y+1,表示收到了来自client的SYN。

这样,client和server两个断端TCP建立起了三次握手的连接。

四次挥手

  • 第一次挥手

  • client想主动断开连接,则在数据发送完毕后,传递FIN信号给server。FIN和ACK均置为1,序号seq = x,ACK = z。

  • 第二次挥手

  • server收到client的FIN后,则响应ACK,告诉client可以断开。seq = ack,并将ACK = 1。

  • 第三次挥手

  • server主机做好连接关闭前的最后准备工作,再次发送FIN给client主机。此时server主机进入到半关闭的状态。因为client主机可能还有没发送完的数据,所以需要等server发送完数据再此发送一个FIN和ACK进行最后的确认,此时seq和ack是不变的,只是多了一个FIN来确认结束。

此时此刻,三次握手和四次挥手的过程全程结束,整tap的连接也结束了。

http的内容如此,主要是复习下,三次握手和四次挥手。各位有什么问题,或者发现什么问题,欢迎评论区讨论。

相关推荐
GISer_Jing21 小时前
深入拆解Taro框架多端适配原理
前端·javascript·taro
毕设源码-邱学长21 小时前
【开题答辩全过程】以 基于VUE的藏品管理系统的设计与实现为例,包含答辩的问题和答案
前端·javascript·vue.js
San30.21 小时前
深入理解 JavaScript:手写 `instanceof` 及其背后的原型链原理
开发语言·javascript·ecmascript
北冥有一鲲21 小时前
LangChain.js:RAG 深度解析与全栈实践
开发语言·javascript·langchain
用户28907942162711 天前
Spec-Kit应用指南
前端
酸菜土狗1 天前
🔥 手写 Vue 自定义指令:实现内容区拖拽调整大小(超实用)
前端
ohyeah1 天前
深入理解 React Hooks:useState 与 useEffect 的核心原理与最佳实践
前端·react.js
Cache技术分享1 天前
275. Java Stream API - flatMap 操作:展开一对多的关系,拉平你的流!
前端·后端
apollo_qwe1 天前
前端缓存深度解析:从基础到进阶的实现方式与实践指南
前端
周星星日记1 天前
vue中hash模式和history模式的区别
前端·面试