Appearance
DNS 域名系统
2026 大纲 六(二)1 层次域名空间、2 域名服务器、3 域名解析过程,三条子项全部由本篇承载。
速查
| DNS 干什么 | 把便于人使用的机器名字转换为 IP 地址。机器处理 IP 数据报时不用域名,是因为 IP 定长而域名不定长 |
| 为什么必须分布 | ① 性能:单台服务器会因过负荷无法工作;② 可靠性:它一出故障整个互联网就瘫痪 |
| 标号规则 | 单标号 ≤ 63 字符、完整域名 ≤ 255 字符;只用字母、数字、连字符;不区分大小写。级别最低的写最左 |
| 🔴 域名的点 ≠ IP 的点 | 点分十进制固定 3 个点;域名里点的个数不固定(com 有 0 个,a.b.c.d.e.com 有 5 个) |
| 🔴 域名与物理位置、IP 子网无关 | 名字空间按机构组织划分。"同一二级域名下的主机一定在同一网段"是错的 |
| 顶级域三类 | 国家 nTLD(ISO 3166 代码)/通用 gTLD(最先确定 7 个:com net org int edu gov mil)/基础结构域名只有 arpa 一个,用于反向解析 |
| 🔴 区 ≠ 域 | 服务器管辖范围以区为单位:区可能等于或小于域,但一定不能大于域,且区内节点必须连通 |
| 🔴 本地域名服务器不在层次结构里 | 根/TLD/权限三者才构成层次;本地服务器是主机的代理 + 缓存 |
| 🔴 13 是域名个数不是机器台数 | 13 个不同 IP 地址的域名,实际是 13 套装置,各地部署镜像,靠任播把客户送到最近一台 |
| 🔴 根一般不直接给 IP | 它没有存这种信息,只告诉本地服务器下一步该找哪个 TLD;权限服务器管不到那一段时同样只指路 |
| 递归与迭代的一句判据 | 递归 = 我替你查完再给你答案;迭代 = 我只告诉你下一个该问谁。 递归把负担压给被查方,迭代把负担留给查询方 |
| 🔴 报文数两种都是 8 个 | 差的是报文在谁与谁之间跑,不是条数 |
| 🔴 "本地到根一定迭代"是错的 | 本地也可以采用递归,取决于最初的查询请求报文的设置 |
| 🔴 改数据只能在主域名服务器上做 | 主服务器定期把数据复制到辅助服务器——区传送因此需要 TCP |
| 🔴 CNAME 与 MX 都不直接返回 IP | 返回的都是域名,还要再查一次 A 记录 |
| 🔴 DNS 不只用 UDP | 查询用 UDP 53;响应超 512 字节或做区传送改用 TCP 53 |
交互可视化
一、层次域名空间
域名是标号序列,级别最低的写在最左边、最高的顶级域名写在最右边:mail.cctv.com 里 com 是顶级域名、cctv 是二级域名、mail 是三级域名;同理 mail.tsinghua.edu.cn 里 mail 已经是四级域名。
中央电视台和清华大学都有一台机器叫 mail,域名却不同——唯一性由整条路径保证,不由叶子的名字保证。DNS 既不规定一个域名要包含多少级下级域名,也不规定每一级代表什么意思;各级域名由上一级机构管理,顶级域名由 ICANN 管理,而一个单位拿到域名后可自行决定是否继续划分子域,不必上级批准。
我国在 cn 下把二级域名分成类别域名 7 个(ac、com、edu、gov、mil、net、org)与行政区域名 34 个(bj、js 等)。注意 edu、gov、mil 作顶级域名时是美国专用的,作 cn 下二级域名时指中国的对应机构——edu.cn 与 edu 不是一件事。
二、域名服务器按"区"划分,不按"域"
如果每一级域名都配一台服务器,数量太多、效率反而低,于是 DNS 划分区(zone)。设 abc 公司有部门 x 和 y:
| 类型 | 知道什么 | 在层次结构里吗 |
|---|---|---|
| 根域名服务器 | 所有顶级域名服务器的域名和 IP 地址 | 在,最高层 |
| 顶级域名服务器 TLD | 在该顶级域名下注册的所有二级域名 | 在 |
| 权限域名服务器 | 它所负责的那个区内全部主机的域名→IP 映射 | 在 |
| 本地域名服务器 | 缓存 + 代主机去查 | 不在,独立于层次之外 |
本地域名服务器离用户很近,一般不超过几个路由器的距离;被查主机若恰好属于同一个本地 ISP,它自己就能答,根本不用问别人。
三、域名解析:递归与迭代
实际部署通常是混合的:主机 → 本地服务器用递归(主机太弱,也不该让每台主机都懂 DNS 层次),本地服务器 → 根/TLD/权限用迭代(否则根服务器要替全世界跑腿,扛不住)。


图源:谢希仁《计算机网络》(第 8 版)图 6-4(a)(b),印刷 p267。
两张图对照,差别可以归纳成一句:迭代图里所有箭头都连着本地服务器(星形),递归图里箭头首尾相接形成一条链(链形)。两种方式教材都明确写了 8 个 UDP 报文——都是 4 个来回,只是来回发生在不同的两端之间。
报文数与总时延的逐段走查,以及缓存命中的两种程度(想看清"谁替谁跑腿"在数值上差多少时展开)
设各段单程传播 + 处理时延如下,本地服务器缓存为空,忽略报文传输时延。
| 链路段 | 单程时延 | 链路段 | 单程时延 |
|---|---|---|---|
| 主机 ↔ 本地 | 2 ms | 根 ↔ TLD | 20 ms |
| 本地 ↔ 根 | 50 ms | TLD ↔ 权限 | 15 ms |
| 本地 ↔ TLD | 30 ms | 本地 ↔ 权限 | 20 ms |
第 1 步:报文数。 只取决于"问了几级",与谁去问无关:被查域名要走根、TLD、权限三级,加上主机与本地之间那一次,共 4 个来回即
第 2 步:迭代。 每一次查询都是"本地发出、本地收回",所以每一级都计双程——这正是"星形"在数值上的体现:
第 3 步:递归。 答案沿原链返回,走的是服务器之间那些较短的链路(根↔TLD 只有 20 ms,而本地↔TLD 要 30 ms):
递归省下的是"绕回本地再出去"的那段路。
第 4 步:这个结论要不要推广?不要。 递归更快只在"服务器之间的链路比本地到各级服务器的链路更短"时成立——本例里根↔TLD(20 ms)确实比本地↔TLD(30 ms)短;若根与 TLD 隔在地球两端,递归反而更慢。真正稳定的差别不是快慢,而是负载落在谁身上(迭代压本地,递归压根与 TLD),这才是根域名服务器坚持只做迭代的原因。
第 5 步:缓存命中的两种程度。 仍取迭代方式。
- 直接命中(缓存里已有目标的 A 记录):本地不必问任何人,报文数 2,时延
ms。 - 只命中半路(没有 A 记录,但有
com顶级域名服务器的地址):本地可以跳过根,直接向 TLD 发查询,报文数,时延 ms。
相比全程 204 ms,半路命中省了 100 ms(约 49%),而这 100 ms 全部是根域名服务器的负担——缓存最主要的收益正来自减掉最贵的那一段。这两个数字合起来就是教材那句"不仅可以大大减轻根域名服务器的负荷,而且也能够使互联网上的 DNS 查询请求和回答报文的数量大为减少"。
四、DNS 缓存
缓存里存的不只是最终 IP,还包括"从何处获得域名映射信息"的记录——所以才有"只命中半路"这种情形。一致性靠计时器 + TTL:域名服务器为每项内容设置计时器,超时即删(教材举例"每个项目只存放两天");权限域名服务器在回答时在响应中指明这条绑定的有效存在时间。
增大 TTL → 减少网络开销,但域名改动后旧记录会多存活一段时间;减小 TTL → 提高域名转换的准确性,但查询报文变多。
缓存不只在服务器上:许多主机启动时就从本地域名服务器下载名字和地址数据库,并维护自己最近使用域名的高速缓存,只在本地找不到时才去问服务器。所以链条上有主机缓存 → 本地服务器缓存两级,都要过期改动才生效。
五、资源记录类型
每条记录称为资源记录(RR),格式为 (域名, TTL, 类别, 类型, 值)。
| 类型 | 含义 | 示例 |
|---|---|---|
| A | 域名 → IPv4 地址 | www.example.com → 93.184.216.34 |
| AAAA | 域名 → IPv6 地址 | www.example.com → 2606:2800:… |
| CNAME | 域名的别名(指向另一个域名) | blog.example.com → www.example.com |
| MX | 邮件交换记录(收该域邮件的服务器) | example.com → mail.example.com |
| NS | 该区的权限域名服务器 | example.com → ns1.example.com |
| PTR | IP → 域名(反向解析,走 arpa) | 93.184.216.34 → www.example.com |
CNAME 与 MX 返回的都是域名,查到之后还要再查一次目标的 A 记录才知道往哪连——所以一次"看似一步"的解析可能是两趟,"配了 MX 就不用配 A"是错的。题面只说"域名解析"而未指明类型时,默认查的是 A 记录。
六、DNS 与传输层
| 场景 | 传输层 | 原因 |
|---|---|---|
| 普通查询/响应 | UDP 53 | 报文短小、一问一答,省去建连开销 |
| 响应超过 512 字节 | TCP 53 | UDP 报文长度受限,需可靠分段传输 |
| 区传送(主→辅助同步整个区) | TCP 53 | 数据量大且必须完整、有序、可靠 |
查询用 UDP 的理由可以逐层追问:一问一答只需一个请求包 + 一个响应包,用 TCP 则要三报文握手 + 数据 + 四报文释放;DNS 是几乎所有网络应用的第一步,它慢一切都慢;丢包代价很低,超时重发一个小报文即可;服务器侧不必为每个查询保存连接状态,同样硬件能扛住多得多的并发。
本节小结
- DNS 必须分布式的两条理由是性能与可靠性;服务器按区而非域划分,区 ⊆ 域且区内连通。根/TLD/权限构成层次,本地服务器不在其中;根只有 13 个域名而非 13 台机器,靠任播分流,且它一般只指路不给答案。
- 递归与迭代的判据是"替你查到底"还是"告诉你问谁",由此推出负担归属。两种方式的报文数同为 8 个,差别在报文跑在哪些链路上;哪种更快取决于链路时延分布,稳定的差别只有负载落在谁身上。
- 缓存分主机与本地服务器两级,命中也分最终 A 记录与半路 TLD 地址两种程度,后者减掉的正是最贵的本地↔根那一段;一致性靠 TTL,其大小是"开销 ↔ 准确性"的权衡。查询用 UDP 53,大响应与区传送用 TCP 53。
教材出处
- 谢希仁《计算机网络》(第 8 版)印刷 p261,6.1.1 节:「从理论上讲,整个互联网可以只使用一个域名服务器……然而这种做法并不可取。因为互联网规模很大,这样的域名服务器肯定会因过负荷而无法正常工作,而且一旦域名服务器出现故障,整个互联网就会瘫痪。」——本篇"为什么必须分布"两条理由的出处。同页还写明「为什么机器在处理 IP 数据报时要使用 IP 地址而不使用域名呢?这是因为 IP 地址的长度是固定的 32 位……而域名的长度并不是固定的,机器处理起来比较困难」。
- 印刷 p262,6.1.2 节:「DNS 规定,域名中的标号都由英文字母和数字组成,每一个标号不超过 63 个字符……由多个标号组成的完整域名总共不超过 255 个字符。」同页:「域名中的『点』和点分十进制 IP 地址中的『点』并无一一对应的关系。」以及「DNS 既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思」。
- 印刷 p263,6.1.2 节:顶级域名三大类(国家顶级域名 nTLD、通用顶级域名 gTLD 最先确定的 7 个、基础结构域名只有
arpa一个),以及我国cn下"类别域名"7 个与"行政区域名"34 个的划分。 - 印刷 p264,6.1.2 节末:「互联网的名字空间是按照机构的组织来划分的,与物理的网络无关,与 IP 地址中的『子网』也没有关系。」6.1.3 节开头:「一个服务器所负责管辖的(或有权限的)范围叫作区(zone)……但在一个区中的所有节点必须是能够连通的。」
- 印刷 p265:「区可能等于或小于域,但一定不能大于域」;以及四类域名服务器的划分。
- 印刷 p266:「全世界的根域名服务器只使用 13 个不同 IP 地址的域名……实际上,在互联网中是由 13 套装置构成这 13 组根域名服务器的」「由于根域名服务器采用了任播(anycast)技术,因此当 DNS 客户向某个根域名服务器的 IP 地址发出查询报文时,互联网上的路由器就能找到离这个 DNS 客户最近的一个根域名服务器」;以及「在许多情况下,根域名服务器并不直接把待查询的域名直接转换成 IP 地址(根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询」。
- 印刷 p267,6.1.4 节:递归查询与迭代查询的定义原文——「所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询」;「迭代查询的特点是这样的:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:『你下一步应当向哪一个域名服务器进行查询』」。同页末句是本篇那条边界的依据:「当然,本地域名服务器也可以采用递归查询,这取决于最初的查询请求报文的设置要求使用哪一种查询方式。」两张图即本篇引用的图 6-4(a)(b)。
- 印刷 p268:迭代方式 8 个步骤的逐条描述,「我们注意到这 8 个步骤总共要使用 8 个 UDP 用户数据报的报文」;递归方式「整个的查询也是使用 8 个 UDP 报文」——本篇"两种方式报文数相同"的直接依据。同页还写明缓存"用来存放最近查询过的域名以及从何处获得域名映射信息的记录",以及只缓存了顶级域名服务器地址时「本地域名服务器也可以不向根域名服务器进行查询,而是直接向 com 顶级域名服务器发送查询请求报文」——这是折叠块里"只命中半路"的依据。TTL 权衡原文:「增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。」
- 印刷 p269:主机侧缓存——「许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。」
说明:折叠块里的各段时延均为自造数据,教材不给具体数值;能与教材对账的是报文数 8 这一项,已核对印刷 p268 原文。
相关知识
网络应用模型|UDP 用户数据报协议|WWW 万维网|HTTP 协议|电子邮件|FTP 与 DHCP