浏览器输入URL到渲染的过程:DNS解析
什么是DNS
DNS(Domain Name System,域名系统)是互联网的一个关键组件,它将用户友好的域名(如 www.example.com 转换为计算机可以理解的IP地址(如:192.168.1.1),从而使用户能够方便地访问互联网资源。
如果没有DNS我们可能需要记一长串的IP地址才能访问到相应的主机地址,有没有想起4399创始人李兴平的故事?但是因为DNS的存在,当哈士奇不记得去哪搜索的时候总会记起 www.baidu.com ,这就是DNS的作用。
DNS解析域名的过程
如上图所示,DNS解析域名主要通过四步
本地域名服务器->根域名服务器->顶级域名服务器->权威域名服务器
本地域名服务器
本地域名服务器(Local DNS Server)是指在本地网络内部设置的域名解析服务器。它的主要功能是将域名转换为IP地址,方便用户访问网络资源。本地域名服务器可以提高域名解析速度,减轻上级DNS服务器的负载,并且在一定程度上提高网络的安全性和可靠性。
在拿到URL包含的域名以后,会首先进入本地的域名服务器查找是否曾经搜索过相同的域名,确保减少上级服务器的负载,如果本地域名服务器没有,则会递归查询进入下一个域名服务器——根域名服务器
在正式开始之前,要给大家讲到一个很重要的事情,根域名和顶级域名服务器是没有办法直接查询到IP地址的,它们只能作为指引方向的服务器帮助我们找到下一个服务器,也就是我们不可能通过查找根域名服务器就能获取到IP地址。所以大家千万不要被图片所误导认为每个服务器都可以找到IP地址。
根域名服务器(.)
根域名服务器(Root Name Server)是DNS中最高级别的域名服务器,负责返回顶级域的权威域名服务器地址。它们是互联网基础设施中的重要部分,因为所有域名解析操作均离不开它们。由于DNS和某些协议(未分片的用户数据报协议(UDP)数据包在IPv4内的最大有效大小为512字节)的共同限制,根域名服务器地址的数量被限制为13个。
由于根域名服务器数量受限,但是根域名服务器的需求量大,因此,在后来采用了镜像根域名服务器的方式大大增加了实际运行根域名服务器的数量,采用任播技术架设的,有兴趣的可以了解一下。
目前我们主要是使用的F、I、J、K、L五个根服务器的21个镜像根服务器进行服务的。
当我们在根域名服务器找到对应顶级域名服务器的位置以后,就会进入到下一阶段——顶级域名服务器。
顶级域名服务器(.com/.cn/.org等)
顶级域名服务器(Top-Level Domain Server,简称TLD服务器)是一个关键组件,负责管理和解析顶级域名(Top-Level Domains, TLD)。顶级域名是指域名系统中最高层级的域名,常见的有.com
、.org
、.net
、以及各国的国家代码顶级域名(ccTLD),如.cn
(中国)、.uk
(英国)等。
它的作用也是指引我们找到下一个服务器的地址,那么我们快进到——权威服务器的阶段。
权威域名服务器( www.baidu 等 )
权威域名服务器(Authoritative Name Server)是关键的组件之一。它们是负责存储并提供域名与IP地址对应关系的服务器,确保互联网用户能够正确地访问网站和其他网络资源。
当进入到这一阶段,我们就可以通过权威服务器的地址成功拿到对应的IP地址了,这个是我们需要请求资源的地址。
所以实际上我们输入的网站地址应该是这样的:
DNS的查询类型
再给大家讲一讲DNS的查询类型。
1. 递归查询(Recursive Query)
递归查询是指DNS客户端向DNS服务器发出请求,要求其对某个域名进行解析,并且DNS服务器必须返回最终的解析结果(即IP地址)。在递归查询过程中,如果DNS服务器无法在自身缓存中找到该域名的记录,它会代表客户端向其他DNS服务器发送查询请求,直到获取到最终结果。
递归查询过程:
- 用户请求:客户端(如浏览器)向本地DNS服务器发出递归查询请求,要求解析
www.example.com
。 - 本地DNS服务器查询:如果本地DNS服务器缓存中没有记录,它会向根DNS服务器发出查询请求。
- 根DNS服务器响应:根DNS服务器返回顶级域名服务器(TLD服务器)的地址,如
.com
服务器。 - 本地DNS服务器继续查询:本地DNS服务器向TLD服务器发出请求,获取
example.com
域名的权威DNS服务器地址。 - 权威DNS服务器响应:本地DNS服务器向权威DNS服务器发送请求,最终获取
www.example.com
的IP地址。 - 结果返回:本地DNS服务器将结果返回给客户端。
递归查询的优势在于客户端只需向本地DNS服务器发出一次请求,其余的查询过程由本地DNS服务器处理,简化了客户端的负担。
这就是我们之前提到的递归查询。
2. 迭代查询(Iterative Query)
迭代查询是指DNS服务器在接收到查询请求后,如果无法解析该请求,则会返回一个指向下一步查询的推荐服务器地址。客户端根据返回的推荐地址继续发出查询,直到获取到最终的解析结果。
迭代查询过程:
- 用户请求:客户端向本地DNS服务器发出迭代查询请求,要求解析
www.example.com
。 - 本地DNS服务器查询:如果本地DNS服务器缓存中没有记录,它会向根DNS服务器发出查询请求。
- 根DNS服务器响应:根DNS服务器返回TLD服务器的地址,如
.com
服务器。 - 客户端继续查询:客户端向TLD服务器发出请求,获取
example.com
域名的权威DNS服务器地址。 - 权威DNS服务器响应:客户端向权威DNS服务器发送请求,最终获取
www.example.com
的IP地址。
迭代查询的特点是客户端需要多次发出查询请求,每一步都需要处理和解析服务器返回的推荐地址,直到获取最终结果。
3. 非递归查询(Non-Recursive Query)
非递归查询是指DNS服务器在接收到查询请求后,如果其缓存中有对应的记录,则直接返回结果;如果没有,则返回一个指向下一步查询的推荐服务器地址。非递归查询通常在DNS服务器之间进行,用于优化查询效率。
非递归查询过程:
- 用户请求:客户端向本地DNS服务器发出非递归查询请求,要求解析
www.example.com
。 - 本地DNS服务器查询:如果本地DNS服务器缓存中没有记录,它返回根DNS服务器的地址。
- 客户端继续查询:客户端向根DNS服务器发出请求,获取TLD服务器的地址。
- 客户端继续查询:客户端向TLD服务器发出请求,获取权威DNS服务器的地址。
- 权威DNS服务器响应:客户端向权威DNS服务器发送请求,最终获取
www.example.com
的IP地址。
非递归查询的应用场景主要在于优化服务器间的查询效率,减少网络负担。
小结
我们在这章讲了DNS解析的过程,在通过DNS解析以后,我们就可以得到访问的主机地址并开始准备建立连接了。
转载自:https://juejin.cn/post/7385102654190731304