7-9 DNS域名系统
DNS域名系统
DNS作用:把域名转换成IP地址。
DNS/DHCP服务器必须为静态IP地址,而Web/FTP均可为动态IP。
Linux系统中提供DNS服务的组件为bind,主配置文件为named.conf
诊断域名系统基础结构的信息和查看DNS服务器的IP地址命令是:nslookup
DNS记录类型
(记忆,必考六种记录类型)
| 记录类型 | 说明 | 备注 |
|---|---|---|
| SOA | SOA叫起始授权机构记录,SOA记录用于在众多NS记录中哪一台是主服务器 | SOA记录还设置一些数据版本和更新以及过期时间的信息 |
| A | 把主机名解析为IPv4地址 | www.test.com → 1.1.1.1 |
| AAAA | 把主机名解析为IPv6地址 [IPv4地址是32位,IPv6地址为128位,是4倍关系] |
www.test.com→2001::1 |
| 指针 PTR | 反向查询,把IP地址解析为主机名 | 1.1.1.1 → www.test.com |
| 名字服务器 NS | 为一个域指定授权域名服务器,该域的所有子域也被委派给这个服务器 | 比如某个区域由ns1.domain.com进行解析 |
| 邮件服务器 MX | 指明区域的邮件服务器及优先级 | 建立电子邮箱服务,需要MX记录将指向邮件服务器地址 |
| 别名 CNAME | 指定主机名的别名 把主机名解析为另一个主机名 |
www.test.com别名为webserver12.test.com |
DNS查询
DNS查询过程


递归查询:域名服务器帮助用户进行名字解析,并返回最后的结果。【老好人】
迭代查询:域名服务器进行迭代访问,反复多次,直到最后找到结果。【踢皮球】
DNS(域名系统)查询过程是将域名(如www.example.com)转换为对应IP地址的层级化步骤,涉及多个缓存和服务器的协作。以下是详细流程及关键机制:
1. 本地缓存检查
- 浏览器缓存:用户输入域名后,浏览器首先检查自身缓存(记录最近访问的域名与IP映射)。
- 操作系统缓存:若浏览器未命中,系统会检查本地
hosts文件或DNS缓存(由操作系统维护,使用命令ipconfig /displaydns可以查询本地DNS缓存记录,使用命令ipconfig /flushdns可以清除本地DNS缓存记录)。 - 目的:快速返回结果,减少网络请求。
2. 递归查询(Recursive Query)
若本地无记录,请求将发送至本地DNS服务器(也称主域名服务器)(通常由ISP或网络管理员提供):
- 递归解析:本地DNS服务器代替客户端完成后续查询,直至返回结果。
- 本地服务器缓存:检查自身缓存,若命中则直接返回结果。
3. 迭代查询(Iterative Query)
若本地服务器未缓存目标域名,则通过以下层级迭代查询:
- 根域名服务器(Root Server) :本地服务器向根服务器发起请求,根服务器返回负责该**顶级域名(TLD)**的服务器地址(如
.com、.org)。 - 顶级域名服务器(TLD Server) :TLD服务器返回该域名的权威DNS服务器地址(如
example.com的权威服务器)。 - 权威DNS服务器 (授权域名服务器):权威服务器提供最终的IP地址记录(A记录或AAAA记录)。
4. 结果返回与缓存
- 响应链路:权威服务器→TLD服务器→根服务器→本地DNS服务器→客户端。
- 缓存机制:每级服务器或客户端可能缓存结果,设置TTL(生存时间)控制有效期。
关键概念区分
- 递归 vs 迭代
- 递归查询:由客户端发起,要求DNS服务器必须返回最终结果(成功或失败)
- 迭代查询:由DNS服务器发起,其他服务器仅返回“下一步建议”,不保证最终结果。
- 权威服务器:存储域名与IP映射的官方数据库,如
example.com的权威服务器由域名注册商配置。
示例流程(以www.example.com为例)
- 用户输入
www.example.com,浏览器/系统缓存未命中。 - 请求发送至本地DNS服务器(主域名服务器),其缓存中无记录。
- 本地服务器向根服务器查询
.com的TLD服务器地址。 - 根服务器返回
.comTLD服务器的IP。 - 本地服务器向
.comTLD服务器查询example.com的权威服务器。 - TLD服务器返回
example.com权威服务器的IP。 - 本地服务器向权威服务器请求
www.example.com的IP。 - 权威服务器返回IP,本地服务器缓存结果并返回给用户。
优化与安全
- DNS缓存:减少重复查询,提升效率,但可能导致更新延迟(依赖TTL)。
- CDN与负载均衡:权威服务器可能返回多个IP(如CDN节点),实现流量分发。
- DNSSEC:通过数字签名验证DNS响应的真实性,防止劫持。
通过上述步骤,DNS查询实现了从域名到IP的高效、分布式解析,支撑了全球互联网的正常运行。
补充:由于递归查询对于被查询的域名服务器负担太大,通常采用以下模式,从请求主机到本地域名服机的查询采用递归查询方式,而其余的查询是迭代查询方式。

例题
例题1

解析:在域名解析过程中,根域名服务器一般是迭代查询,排除D。授权域名服务可能是递归、也可能是迭代查询,故C不对;主域名服务器(本地域名服务器)没有给客户返回查询结果,肯定是迭代查询,故排除B,正确答案选A。
注:由授权域名服务器传回解析结果,并不能说明授权域名服务器是递归查询,需要看如果他本地查不到,是否还会踢皮球,如果踢皮球那么是迭代,如果不踢皮球,就是递归(一般授权域名服务器会踢皮球)
例题2

解析:递归是老好人,会帮你找到答案,返回给你;迭代是踢皮球,让你去其他人。
- 全球只有13台根域名服务器,不可能递归给你查找,不然会累崩。
- 域内主域名服务器返回用户查询请求是自己分内工作(专门干这事,所以不能偷懒,一定给出满意的结果),是递归查询。
例题3

例题4

解析:如果202.112.115.3采用递归,肯定是由他给客户端返回查询结果。本题中是由授权域名服务器返回的结果,说明主域名服务器踢皮球踢【迭代】给了授权域名服务器。授权域名服务器可能选代,也可能是递归算法。
例题5

解析:
- 本地域名服务器是递归
- 根域名服务器是迭代
- 中介域名服务器是递归
- 授权域名服务器可能采用迭代,也可能递归。
Z例题6

解析:IPv4正向解析记录为A记录,IPv6为AAAA记录,因为IPv4地址是32位,IPv6地址为128位,是4倍关系
Z例题7

解析:hosts文件中存在主机名(域名)和IP地址的映射关系,且不会过期,而DNS缓存会超时过期。
/etc/networks用于网络别名解析,但现代Linux已很少使用。/etc/hostname影响主机名称,但不影响域名解析。/etc/hosts优先于DNS,用于静态解析本地或局域网内的主机名。/etc/resolv.conf用于DNS解析,指定外部DNS服务器地址,用来指定DNS服务器解析顺序。