域名系统这个简称是DNS的系统, 就是互联网基础设施中间的分布式目录数据库, 它的核心功能就是把用户输入的可读的域名解析成网络通信需要的IP地址, 就像那个gname.xin一样。如果没有DNS的话, 那么用户就必须依靠记忆去输入一串数字的IP地址, 只有这样才能够访问到任何一个网站。

域名系统的层级结构

这种域名系统呢, 它使用的是, 从左往右、层级递减的树形命名架构这个模式的。

根域(.): 全球总共只有 13 组根服务器集群, 这些集群负责指路, 帮助人们去到达各个顶级域。

顶级的分类名称, 比方说像 .com 这样子的, 还有 .xin , 以及 .cn , 这些是由ICANN授权机构统一进行分配的。

二级域: 以 gname.xin 为例, gname 也就是二级域名, 它是由注册局分配给具体注册人的。

阜新市自然资源事务服务中心

主机名或者子域, 这个说法就像是www.gname.xin这样, 具体的操作是由站点的拥有者自己去在DNS里面完成配置的。

每一层域名的管理职责是不同的, 上级负责为下级指路域名系统,不直接存储下级所有数据。

一次完整的DNS解析流程

用户把gname.xin输入到浏览器里面去, 然后按下那个回车键, 这个解析的过程就是按照下面的这个顺序来一步步地进行的:

1. 本地缓存检查: 这个时候操作系统去查它自己的DNS缓存, 紧接着浏览器也去查它自己的DNS缓存, 如果这里面都有结果也就是命中的话就赶紧把这个IP地址直接返回去, 那么这个查找流程也就到此为止了。

2. 查询本地递归解析器: 缓存没有命中域名系统,这就向着那些由互联网服务提供商所分配, 或者是由用户手动去配置出来的那种递归式的域名服务器, 像运营商的域名服务器等等这样的一种目标, 去发起一个完整的全程的查询请求。

域名系统DNS怎么运作?从输入网址到网页打开的完整解析流程(图1)

3. 递归服务器要执行迭代查询, 也就是它自己在不断地去问。

先来询问一下根服务器, 问问它“gname.xin 该问谁”, 然后根服务器会返回那个 .xin 的顶级域服务器地址。

然后再去问那个 .xin 顶级域的服务器一下, 它会返回 gname.xin 这个域名的权威名称服务器的地址。

最后向该权威服务器查询, 获得 gname.xin 对应的A记录(IP地址)。

4. 结果返回与缓存: 递归服务器把IP地址返回给了客户端, 然后各级缓存都会把这个结果给记录下来, 这些结果在缓存里能待多长时间, 就要看记录里面的TTL值到底是多少。

整个过程如果是按照通常的流程来走, 那么时间往往是需要大约50毫秒到200毫秒这么长的。

常用DNS记录类型

记录类型 核心用途
A 域名 → IPv4 地址
AAAA 域名 → IPv6 地址
CNAME 将别名指向另一域名(如 www 指向根域)
NS 指定该域名区域由哪些名称服务器负责
MX 指定该域的邮件接收服务器及优先级
SOA 区域权威信息(管理员邮箱、刷新/重试参数)
TXT 存放验证文本(SPF、DKIM、域名所有权验证)

关键注意事项

TTL决定生效速度, 这个意思是说, 在修改了DNS记录之后, 整个网络能够完成更新并且生效所需要花费的总时间, 是由那个修改操作发生之前, 各个节点缓存里所保存着的TTL数值来决定的, 所以如果遇到需要做紧急变动的情况, 正确的做法是先提前一步把TTL的数值调整成60秒之后再动手去修改相应的设定内容。

递归与迭代的区别是, 递归查询的过程是由DNS服务器来帮助完成所有阶段的链路解析的, 而迭代查询则是直接告诉客户端下一步应该去向哪里询问, 在实际情况中, 客户端向服务器发起的是属于递归类型的请求, 然后对于上游的其他DNS服务器, 当前这个负责接收请求的递归服务器执行的操作是属于迭代类型的查询。

注册与解析分离: 域名的注册信息, 就是咱们说的Whois数据, 是由注册局进行管理的, 而DNS的解析记录, 则是由注册商或者托管商来管理, 这两者在技术路径上是彼此独立的。

建议每个二级域至少要配置两个不同运营商的NS记录, 这种做法就是一种冗余配置, 目的是为了避免因为出现单点故障而导致域名没有办法进行解析。