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

相关推荐
袋鱼不重25 分钟前
乐观锁与悲观锁:原理、选型与前后端实践
前端·后端
Charonmomo1 小时前
react/antd - 不能正确打开标签页问题记录
前端·react.js·前端框架
gis开发之家1 小时前
vue3直击架构痛点 依赖倒置与接口隔离——打造坚如磐石的插件与高阶组件(HOC)模式
javascript·架构·typescript·前端框架·vue3
柒和远方1 小时前
LeetCode 139. 单词拆分 —— 从暴力回溯到 DP 完全背包
javascript·python·算法
先吃饱再说1 小时前
流式输出完全指南:让 AI 对话像打字机一样流畅
javascript·vue.js
冬枳1 小时前
基于OpenSeagragon封装的前端病理切片展示组件
前端·typescript
爱勇宝2 小时前
《道德经》第6章:别把团队的创造力用到枯竭
前端·后端
无双_Joney2 小时前
[四期 - 4] NestJS专栏 - 征召一下大家的意见,非常想知道大家都想看看Nest的哪些方面
前端·后端·nestjs
彭亚川Allen2 小时前
停更的这一年,All In AI、陪媳妇生娃、还考了个研
前端·后端·产品经理
爱分享的程序猿-Clark2 小时前
【前端开发】前端开发者如何使用 Claude Code 快速搭建 React 项目!(小白都能学会的教程)
前端·react.js