DNS域名解析的底层逻辑描述

简单粗暴的一句话解释

网站通过域名来识别和定位,而域名通过DNS解析得到对应的IP地址,最终通过IP地址实现连接和访问。

比如我们使用ping命令ping百度:

可以看到baidu.com解析为ip:110.242.68.66

域名与 IP 地址

  1. IP地址与域名是一对多的关系。一个ip地址可以对应多个域名,但是一个域名只有一个IP地址。
  2. 域名的出现就是为了方便管理和记忆ip。
  3. IP 地址和域名之间的映射是通过域名系统(DNS)来实现的。

域名结构树

根据上图可以直观地看出域名结构:

  1. 根域

    位于域名空间最顶层,一般用一个 “.” 表示

  2. 顶级域

    一般代表一种类型的组织机构或国家地区,如 net、com、org、edu、gov、mil、cn、jp、hk

  3. 二级域

    用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,如 .cn 顶级域名下面设置的二级域名:.com.cn、.net.cn、.edu.cn …

  4. 子域

    二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名

  5. 主机

    主机位于域名空间最下层,就是一台具体的计算机,如 www、mail 等都是具体的计算机名字

域名服务器/DNS系统

域名系统(Domain Name System, DNS):因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名转换为便于机器处理的IP地址。

域名服务器:因特网的域名系统被设计成一个联机分布式的数据库系统,并采用客户/服务器模型。

主要有4种类型的域名服务器:

  • 根域名服务器

    根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的IP地址。
    根域名服务器也是最重要的域名服务器,不管是哪个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就要先求助于根域名服务器。
    因特网上有13个根域名服务器,尽管我们将这13个根域名服务器中的每个都视为单个服务器,但每个“服务器”实际上是冗余服务器的集群,以提供安全性和可靠性。
    需要注意的是,根域名服务器用来管辖顶级域(如.com), 通常它并不直接把待查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应当找哪个顶级域名服务器进行查询。

  • 顶级域名服务器

    这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。
    当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当查找的域名服务器的IP地址)。

  • 授权域名服务器(权限域名服务器)

    每台主机都必须在授权域名服务器处登记。为了更加可靠地工作,一台主机最好至少有两个授权域名服务器。
    实际上,许多域名服务器都同时充当本地域名服务器和授权域名服务器。
    授权域名服务器总能将其管辖的主机名转换为该主机的IP地址。

  • 本地域名服务器

    本地域名服务器对域名系统非常重要。
    每个因特网服务提供者(ISP), 或一所大学,甚至一所大学中的各个系,都可以拥有一个本地域名服务器。
    当一台主机发出DNS查询请求时,这个查询请求报文就发送给该主机的本地域名服务器。
    事实上,我们在Windows系统中配置“本地连接”时,就需要填写DNS地址,这个地址就是本地DNS (域名服务器)的地址。

域名解析过程

  • 域名解析是指把域名映射成为IP地址或把IP地址映射成域名的过程。前者称为正向解析,后者称为反向解析。
  • 当客户端需要域名解析时,通过本机的DNS客户端构造一个DNS请求报文,以UDP数据报方式发往本地域名服务器。
  • 域名解析有两种方式:递归查询递归与迭代相结合的查询。

1.为了提高DNS的查询效率,并减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。
2.当一个DNS服务器接收到DNS查询结果时,它能将该DNS信息缓存在高速缓存中。这样,当另一个相同的域名查询到达该DNS服务器时,该服务器就能够直接提供所要求的IP地址,而不需要再去向其他DNS服务器询问。
3.因为主机名和IP地址之间的映射不是永久的,所以DNS服务器将在一段时间后丢弃高速缓存中的信息。

域名解析记录类型

相信买过域名的同学都使用过域名解析,还会发现有很多不同的类型和记录值,第一次用的时候还是有些懵的,所以去学习了一下,回来记录。

A

用来指定主机名(或域名)对应IP地址的记录。
用户可以将该域名下的网站服务器指向到自己的web server上,同时也可以设置域名的子域名。
比如我们添加一条A记录将www的主机指向IP为192.168.1.1,那么当你访问www主机时就会解析到192.168.1.1这个IP上。

CNAME

常被称为别名解析,是主机名到主机名的映射。
当需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添加 CNAME 记录。与A记录不同,CNAME的记录值不是一个固定的IP,而是主机的别名地址。
别名解析可以提供更大的灵活性,便于统一管理。比如,当主机因某种因素的影响需要更换IP时,如果域名做了CNAME记录,就可以同时更新别名的解析指向,不需要进行新的解析操作。
应用场景包括CDN、企业邮箱、全局流量管理等。

TXT

一般指为某个主机名或域名设置的说明,或者联系方式,或者标注提醒等等,相对简单。
TXT 记录常用的方式还有做 SPF 记录(反垃圾邮件)和SSL证书的DNS验证等。

NS

如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录(Name Server)。
NS记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。NS记录中的IP即为该DNS服务器的IP地址。大多数域名注册商默认用自己的NS服务器来解析用户的DNS记录。
比如我的一级域名为xxfer.cn,而博客使用的是blog.xxfer.cn这个二级域名,在将这个二级域名指向GitHub源服务器IP时,如果不做二级域名(子域名)的NS解析,会发现二级域名无法正确解析。一般想要使用个人域名的一个子域名时,需要在一级域名做两条NS解析记录,记录值一般为ns1.domain.com、ns2.domain.com。

上面应该是比较常见的几种解析记录类型

SOA

SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何DNS记录文件中,都是以SOA ( Startof Authority )记录开始。SOA资源记录表明此DNS名称服务器是该DNS域中数据信息的最佳来源。
SOA记录与NS记录的区别:NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;SOA记录设置一些数据版本和更新以及过期时间等信息。

SPF

用于识别哪些服务器被允许代表你的域名发送电子邮件。
它通过列出已被授权为你的域名发送电子邮件的服务器来做到这一点。如果任何其他服务器试图代表你的域名发送电子邮件,它将被拒绝为未经授权的发件人。

AAAA

用来将域名解析到IPv6地址的DNS记录。
用户可以将一个域名解析到IPv6地址上,也可以将子域名解析到IPv6地址上。国内大多数IDC不支持AAAA记录的解析,因此如果想进行AAAA记录解析,则需对域名NS记录设置一些专业的域名解析服务商,由他们提供AAAA记录的设置。
国科云云解析支持IPv6环境下的AAAA记录解析。
AAAA记录与A记录的区别就在于解析到的IP地址为IPv4还是IPv6。

MX

邮件交换记录。
用于将以该域名为结尾的电子邮件指向对应的邮件服务器以进行处理。如:用户所用的邮件是以域名mydomain.com为结尾的,则需要在管理界面中添加该域名的MX记录来处理所有以@mydomain.com结尾的邮件。
主要用于邮箱解析,在邮件系统发送邮件时根据收信人的地址后缀进行邮件服务器的定位。另外,MX记录允许设置一个优先级,当多个邮件服务器可用时,会根据该值决定投递邮件的服务器。

PTR

“反向DNS”,可以粗略理解为是一个指针记录,用于将一个IP地址映射到对应的主机名,也可以看成是A记录的反向,即通过IP访问域名。

SRV

服务定位资源记录,用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等。

URL转发

通过服务器的特殊设置,将当前访问的域名指向另一个指定的网络地址。
根据目标地址的隐藏与否,URL转发可以分为显性URL和隐性URL两种。

显性URL:将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址,地址栏显示为目标网站地址。

隐性URL:与显性URL类似,但隐性转发会隐藏真实的目标地址,地址栏中显示为仍为此前输入的地址。

有点类似重定向

记录类型当然也会有共存冲突:

推荐视频

最后

不管在DNS还是CDN的应用中,Web通信中还有一项非常重要的技术,感兴趣的同学可以观看这篇CDN服务商是如何解决安全问题的?