键入网址到网页显示中间发生了什么?

解析 URL 并封装 HTTP 请求

  1. 从 URL 路径中解析协议(例如是 http:// 协议还是 https:// 协议)
  2. 解析 Web 服务器地址(包括端口号,如果没有端口号使用默认端口号)
  3. 解析文件路径
  4. 封装 HTTP 请求报文

Untitled

DNS 解析

如果填入的 URL 中,Web 服务器地址用的是域名地址,我们需要将域名地址解析为 IP 地址。

如果这个域名对应的 IP 地址在操作系统或服务器中有缓存的话,我们直接返回缓存的 IP 地址;否则,我们就要向 DNS 服务器发送查询请求。

首先向本地 DNS 服务器发送解析请求,本地 DNS 服务器就是电脑上配置的 DNS 服务器,例如国内常用的 DNSPod、114DNS,国外的 8.8.8.8 或者 1.1.1.1

本地 DNS 服务器会再判断服务器内是否有缓存,如果没有缓存的话,分别向根域名服务器、com 域名服务器、baidu.com 域名服务器来进行一个迭代的请求查询。最后我们就可以通过 baidu.com 这个域名服务器来找到 www.baidu.com 对应的 IP 地址。

从浏览器到本地域名服务器是一个递归查询的过程,而本地域名服务器向根域名服务器到二级域名服务器又是一个迭代查询的过程。

Untitled

TCP/IP 协议栈

获取到 IP 地址之后,我们就可以通过 TCP 协议建立传输通道。建立 TCP 传输通道的过程需要经历三次握手。

TCP 是传输层的协议,里面主要包含了源端口号、目的端口号、序号、确认号等信息。再往底层还有网络层为数据包封装 IP 头部,网络接口层为数据包封装 MAC 信息。

数据包层层封装到达服务器之后还需要一层一层地拆包。最后获得请求信息,并将网页同样封装为 HTTP 信息返回给客户端。

客户端收到响应,将 html、css、js 文件交给浏览器进行渲染,最后显示在屏幕上。