《TCP/IP 详解 卷1:协议》第11章:名称解析和域名系统

发布于:2025-06-24 ⋅ 阅读:(17) ⋅ 点赞:(0)

引言

主机通过 IP 地址来标识和通信。但 IP 地址(特别是 IPv6)对用户来说难以记忆,因此互联网支持使用主机名(如 www.example.com)来标识主机。

为了让主机名能用于网络通信,需要通过“名称解析”(name resolution)将主机名转换为对应的 IP 地址。最广泛使用的名称解析机制是域名系统(DNS)。

DNS命名空间

DNS中使用的所有的名称集合构成了DNS名称空间(namespace)。这个名称空间和计算机文件系统的文件夹和文件相似,都是划分为层次且大小写不敏感的。

在这里插入图片描述

名称服务器和区域

DNS 将名称空间的管理责任划分为多个“区域(zone)”,每个区域由组织或个人负责。一个区域是 DNS 名称树的子树,支持独立管理,包含若干主机名与其对应的记录(如 IP 地址)。

每个区域至少应部署两台名称服务器(主服务器和辅助服务器),以实现冗余。辅助服务器通过“区域传输(zone transfer)”从主服务器同步数据。

DNS 支持“授权(delegation)”机制:一个上级区域可将子域管理权下放给下级组织。例如,berkeley.edu 可授权 cs.berkeley.edu 的管理权给计算机系。每次域名层级变化都可能跨越不同区域。

一台服务器可托管多个区域,区域数据完全一致,确保容错与高可用。区域信息也可通过工具如 rsync 同步,但一般使用 DNS 专用协议进行传输。

缓存

名称服务器获取域名信息的来源有三种:

  1. 本地区域数据库(授权信息);
  2. 区域传输获得的副本;
  3. 向其他服务器查询所得的缓存信息。

多数服务器(除根服务器、TLD等)会缓存解析结果,用于响应后续查询,以减少 DNS 流量。缓存内容由 TTL(生存时间)控制,一旦过期需重新解析。

若区域发生更改,管理员通常会提前降低 TTL,以减少旧缓存持续存在的时间。

缓存包括成功解析和否定缓存(negative caching),后者也会记录“该域名不存在”的信息,防止重复查询无效域名。

DNS协议

DNS 协议由两部分组成:

  • 查询/响应协议:客户端向名称服务器发起查询,获取名称解析结果;
  • 区域传输协议(zone transfer):用于主从服务器间同步数据库内容(如通知变更、动态更新等)。

典型递归查询流程,以用户主机 A.HOME 解析 example.com 为例:

  1. 解析器向本地 DNS(如 GW.HOME)发起查询;
  2. 若本地 DNS 未缓存结果,则向 ISP 的 DNS 发起递归请求;
  3. ISP DNS 向 根服务器查询,获取 .com 的 gTLD 服务器地址;
  4. 联系 gTLD 服务器,获取 example.com 的权威服务器地址;
  5. 权威服务器(如 A.IANA-SERVERS.NET)查询,获得 example.com 的 IP 地址;
  6. 最终将结果层层返回至 A.HOME

注:若主机配置了默认搜索域(如 .HOME),初始查询可能会错误地尝试 example.com.home

在这里插入图片描述

  • 递归查询:由本地 DNS 代理完成整个解析流程,适用于客户端;
  • 非递归查询:如根服务器、TLD 服务器,不进行递归处理,仅提供指引;
  • 缓存机制贯穿始终,减少重复查询、降低网络负担。

DNS消息格式

DNS 所有操作(如查询、响应、区域传输、通知、动态更新)都使用统一的消息结构,格式如下:

在这里插入图片描述
在这里插入图片描述
消息末尾的区段:

  1. Question(问题区段):仅包含查询名、类型(如 A、AAAA)、类(一般为IN)
  2. Answer(回答区段):包含资源记录(RR)
  3. Authority(授权区段):权威服务器记录
  4. Additional(附加信息区段):补充信息,如权威服务器的IP等

DNS 中的域名由多个标签构成,标签类型:

  • 数据标签:一个标签的字节数(0~63)+ 内容;
  • 压缩标签:高两位为 11 的两个字节组成,后 14 位为偏移指针,节省空间。

在这里插入图片描述

若在多个区段中重复使用 edu,只需写一次原始标签,其余使用偏移指针引用前面的 edu 标签。如下:

在这里插入图片描述

UDP / TCP

TCP/UDP 端口号均为 53,DNS 查询通常使用 UDP 传输,结构如下:

在这里插入图片描述

  • 默认最多 512字节(UDP 限制)
  • 每个区段(除问题区段)包含一组资源记录(RR)

若响应超过 512 字节,TC(Truncated)位被设置,解析器会使用 TCP 重新发送请求,以获取完整响应。

区域传输(Zone Transfer) 一般使用 TCP。由主服务器 → 辅助服务器,若更新较少,可能使用 UDP。UDP 无连接,必须自己实现重传机制,采用指数退避(Exponential Backoff)。

问题(查询)和区域区段格式

DNS 消息中的查询字段(Question Section)列出了需要解析的问题。格式如下:

在这里插入图片描述

回答、授权和额外信息区段格式

DNS 消息中的回答、授权、额外信息区段均由一个或多个资源记录(RR)构成:

在这里插入图片描述

资源记录类型

虽然DNS常用来确定一个特定的名称对应的IP地址,但是它也可以用于相反的目的和一些其他的事情。它可用于IPv4和IPv6,甚至可以为非互联网数据(在DNS术语中为其他类)提供分布式数据库功能。由DNS提供的广泛功能主要是由于它能够拥有不同类型的资源记录。

在这里插入图片描述

动态更新

DNS UPDATE 允许动态修改 DNS 区域,该过程通过向授权 DNS 服务器发送特定的 DNS 消息完成,消息结构类似传统 DNS,但操作码设置为 Update(5),且区段字段有所不同。

区段字段计数(头部):

  • ZOCOUNT:被更新的区域数(通常为1)
  • PRCOUNT:先决条件数量
  • UPCOUNT:更新请求数量
  • ADCOUNT:额外信息数量

先决条件用于验证更新的有效性,服务器评估先决条件是否满足,若不满足则拒绝更新并返回错误。 先决条件以 RR 格式描述,类型包括:

在这里插入图片描述
描述具体的 DNS 记录增删操作。更新操作类型通过 RR 类、类型和 RDATA 组合定义:

在这里插入图片描述

区域传输和DNS通知

DNS 区域传输(Zone Transfer)是将一组资源记录(RR)从一个服务器(通常是主服务器)复制到另一个服务器(通常是从服务器)的机制,目的是保持多台 DNS 服务器之间的区域数据一致性。

AXFR(全量传输) :使用 DNS AXFR 协议(见 [RFC 5936])传输整个区域的全部记录。

IXFR(增量传输) :使用 DNS IXFR 协议(见 [RFC 1995]),仅传输更新部分,提高效率。

最初的做法是轮询(Polling)

  • 从服务器周期性向主服务器发送 SOA 查询;
  • 比较返回的 SOA 记录中的序列号
  • 若序列号变更,则触发区域传输。

改进的方法是DNS NOTIFY(通知)机制(见 [RFC 1996]):

  • 主服务器在区域内容发生更改后,主动向从服务器发送 DNS NOTIFY 消息;
  • 从服务器接收到通知后立即发起 SOA 查询确认是否需要执行 AXFR 或 IXFR;
  • 若序列号增加,则启动区域传输。

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到