从输入URL到页面显示,发生了什么?

一、HTTP

首先浏览器做的第一步工作就是要对 URL 进行解析,从而生成发送给 Web 服务器的HTTP请求消息。

二、DNS解析

但在发送之前,还有一项工作需要完成,那就是查询服务器域名对应的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。

查找域名对应的IP地址

通过域名查找IP过程:浏览器缓存 -> 系统缓存 -> 本地DNS服务器缓存

  • 浏览器搜索自己的DNS缓存(维护一张域名与IP地址对应表)
  • 搜索操作系统中的DNS缓存(维护一张域名与IP地址对应表)
  • 搜索操作系统的hosts文件(windows环境下,维护一张域名与IP地址对应表)
  • 操作系统将域名发送到本地DNS服务器,进行查找,成功则返回结果;失败,本地DNS会去问它的根域名服务器(具体过程如下图)
  • 本地DNS服务器将得到的IP地址返回给操作系统,同时也将IP地址缓存起来
  • 操作系统将IP地址返回给浏览器,同时将IP地址缓存起来

域名的层级关系类似一个树状结构:

  • 根 DNS 服务器(.)
  • 顶级域 DNS 服务器(.com)
  • 权威 DNS 服务器(server.com)

三、TCP

在HTTP传输数据之前,首先需要TCP建立连接,TCP连接的建立,通常称为三次握手

三次握手目的是保证双方都有发送和接收的能力

TCP 分割数据

如果 HTTP 请求消息比较长,超过了 MSS 的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送,而不是一次性发送所有数据。

  • MTU:一个网络包的最大长度,以太网中一般为 1500 字节。
  • MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。

数据会被以 MSS 的长度为单位进行拆分,拆分出来的每一块数据都会被放进单独的网络包中。也就是在每个被拆分的数据加上 TCP 头信息,然后交给 IP 模块来发送数据。

四、IP

TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据封装成网络包发送给通信对象。

五、MAC

生成了IP头部之后,接下来网络包还需要在IP头部的前面加上MAC头部

在将IP地址转换为MAC地址的过程中,需要使用ARP协议,即地址解析协议(Address Resolution Protocol)

六、各种协议与HTTP协议的关系

参考:

https://xiaolincoding.com/network/1_base/what_happen_url.html

《图解HTTP》