从输入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》