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

相关推荐
Мартин.3 小时前
[Meachines] [Easy] Sea WonderCMS-XSS-RCE+System Monitor 命令注入
前端·xss
昨天;明天。今天。4 小时前
案例-表白墙简单实现
前端·javascript·css
数云界4 小时前
如何在 DAX 中计算多个周期的移动平均线
java·服务器·前端
风清扬_jd4 小时前
Chromium 如何定义一个chrome.settingsPrivate接口给前端调用c++
前端·c++·chrome
安冬的码畜日常4 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine
ChinaDragonDreamer4 小时前
Vite:为什么选 Vite
前端
小御姐@stella4 小时前
Vue 之组件插槽Slot用法(组件间通信一种方式)
前端·javascript·vue.js
GISer_Jing4 小时前
【React】增量传输与渲染
前端·javascript·面试
GISer_Jing4 小时前
WebGL在低配置电脑的应用
javascript
eHackyd4 小时前
前端知识汇总(持续更新)
前端