Skip to main content

浏览器输入 URL 发生了什么

  1. 解析域名
  2. 三次握手建立 TCP 连接
  3. 发送 HTTP 请求拿到响应结果
  4. 浏览器渲染页面
  5. 四次挥手断开 TCP 连接

一、解析域名

在浏览器输入网址后,首先要经过域名解析,因为浏览器并不能直接通过域名找到对应的服务器,而是要通过 IP 地址

域名就相当于 IP 地址乔装打扮的伪装者,带着一副面具。它的作用就是便于记忆和沟通的一组服务器的地址。

用户通常使用主机名或域名来访问对方的计算机,而不是直接通过 IP 地址访问。因为与 IP 地址的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯。

但要让计算机去理解名称,相对而言就变得困难了。因为计算机更擅长处理一长串数字。为了解决上述的问题,DNS 服务应运而生。

「点击查看 DNS 的工作原理」

总而言之,域名解析就是浏览器通过向 DNS 服务器发送域名,DNS 服务器查询到与域名相对应的 IP 地址,然后返回给浏览器,浏览器再将 IP 地址打在协议上,同时请求参数也会在协议搭载,然后一并发送给对应的服务器。

二、三次握手建立 TCP 连接

TCP 三次握手(Three-way Handshake)是指建立一个 TCP 连接时,需要客户端和服务器总共发送 3 个包,主要是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。

在客户端发送数据之前会发起 TCP 三次握手用以同步客户端和服务端的序列号和确认号,并交换 TCP 窗口大小信息。

「点击查看三次握手详情」

Chrome 有个机制,同一个域名同时最多只能建立 6 个TCP 连接,如果在同一个域名下同时有 10 个请求发生,那么其中 4 个请求会进入排队等待状态,直至进行中的请求完成。如果当前请求数量少于 6 个,会直接建立 TCP 连接。

三、发送 HTTP 请求拿到响应结果

TCP 三次握手结束后,开始发送 HTTP 请求报文

服务器处理请求并返回 HTTP 响应报文

四、浏览器渲染页面

  1. 构建 DOM 树
  2. 构建 CSS 规则树
  3. 二者结合生成 Render 树
  4. 再生成布局
  5. 然后绘制到页面中

「点击查看浏览器渲染过程」

五、四次挥手断开 TCP 连接

TCP 关闭一个连接需要经过四次挥手,之所以需要四次挥手,是因为服务端在收到客户端断开连接的 FIN 报文后,并不会立即关闭连接,而是先发送一个 ACK 包先告诉客户端自己已收到关闭连接的请求,等到服务器的所有报文发送完毕后,才发送 FIN 报文断开连接。

「点击查看四次挥手详情」