总体来说分为以下几个过程:

  • DNS 解析:将域名解析成 IP 地址

  • TCP 连接:TCP 三次握手

  • 发送 HTTP 请求

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

  • 浏览器解析渲染页面

  • 断开连接:TCP 四次挥手

下面每项详细的讲解:

一:DNS域名解析

  1.为什么不是直接通过 IP 地址,而是通过域名来访问:因为域名(字母配合数字的表示形式)来指定计算机名更符合人类的记忆习惯,而计算机更擅长处理IP(一组纯数字)。

  2.DNS 是一个网络服务器,我们的域名解析简单来说就是在 DNS 上记录一条信息记录。

  3.DNS解析域名的过程:

    浏览器缓存:浏览器会检查缓存中有没有域名对应的ip地址,这个缓存是有过期时长的,一般是几分钟到几小时不等;

    操作系统缓存:如果浏览器缓存中找不到需要的 DNS 记录,那就去操作系统中找;

    本地区DNS域名服务器(LDNS):如果还是没有找到,就到本机配置的本地区DNS域名服务器(LDNS)发起请求;

    根服务器:本地区的 DNS 服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS 服务器先问根域名服务器.com 域名服务器的 IP 地址,然后再问.baidu 域名服务器,依次类推)

 二:TCP三次握手

  1.客户端发送一个带 SYN=1,Seq=X 的数据包到服务器端口(第一次握手,由浏览器发起,告诉服务器我要发送请求了)

  2.服务器发回一个带 SYN=1, ACK=X+1, Seq=Y 的响应包以示传达确认信息(第二次握手,由服务器发起,告诉浏览器我准备接受了,你赶紧发送吧)

  3.客户端再回传一个带 ACK=Y+1, Seq=Z 的数据包,代表“握手结束”(第三次握手,由浏览器发送,告诉服务器,我马上就发了,准备接受吧)

三:发送HTTP请求   

四:服务器处理请求并返回 HTTP 报文

五:浏览器解析渲染页面

  1.根据 HTML 解析出 DOM 树

  2.根据 CSS 解析生成 CSS 规则树

  3.结合 DOM 树和 CSS 规则树,生成渲染树

  4.根据渲染树计算每一个节点的信息

  5.根据计算好的信息绘制页面

六:断开连接:TCP 四次挥手

  数据 传送完毕之后,断开连接

  1.客户端向服务器发送报文,Fin、Ack、Seq,表示已经没有数据传输了。并进入 FIN_WAIT_1 状态。(第一次挥手:由浏览器发起的,发送给服务器,我请求报文发送完了,你准备关闭吧)
  2.服务器发送报文,Ack、Seq,表示同意关闭请求。此时主机发起方进入 FIN_WAIT_2 状态。(第二次挥手:由服务器发起的,告诉浏览器,我请求报文接受完了,我准备关闭了,你也准备吧)
  3.服务器向客户端发送报文段,Fin、Ack、Seq,请求关闭连接。并进入 LAST_ACK 状态。(第三次挥手:由服务器发起,告诉浏览器,我响应报文发送完了,你准备关闭吧)
  4.客户端向服务器发送报文段,Ack、Seq。然后进入等待 TIME_WAIT 状态。被动方收到发起方的报文段以后关闭连接。发起方等待一定时间未收到回复,则正常关闭。(第四次挥手:由浏览器发起,告诉服务器,我响应报文接受完了,我准备关闭了,你也准备吧)

 

参考链接:https://mp.weixin.qq.com/s/jjL4iA7p6aYEAQyWhn4QbQ