浏览器从输入URL到页面渲染发生了什么(一)

599 阅读6分钟

先声明,这篇文章是看了别人写的之后,自己也想去补充一下这个知识,所以查阅了很多资料,也去拿到了后面用到的书籍,所以有点类同轻点喷 hhh

一、这样的面试题你一定遇到过

🧒:浏览器从输入URL到显示页面发生了什么?

🧑: 巴拉巴拉从网络到渲染说了一通后

🧒:可以说得再细一点吗

🧑: 额...

今天我们就来说一下这个流程中的第一步。

首先我们得先知道输入URL的内容是什么,肯定要么是域名要么是IP地址。我们都知道,输入url回车之后是去对应的主机拿资源,那这个过程中数据的通信肯定得用到路由器或者交换机,但是他们都只能识别IP,不能识别我们输入的域名(不只是这一个原因),毕竟物理层决定了应用层的一些东西。所以我们这个流程的第一步就是通过域名去将对应的主机IP拿到。所以这个时候就需要一个系统或者工具去获取。这个就是我们要讲的域名系统。在讲之前,关于主机的标识(域名和ip)可以看看先简单介绍。

1、域名

因特网上的主机和人类一样,可以用多种方式进行标识。主机的一种标识方法是用它的主机名,也就是域名。

2、IP地址

ip(ipV4)地址有四个字节,以句号分隔开,表示0 ~ 255的十进制数字。为什么说IP地址是有层次结构,因为当我们从左至右扫描时,我们会得到越来越具体的关于主机在众多网络中的位置信息。

二、什么是DNS。

DNS 即域名系统,全称是 Domain Name System。主要任务:将主机名转换未IP地址。下面是摘自《计算机网络:自顶向下方法》的概念:

DNS是:

1、一个由分层的 DNS 服务器实现的分布式数据库 2、一个使得主机能够查询分布式数据库的应用层协议

所以我们得到几个重要的信息。它是一个分层的 DNS 服务器实现的 分布式数据库、也是应用层的协议

三、什么是分布式

分布式是计算机的一种算法,一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果。

对于DNS来说,世界上没有一台DNS服务器有因特网网上所有主机的映射,每台DNS只负责部分映射(因为全球只有13个根DNS服务器,美国占据9台,中国无)。

四、什么是分层

大致来说,DNS服务器有3种类型:根DNS服务器、顶级域(Top-Level Domain,TLD)DNS服务器和权威DNS服务器。他们层次结构如下:图片来源:《计算机网络:自顶向下方法》

根DNS服务器

根 DNS 服务器的作用是什么呢?就是管理它的下一级,也就是顶级域 DNS 服务器。通过询问根 DNS 服务器,我们可以知道一个主机名对应的顶级域 DNS 服务器的 IP 是多少,从而继续向顶级域 DNS 服务器发起查询请求。关于根服务器的数量和管理如下图:

顶级域 DNS 服务器

比如 www.baidu.com,那 com 是顶级域名,常见的顶级域名还有 cn、org、edu 等。顶级域 DNS 服务器,也就是 TLD,提供了它的下一级,也就是权威 DNS 服务器的 IP 地址。

权威 DNS 服务器

权威 DNS 服务器可以返回主机 - IP 的最终映射。

除了上面重要的DNS以外ia,还有一类很重要的DNS,本地DNS服务器。

五、本地DNS服务器

我们从上面DNS层次结构中并没有看见有本地DNS服务器,因为从严格来说,它不属于改服务器的层次结构中,但是它对DNS层次结构是重要的。每个ISP(一个大学、一个公司、一个居民区的ISP)都有一台本地DNS服务器。当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,本地 DNS 服务器起着代理的作用,并负责将该请求转发到 DNS 服务器层次结构中。

接下来就让我们通过一个简单的例子,看看 DNS 的查询过程是怎样的,看看客户端、本地 DNS 服务器、DNS 服务器层次结构之间是如何交互的。

如下图,假设主机 m.n.com 想要获取主机 a.b.com 的 IP 地址,会经过以下几个步骤:

1

首先,主机 m.n.com 向它的本地 DNS 服务器发送一个 DNS 查询报文,其中包含期待被转换的主机名 a.b.com;

2

本地 DNS 服务器将该报文转发到根 DNS 服务器;

3

该根 DNS 服务器注意到 com 前缀,便向本地 DNS 服务器返回 com 对应的顶级域 DNS 服务器(TLD)的 IP 地址列表。

意思就是我知道a.b.com的IP可能所在的 TLD 服务器列表。

4

本地 DNS 服务器则向其中一台 TLD 服务器发送查询报文;

5

该 TLD 服务器注意到 b.com 前缀,便向本地 DNS 服务器返回权威 DNS 服务器的 IP 地址。

6

本地 DNS 服务器又向其中一台权威服务器发送查询报文;

7

终于,该权威服务器返回了 a.b.com 的 IP 地址;

8

本地 DNS 服务器将 a.b.com 跟 IP 地址的映射返回给主机 m.n.com,m.n.com 就可以用该 IP 向 a.b.com 发送请求啦。

到这里,你是不是觉得上面的这个查询很熟悉,一个输入条件、一个不断循环去拿IP、最后返回IP给本地DNS服务器,所以这个地方从主机向本地DNS服务器发出的查询就相当于是递归查询。然后在查询过程中用了迭代。

当然,并不是所有的DNS查询都是用 递归 + 迭代 模式。也可以是单一的递归或者 迭代。例如下面就是只有递归。

六、DNS 缓存

并不是每次请求都会走DNS这个流程,因为一般根DNS服务器不会有大的变动,所以就做了DNS缓存。一般的缓存有浏览器、本地的hosts文件、本地DNS解析器缓存、服务器缓存。这些都是在DNS 查询的过程中,当某一台 DNS 服务器接收到一个 DNS 应答(例如,包含某主机名到 IP 地址的映射)时,它就能够将映射缓存到本地,下次查询就可以直接用缓存里的内容。当然,缓存并不是永久的,每一条映射记录都有一个对应的生存时间,一旦过了生存时间,这条记录就应该从缓存移出。 当然。有了缓存,大多数 DNS 查询都绕过了根 DNS 服务器,需要向根 DNS 服务器发起查询的请求很少。

到这里。关于DNS的细节就了解清楚啦。

参考资料: 1、计算机网络:自顶向下方法(书籍,需要的私我)。2、根服务器全球部署信息 3、[阮大神技术文章根域名的知识](www.ruanyifeng.com/blog/2018/0… 4、juejin.cn/post/699034…