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

相关推荐
mapbar_front13 分钟前
react项目开发—关于代码架构/规范探讨
前端·react.js
二木一夕20 分钟前
Vue 3 的组合式 API和传统选项式 API区别(vue2转vue3,两者差异)
前端
LuckySusu22 分钟前
【vue篇】Vue 项目中的静态资源管理:assets vs static 终极指南
前端·vue.js
LuckySusu22 分钟前
【vue篇】Vue.delete vs delete:数组删除的“陷阱”与正确姿势
前端·vue.js
LuckySusu24 分钟前
【vue篇】Vue 模板编译原理:从 Template 到 DOM 的翻译官
前端·vue.js
小菜摸鱼27 分钟前
Node.js + vue3 大文件-切片上传全流程(视频文件)
前端·node.js
LuckySusu30 分钟前
【vue篇】Vue 2 响应式“盲区”破解:如何监听对象/数组属性变化
前端·vue.js
LuckySusu30 分钟前
【vue篇】Vue Mixin:可复用功能的“乐高积木”
前端·vue.js
勤奋菲菲34 分钟前
Vue3+Three.js:requestAnimationFrame的详细介绍
开发语言·javascript·three.js·前端可视化
洋不写bug42 分钟前
前端环境搭建,保姆式教学
前端