IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 浏览器输入URL到看到页面中间都经历了什么?? -> 正文阅读

[网络协议]浏览器输入URL到看到页面中间都经历了什么??

浏览器输入URL到看到页面,中间大致经历:

  1. url解析
  2. 缓存检查
  3. DNS解析
  4. TCP三次握手
  5. 数据传输
  6. TCP四次挥手
  7. 页面渲染

1 URL解析

url,统一资源定位符(Uniform Resource Locator),是互联网上标准资源的地址.互联网上每个文件都有一个唯一的url,它包含的信息指出文件的位置以及浏览器应该怎么处理它.

一个完整的url:

http://user:pass@www.xxx.cn:80/index.html?a=1&b=2#video
组成说明
http通信协议,如httphttpsftpmaito
user:pass登录信息(认证)
www.xxx.cn主机(域名),如www.baidu.com
:80端口号,可选,省略则使用方案的默认端口,如http默认端口为80
index.html请求资源的文件路径,一般用来表示主机上的一个目录或文件地址
?a=1&b=2参数,以键值对的方式,通过&符号分隔开来
#video片段标识符,#后面的内容,常见于链接锚点

2 缓存检查

  1. 缓存位置:分为内存缓存(Memory Cache)硬盘缓存(Disk Cache)

    • 打开网页:查找 disk cache 中是否有匹配,如有则使用,如没有则发送网络请求
    • 普通刷新 (F5):因TAB没关闭,因此memory cache是可用的,会被优先使用,其次才是disk cache
    • 强制刷新 (Ctrl + F5):浏览器不使用缓存,因此发送的请求头部均带有 Cache-control: no-cache,服务器直接返回 200 和最新内容
  2. 强缓存:分为ExpiresCache-Control.

    浏览器对于强缓存的处理是根据第一次请求资源时返回的响应头来确定的.

    • Expires:缓存过期时间,用来指定资源到期的时间(HTTP/1.0);
    • Cache-Control: cache-control: max-age=2592000:第一次拿到资源后的2592000秒内(30天),再次发送请求,读取缓存中的信息(HTTP/1.1)
    • 两者同时存在的话,Cache-Control优先级高于Expires

    img

  3. 协商缓存(Last-Modified/ETag):就是强缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程.

    20210326151406

  4. 数据缓存

    20210326151432

3 DNS解析

解析过程

当用户在地址栏输入一个url,如www.taobao.com,DNS解析过程如下:

  1. 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束;
  2. 如果浏览器缓存没有命中该域名,浏览器会检查操作系统缓存中有没有对应的已解析过的结果.(通过hosts文件设置,但因为容易被黑客攻击,所以该文件默认是readonly只读状态,防止被恶意篡改);
  3. 如果hosts文件没有命中该域名,才会真正请求本地域名服务器(LDNS)来解析这个域名.本地域名服务器一般距离客户端不会太远,一般都会缓存域名解析结果.
  4. 如果本地域名服务器仍然没有命中,它会向根域名服务器发送请求.
  5. 根域名服务器查询该域名,返回给本地域名服务器一个所查询域的主域名服务器(国际顶尖域名服务器,如.com .cn .org等)地址,本地域名服务器收到后再向该地址发送请求;
  6. 顶级域名服务器查询该域名,返回给本地域名服务器一个所查询域的权威域名服务器(如google.com)地址,权威域名服务器根据映射关系表找到目标ip,返回给本地域名服务器;
  7. 本地域名服务器缓存这个域名和对应的ip;
  8. 本地域名服务器把解析的结果返回给用户,用户缓存到本地系统,域名解析过程结束.

20210326151502

优化:

  • 减少DNS请求次数;

  • DNS预获取(DNS Prefetch)

    <meta http-equiv="x-dns-prefetch-control" content="on">
    <link rel="dns-prefetch" href="//static.360buyimg.com"/>
    <link rel="dns-prefetch" href="//misc.360buyimg.com"/>
    <link rel="dns-prefetch" href="//img10.360buyimg.com"/>
    <link rel="dns-prefetch" href="//d.3.cn"/>
    <link rel="dns-prefetch" href="//d.jd.com"/>
    

服务器拆分的优势

  • 资源的合理利用;
  • 抗压能力加强;
  • 提高HTTP并发

20210326151614

4 TCP三次握手

20210326151731

标识说明:

  • seq序号,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记
  • ack确认序号,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1
  • 标志位
    • ACK:确认序号有效
    • RST:重置连接
    • SYN:发起一个新连接
    • FINfinish,终结的意思,释放一个连接

三次握手过程:

  1. 第一次握手:建立连接。客户端发送连接请求报文段,将SYN置1,序列号seq(sequence number)为x;然后,客户端进入SYN_SEND状态,等待服务器的确认。

  2. 第二次握手:服务器收到SYN报文段,对这个SYN报文段进行确认,ACK置1,表示同意连接,确认号ack(acknowledgement number)x+1;同时,服务器还要发送SYN请求信息,将SYN置1,序列号seqy;服务器将上述SYN+ACK报文段一并发送给客户端,此时服务器进入SYN_RECV状态。

  3. 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将确认号ack设置为y+1,向服务器发送ACK报文段。这个报文段发送完毕后,客户端和服务器都进入ESTABLISHED状态,完成TCP三次握手,之后可以开始传数据。

为什么需要三次握手?

为了保证服务器能接收到客户端的信息并做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。传输的信道实际上是不可靠的,所以要想数据传输可靠,至少要做到三次握手,三次是理论上的最小值.

5 数据传输

6 TCP四次挥手

当客户端和服务器通过三次握手建立了TCP连接之后,当数据传输完毕,就要断开TCP连接,这个过程称为四次挥手.

20210326151917

四次挥手过程:

  1. 第一次挥手:主机1(可以是客户端,也可以是服务器)设置序列号sequ,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT状态,这表示主机1没有数据要发送给主机2了。

  2. 第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回复一个ACK报文段,确认号acku+1,序列号seqv;主机2进入CLOSE_WAIT状态;主机1收到主机2发送的ACK报文段之后,进入FIN_WAIT_2状态。

  3. 第三次挥手:主机2向主机1发送FIN报文段,设置序列号seqw,确认号acku+1,请求关闭连接,同时主机2进入LAST_ACK状态

  4. 第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,确认号ackw+1,序列号sequ+1,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL(MSL,最长报文段寿命)后依然没有收到回复,则证明服务端已经正常关闭,那么主机1也可以关闭连接了。

为什么需要四次挥手?

挥手次数比握手次数多了一次的主要原因在于

  • 服务器端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文;
  • 但关闭连接时,当服务器端收到FIN报文时,很可能并不会立即关闭链接,所以只能先回复一个ACK报文,告诉客户端:”你发的FIN报文我收到了,只有等到服务器端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送",故需要四步握手.

挥手过程中如果客户端先挂断了,服务器端会发生什么?

TCP设有一个保活计时器,绑定每一个客户端,超过这个计时器设定的时间,还没有收到应答报文段,服务器端就会发送探测报文段(一般连续发送10个左右),如果还是没有回应,服务器端判定客户端出现问题,关闭连接.

7 页面渲染

关于页面渲染,可见本人另外一篇blog——浏览器页面渲染流程

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 11:07:19  更:2021-08-02 11:08:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 10:18:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码