计网 - DNS 域名解析系统

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 计网 - DNS 域名解析系统

20210702225354984.jpg

Pre


在浏览器中输入一个 URL,或者用curl请求一个网址……域名系统(Domain Name System)就开始工作了。作为互联网的一个重要成员,域名系统是将互联网资源和地址关联起来的一个分布式数据库。


统一资源定位符(URL)


域名系统本质是定位资源。互联网中有各种各样的资源,比如视频、图片、文件、网页……为了准确地定位资源,人们发明了统一资源定位符(URL,Uniform Resource Locator),这样我们就可以通过字符串定位一个互联网的资源。

下图是一个 URL 的示例:

20210713203232133.png


Scheme 部分代表协议,不只有 https,还有 ftp、ssh 等。不同协议代表着不同类型的应用在提供资源。


Host 部分代表站点,我们今天介绍的 DNS 主要作用就是根据 Host 查找 IP 地址。


Port 是端口,代表提供服务的应用。


Path 是路径,代表资源在服务中的路径。


Query 是查询条件,代表需要的是资源中的某一个部分。


Fragment 是二级查询条件,通常不在服务端响应,而是用于前端展示定位内容。


总的来说,URL 是一种树状的设计, Host 代表主机(对应的 IP 地址由 DNS 服务提供);Port 代表应用;Path 代表资源在应用中的路径;Query 代表对资源的查询条件。通过这种设计,互联网中万亿级别的资源都可以得到有效区分。


值得一提的是,树状的设计在今天计算机中也非常常见,比如文件目录的设计、源代码块的嵌套设计、JSON 和 XML 的设计,都是树状关系。


域名系统 DNS


DNS(Domain Name System,域名系统)是一个将域名和 IP 地址相互映射的分布式服务


根域名服务器


DNS 本身是一个出色的分布式架构。


位于最顶层的是根域名服务器(Root Name Server)。人们在全世界范围内搭建了多台根域名服务器,2016 年的统计数据中,全世界目前有 13 台 IPv4 根服务器,25 台 IPv6 根服务器。


根域名服务器存储的不是域名和 IP 的映射关系,而是一个目录。


如果将所有的域名记录都存放到根域名服务器,从存储量上来说,不会非常巨大。要知道一个域名记录——域名、IP 地址和额外少量信息,并不需要大量存储空间。


但是如果全世界所有的 DNS 请求都集中在少量的根服务器上,这个访问流量就会过于巨大。而且一旦发生故障,很容易导致大面积瘫痪。


而且因为根服务器较少,所以如果全部都走根服务器,不同客户端距离根服务器距离不同,感受到的延迟也不一样,这样对用户来说不太友好。


因此,因为流量、防止单点故障、平衡地理分布等问题,根域名服务器只是一个目录,并不提供具体的数据。


域名分级和数据分区


我们知道中文字典可以按照偏旁部首以及拼音索引,和字典类似,根服务器提供的目录也有一定的索引规则。


在域名的世界中,通过分级域名的策略建立索引。伴随着域名的分级策略,实际上是域名数据库的拆分。通过域名的分级,可以将数据库划分成一个个区域。


平时我们看到的.com.cn.net等,称为顶级域名。比如对于 www.artisan.com 这个网址来说,com是顶级域名,artisan是二级域名,www是三级域名。


域名分级当然是为了建立目录和索引,并对数据存储进行分区。


20210713204036914.png


从上图中可以看到,DNS 的存储设计是一个树状结构。叶子节点中才存放真实的映射关系,中间节点都是目录。存储分成 3 层:


顶部第一级是根 DNS 存储,存储的是顶级域的目录,被称作根 DNS 服务器;


第二级是顶级域存储,存储的是二级域的目录,被称作顶级域 DNS 服务器(Top Level DNS,TLD);


最后一级是叶子节点,存储的是具体的 DNS 记录,也被称作权威 DNS 服务器。


DNS 查询过程


当用户在浏览器中输入一个网址,就会触发 DNS 查询。这个时候在上述的 3 个层级中,还会增加本地 DNS 服务器层级。本地 DNS 服务器包括用户自己路由器中的 DNS 缓存、小区的 DNS 服务器、ISP 的 DNS 服务器等。


查询过程如下图所示:


20210713204234822.png


结合上图展示的DNS 查询过程,我们再来具体介绍一下 。


用户输入网址,查询本地 DNS。


本地 DNS 是一系列 DNS 的合集,比如 ISP 提供的 DNS、公司网络提供的 DNS。本地 DNS 是一个代理,将 DNS 请求转发到 DNS 网络中。如果本地 DNS 中已经存在需要的记录,也就是本地 DNS 缓存中找到了对应的 DNS 条目,就会直接返回,而跳过之后的步骤。


客户端请求根 DNS 服务器。


如果本地 DNS 中没有对应的记录,那么请求会被转发到根 DNS 服务器。根 DNS 服务器只解析顶级域,以“www.artisan.com”为例,根 DNS 服务器只看 com 部分。


根 DNS 服务器返回顶级 DNS 服务器的 IP。


客户端请求顶级 DNS 服务器,顶级 DNS 服务器中是具体域名的目录。


顶级 DNS 服务器返回权威 DNS 服务器的 IP。


客户端请求权威 DNS 服务器。在权威 DNS 服务器上存有具体的 DNS 记录。以 artisan为例,权威 DNS 服务器中可能有和 artisan.com 相关的上百条甚至更多的 DNS 记录,会根据不同的 DNS 查询条件返回。


权威 DNS 服务器返回 DNS 记录到本地 DNS 服务器。


本地 DNS 服务器返回具体的 DNS 记录给客户端。


在上述 8 个过程全部结束后,客户端通过 DNS 记录中的 IP 地址,可以找到请求服务的主机。 客户端最终可以找到 对应的 IP 地址,从而获得 Web 服务。


关于缓存


在上面的例子当中,每一步都有缓存的设计。浏览器会缓存 DNS,此外,操作系统、路由器、本地 DNS 服务器也会……因此,绝大多数情况,请求不会到达根 DNS 服务器。


以artisan为例,如果在某个时刻同一个区域内有一个用户触发过上述 1~8 的过程,另一个同区域的用户就可以在本地 DNS 服务器中获得 DNS 记录,而不需要再走到根 DNS 服务器。这种设计,我们称作分级缓存策略。


在分级缓存策略中,每一层都会进行缓存,经过一层层的缓存,最终命中根 DNS 服务、顶级 DNS 服务器以及权威 DNS 服务的请求少之又少。这样,互联网中庞大流量的 DNS 查询就不需要大量集中的资源去响应。


DNS 记录


我们来看看一个 DNS 记录具体长什么样子:


; 定义www.example.com的ip地址
www.example.com.     IN     A     139.18.28.5;


上面的就是一条 DNS 记录,纯文本即可。IN 代表记录用于互联网,是 Intenet 的缩写。在历史上 Internet 起源于阿帕网,在同时代有很多竞争的网络,IN 这个描述也就保留了下来。


www.example.com 是要解析的域名。A 是记录的类型,A 记录代表着这是一条用于解析 IPv4 地址的记录。从这条记录可知,www.example.com的 IP 地址是 139.18.28.5。;是语句块的结尾,也是注释。


那么除了 A 记录,还有哪些 DNS 记录的类型呢?DNS 记录的类型非常多,有 30 多种。其中比较常见的有 A、AAAA、CNAME、MX,以及 NS 等


DNS 记录的类型

CNAME

CNAME(Canonical Name Record)用于定义域名的别名,如下面这条 DNS 记录:

; 定义www.example.com的别名
a.example.com.          IN     CNAME   b.example.com.



这条 DNS 记录定义了 a.example.com 是 b.example.com 的别名。用户在浏览器中输入 a.example.com 时候,通过 DNS 查询会知道 a.example.com 是 b.example.com 的别名,因此需要实际 IP 的时候,会去拿 b.example.com 的 A 记录。


这样用户如果在浏览器中输入 a.example.com 实际打开的就是 b.example.com。因为走的是 DNS 查询的路径,速度很快(因为有缓存),不需要 HTTP 重定向等操作。


当你想把一个网站迁移到新域名,旧域名仍然保留的时候;还有当你想将自己的静态资源放到 CDN 上的时候,CNAME 就非常有用


AAAA 记录


前面我们提到,A 记录是域名和 IPv4 地址的映射关系。和 A 记录类似,AAAA 记录则是域名和 IPv6 地址的映射关系。


MX 记录(Mail Exchanger Record)


MX 记录是邮件记录,用来描述邮件服务器的域名。

在工作中,我们经常会发邮件到某个同事的邮箱。比如说,发送一封邮件到 xiaoming@artisan.com,那么artisan如何知道哪个 IP 地址是邮件服务器呢?


这个时候就可以用到下面这条 MX 记录:

IN MX mail.artisan.com


这样凡是 @artisan的邮件都会发送到 mail.artisan.com 中,而 mail.artisan.com 的 IP 地址可以通过查询 mail.artisan.com 的 A 记录和 AAAA 记录获得。


NS 记录


NS(Name Server)记录是描述 DNS 服务器网址。从 DNS 的存储结构上说,Name Server 中含有权威 DNS 服务的目录。也就是说,NS 记录指定哪台 Server 是回答 DNS 查询的权威域名服务器。


当一个 DNS 查询看到 NS 记录的时候,会再去 NS 记录配置的 DNS 服务器查询,得到最终的记录。如下面这个例子:

a.com.     IN      NS      ns1.a.com.
a.com.     IN      NS      ns2.a.com.


当解析 a.com 地址时,我们看到 a.com 有两个 NS 记录,所以确定最终 a.com 的记录在 ns1.a.com 和 ns2.a.com 上。从设计上看,ns1 和 ns2 是网站 a.com 提供的智能 DNS 服务器,可以提供负载均衡、分布式 Sharding 等服务。比如当一个北京的用户想要访问 a.com 的时候,ns1 看到这是一个北京的 IP 就返回一个离北京最近的机房 IP。


上面代码中 a.com 配置了两个 NS 记录。通常 NS 不会只有一个,这是为了保证高可用,一个挂了另一个还能继续服务。通常数字小的 NS 记录优先级更高,也就是 ns1 会优先于 ns2 响应。


配置了上面的 NS 记录后,如果还配置了 a.com 的 A 记录,那么这个 A 记录会被 NS 记录覆盖。


小结


总结一下,用树状结构来分类和索引符合人类的直觉和习惯,URL 的设计遵循的依然是人的思考方式。


URL 中的 HOST 部分需要被解析为 IP 地址,于是就有了域名系统(DNS)。域名系统是一个分级的分布式系统,整体设计也是一个树状结构。


顶层的根域名服务器和中间的顶级域名服务器,存储的是目录,最终的 DNS 记录由权威域名服务器提供。DNS 记录并不仅仅只有映射 IP 一种能力,DNS 记录还可以设置网站的别名、邮件服务器、DNS 记录位置等能力。


QA CNAME 记录的作用是?


CNAME 是一种 DNS 记录,它的作用是将一个域名映射到另一个域名。域名解析的时候,如果看到 CNAME 记录,则会从映射目标重新开始查询。


相关文章
|
22天前
|
域名解析 缓存 网络协议
减少域名dns解析时间
域名解析中的TTL值设置多少合适
41 5
|
5天前
|
域名解析 弹性计算 安全
阿里云服务器租用、注册域名、备案及域名解析完整流程参考(图文教程)
对于很多初次建站的用户来说,选购云服务器和注册应及备案和域名解析步骤必须了解的,目前轻量云服务器2核2G68元一年,2核4G4M服务器298元一年,域名注册方面,阿里云推出域名1元购买活动,新用户注册com和cn域名2年首年仅需0元,xyz和top等域名首年仅需1元。对于建站的用户来说,购买完云服务器并注册好域名之后,下一步还需要操作备案和域名绑定。本文为大家展示阿里云服务器的购买流程,域名注册、绑定以及备案的完整流程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。
|
17天前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
22天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
50 3
|
27天前
|
网络协议 安全 文件存储
动态DNS(DDNS)技术在当前网络环境中日益重要,它允许使用动态IP地址的设备通过固定域名访问
动态DNS(DDNS)技术在当前网络环境中日益重要,它允许使用动态IP地址的设备通过固定域名访问,即使IP地址变化,也能通过DDNS服务保持连接。适用于家庭网络远程访问设备及企业临时或移动设备管理,提供便捷性和灵活性。示例代码展示了如何使用Python实现基本的DDNS更新。尽管存在服务可靠性和安全性挑战,DDNS仍极大提升了网络资源的利用效率。
48 6
|
25天前
|
机器学习/深度学习 人工智能 数据处理
【AI系统】NV Switch 深度解析
英伟达的NVSwitch技术是高性能计算领域的重大突破,旨在解决多GPU系统中数据传输的瓶颈问题。通过提供比PCIe高10倍的带宽,NVLink实现了GPU间的直接数据交换,减少了延迟,提高了吞吐量。NVSwitch则进一步推动了这一技术的发展,支持更多NVLink接口,实现无阻塞的全互联GPU系统,极大提升了数据交换效率和系统灵活性,为构建强大的计算集群奠定了基础。
55 3
|
27天前
|
域名解析 网络协议 安全
反向DNS解析是从IP地址到域名的映射,主要作用于验证和识别,提高通信来源的可信度和可追溯性
在网络世界中,反向DNS解析是从IP地址到域名的映射,主要作用于验证和识别,提高通信来源的可信度和可追溯性。它在邮件服务器验证、网络安全等领域至关重要,帮助识别恶意行为,增强网络安全性。尽管存在配置错误等挑战,但正确管理下,反向DNS解析能显著提升网络环境的安全性和可靠性。
96 3
|
1月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
90 3
|
24天前
|
前端开发 Android开发 UED
移动应用与系统:从开发到优化的全面解析####
本文深入探讨了移动应用开发的全过程,从最初的构思到最终的发布,并详细阐述了移动操作系统对应用性能和用户体验的影响。通过分析当前主流移动操作系统的特性及差异,本文旨在为开发者提供一套全面的开发与优化指南,确保应用在不同平台上均能实现最佳表现。 ####
24 0
|
1月前
|
存储 自然语言处理 数据可视化
3倍提升效率:医疗病理信息抽取与关系图谱展示系统解析
该项目旨在通过NLP技术将医疗病理报告中的非结构化文本转化为结构化数据,实现信息的高效抽取、存储及可视化展示。利用Python、JavaScript等技术栈,结合Echarts等工具,构建病理信息的关系图谱,支持多条件检索与图表互动,提高医生及研究人员的工作效率。预期成果包括数据结构化、关系图谱可视化、快速检索及数据统计分析等功能。项目预计2-4周完成。

相关产品

  • 云解析DNS
  • 推荐镜像

    更多