【USTC 计算机网络】第二章:应用层 - DNS

发布于:2025-03-24 ⋅ 阅读:(26) ⋅ 点赞:(0)

本文介绍了互联网中的一个核心基础服务:域名系统(DNS),从如何命名设备、如何完成名字到 IP 地址的转换、如何维护域名这三个问题逐步讲解了 DNS 的名字空间、名字服务器以及报文格式,最后简单介绍了 DNS 的攻击与防御手段。

1. DNS 介绍

DNS(Domain Name System,域名系统)是互联网上的一种分布式数据库系统,其主要功能是将人们便于记忆的域名(例如 www.example.com)转换为计算机能识别的 IP 地址(例如 192.0.2.1)。DNS 属于核心的 Internet 功能,但以应用层协议实现。

由于 IP 地址对人类来说难以记忆和管理,DNS 作为一种“翻译器”,大大简化了网络资源的访问和管理过程。​当服务器的 IP 地址发生变化时,只需更新 DNS 记录,用户仍然可以使用原来的域名访问服务,而无需通知每个用户更新访问地址。

DNS 可以配置多条记录实现流量分散和备份机制(负载均衡与冗余),从而提高服务的可靠性和性能。且 DNS 采用分层分布式的结构管理,由若干分布式的数据库完成名字到 IP 地址的转换,使全球的域名解析任务高效而可靠,避免了单点故障。​

在大多数情况下,DNS 客户端向服务器发送查询时使用 UDP 协议,特别是当响应数据小于 512 字节时。当 DNS 响应的数据超过 512 字节,或者在进行区域传输(即 DNS 服务器之间的数据同步)时,DNS 会使用 TCP 协议。

DNS 系统需要解决三个问题:如何命名设备、如何完成名字到 IP 地址的转换、如何维护(增加或者删除一个域,需要在域名系统中做哪些工作)。

2. 名字空间

DNS 的名字空间是指 DNS 系统中域名的组织结构和命名规则,它构成了一个层次化、分布式的命名体系,使得互联网中的资源能够被唯一标识和高效定位。

其层次化命名结构如下:

  • 根域(Root Domain):DNS 名字空间的顶端是根域,用一个点 . 表示。根域下划分出各个顶级域,根域服务器负责指引请求到对应的 TLD 服务器。​DNS 只有一个根域,但为了实现高可靠性和高性能,根域由 13 个逻辑上独立的根服务器(从 A 到 M)来提供服务。
  • 顶级域(Top-Level Domain,TLD):顶级域包括常见的通用顶级域(如 .com.org.net)和国家代码顶级域(如 .cn.uk.jp)。这些域名由国际互联网组织和各国管理机构进行分配和管理。​
  • 二级域和子域:在顶级域之下,每个组织或个人可以注册二级域,例如 example.com。在二级域内部,还可以进一步划分子域或主机名,如 www.example.commail.example.com,这种层次结构有助于组织和管理网络资源。​

在这里插入图片描述

一个域管理其下的子域,例如 .cn 被划分为 edu.cncom.cn,创建一个新的域,必须征得它所属域的同意。域与物理网络无关,域遵从组织界限,而不是物理网络,即一个域的主机可以不在同一个网络,一个网络的主机不一定在同一个域,域的划分是逻辑的,而不是物理的。

3. 名字服务器

名字服务器是一个分布式数据库系统的重要组成部分,它们共同协作完成从人类易记的域名转换为计算机所需的 IP 地址的任务。不同层级的名字服务器各司其职,主要包括:

  • 根域名服务器:根域名服务器处于 DNS 层次结构的最顶端,负责接收递归解析器的初始查询请求,并返回负责顶级域的 TLD 服务器地址。虽然根服务器逻辑上只有 13 组,但实际部署时通过任播技术拥有数百甚至上千个物理实例,从而确保全球 DNS 解析的高可用性与高性能。
  • 顶级域 DNS 服务器(TLD 服务器):TLD 服务器位于根服务器下一级,专门管理某个顶级域内的所有域名。以 .com 为例,TLD 服务器管理所有以 .com 结尾的域名。当递归 DNS 服务器从根服务器获得 TLD 服务器的地址后,会向其发送查询请求,以便获取某个二级域(例如 example.com)的权威服务器地址。
  • 权威 DNS 服务器:权威 DNS 服务器负责存储和发布特定域(Zone)内的 DNS 记录,包括 A 记录、CNAME 记录、MX 记录等。当查询到达权威 DNS 服务器时,它能够提供最终的、被认为“权威”的答案,也就是说返回的 IP 地址数据是经过域名管理员配置和维护的。例如,一个公司的域名 example.com,其下的所有子域记录(如 www.example.com)都由该域的权威服务器负责解析。
  • 本地域 DNS 服务器(递归解析器):本地域 DNS 服务器通常由互联网服务提供商(ISP)或企业内部部署,直接面向终端用户。当用户在浏览器中输入域名时,首先向本地域 DNS 服务器发送查询请求。这些服务器负责执行递归查询:如果本地缓存中没有相应记录,它们会依次向根、TLD 及权威服务器发起查询,直到获得最终答案,并将结果返回给用户。同时,它们还会将查询结果缓存一段时间,以加快后续的查询速度。

因此名字到 IP 的转换过程(DNS 解析过程)通常包括以下几个步骤:

  1. 本地缓存检查:当用户输入一个域名时,操作系统和浏览器会首先检查自身的 DNS 缓存,若缓存中已存有对应 IP,则直接返回。
  2. 查询本地域 DNS 服务器:如果本地没有缓存,客户端将查询请求发送给配置好的本地域 DNS 服务器(递归解析器)。此时,本地域 DNS 服务器开始执行递归查询过程:
    • 根查询:本地域 DNS 服务器首先向一个根域名服务器发起查询,请求获取对应顶级域(例如 .com)的 DNS 服务器列表。
    • TLD 查询:接下来,本地域 DNS 服务器向根域名服务器返回的 TLD 服务器发起查询,获取负责该域的权威 DNS 服务器地址。
    • 权威查询:最后,递归 DNS 服务器向权威 DNS 服务器发送查询请求,从中获得该域名的具体 IP 地址(例如 A 记录)。
  3. 返回结果与缓存:当本地域 DNS 服务器获得权威答案后,它会将该结果返回给客户端,同时缓存该记录以供后续查询使用,从而减少查询延时和网络流量。

在这里插入图片描述

这一系列过程结合了迭代查询(各级服务器间互相“引荐”)和递归查询(本地域 DNS 服务器代替客户端完成所有查询)的特点。

名字服务器通过维护区域文件(Zone File)来存储和管理资源记录(Resource Records,RR),这些记录构成了 DNS 数据库的基本单位。

每一条 RR 都有标准格式,这一格式在 RFC 1035 中有详细说明。一般来说,RR 在区域文件中的文本格式通常如下:

<Name> [<TTL>] [<Class>] <Type> <RDATA>

具体字段说明如下:

  • 名称(Name):表示记录所对应的域名(可以是完整域名或相对于当前区域的短名称)。
  • TTL(Time To Live):表示该记录在 DNS 缓存中可存活的时间(以秒为单位),缓存时间结束后必须重新查询,权威 DNS 服务器中记录的 TTL 可以是长期的。
  • 类(Class):通常是 IN,表示 Internet 类别,其他类例如 CH(混沌)等较少使用。
  • 类型(Type):指定记录的种类,如 AAAAANSMXCNAMETXT 等,每种类型决定了数据字段的格式和用途。
  • 数据(RDATA):存放具体的记录内容。例如,对于 A 记录,RDATA 是 IPv4 地址;对于 MX 记录,RDATA 包含优先级和邮件服务器域名。

常见的记录类型包括:

  • A 记录:将域名映射到 IPv4 地址。
  • AAAA 记录:将域名映射到 IPv6 地址。
  • NS 记录:指定该域名的权威 DNS 服务器。
  • MX 记录:指定接收邮件的邮件服务器。
  • CNAME 记录:为某个域名创建别名,指向另一个规范的域名。
  • TXT 记录:存储文本信息,如验证信息或 SPF 记录。

4. 报文格式

DNS 协议的查询和响应报文的报文格式相同,一个完整的 DNS 报文通常包括五个部分:

  • 报文头(Header):报文头固定为 12 个字节,包括这几个固定为 16 位的字段:ID:用于标识 DNS 查询与响应之间的对应关系,查询时由客户端随机生成,响应中保持相同的 ID,能够实现同时维护多个查询;标志字段(Flags):包含多个控制位,例如表示本报文是查询还是响应;QDCOUNT(问题记录数):表示后续问题部分中包含的查询个数;ANCOUNT(回答记录数):表示回答部分中资源记录的个数;NSCOUNT(授权记录数):表示授权部分中资源记录的个数;ARCOUNT(附加记录数):表示附加部分中资源记录的个数。
  • 问题部分(Question Section):这一部分携带客户端所查询的问题记录,每个问题记录包含查询的域名、查询的记录类型(如 A 类型)、查询的类(通常为 IN)。
  • 回答部分(Answer Section):回答部分返回的是与查询匹配的资源记录。
  • 授权部分(Authority Section):关于查询域的权威 DNS 服务器的记录,通常为 NS 记录。它告诉客户端哪些 DNS 服务器有权提供该域名的最终答案。
  • 附加部分(Additional Section):常见的是为授权部分中列出的名字服务器提供 IP 地址(即 A 记录或 AAAA 记录),这有助于客户端直接查询相关服务器而无需额外解析。

在这里插入图片描述

5. DNS 维护

如果我们要新增一个域名,那么需要在上级域的名字服务器中增加两条记录,指向这个新增的子域的域名和域名服务器的地址。

例如我们注册了域名 networkutopia.com,首先需要在 networkutopia.com 的权威服务器中确保有:

  • 用于 Web 服务器的 www.networkutopia.com 的类型为 A 的记录;
  • 用于邮件服务器的 mail.networkutopia.com 的类型为 MX 的记录。

然后到注册登记机构注册域名,需要向该机构提供权威 DNS 服务器(基本的、和辅助的)的名字和 IP 地址,接着登记机构会在 .com 的 TLD 服务器中插入两条 RR 记录,例如:

(networkutopia.com, dns1.networkutopia.com, NS)
(dns1.networkutopia.com, 212.212.212.1, A)

6. DNS 的攻击与防御

DNS 作为互联网的核心基础服务,其设计初衷在于高效地将域名转换为 IP 地址,但正因其开放和分布式的特性,DNS 也成为各种攻击的目标。常见的 DNS 攻击手段如下:

  • DDoS(分布式拒绝服务)攻击:通过向 DNS 服务器(通常攻击根服务器)发送大量查询请求(可能包含合法查询或伪造请求)进行流量攻击,使 DNS 服务器过载、响应变慢或无法响应,进而影响整个域名解析服务的正常运行。常与 DNS 放大攻击结合,利用多个受控主机同时发动攻击。
  • DNS 放大攻击(Amplification Attack):攻击者向开放的 DNS 服务器发送伪造源地址的请求(通常使用递归查询),DNS 服务器将大数据量的应答发送到受害者 IP 地址,形成流量放大效应。这种攻击方式能够消耗受害者网络带宽,引发大规模 DDoS 攻击。
  • DNS 劫持(DNS Hijacking):攻击者通过篡改 DNS 服务器的配置、DNS 软件漏洞或在网络中实施中间人攻击,改变 DNS 查询结果,将合法域名解析到恶意 IP 地址,常用于广告注入、钓鱼或流量劫持。可能针对本地 DNS 服务器、路由器或 ISP 的 DNS 系统实施。
  • DNS 缓存投毒(Cache Poisoning / Spoofing):攻击者通过向 DNS 解析器注入伪造的 DNS 应答,将错误的域名到 IP 的映射存入缓存。当用户查询该域名时,就会被解析到攻击者控制的恶意服务器,从而实现钓鱼、传播恶意软件或中间人攻击。

常见的 DNS 攻击防御手段如下:

  • 启用 DNSSEC(DNS 安全扩展):DNSSEC 使用数字签名为 DNS 记录提供完整性和真实性验证,有效防止缓存投毒和篡改攻击。需要域名管理员在权威 DNS 服务器上配置 DNSSEC,并在 DNS 解析器端验证数字签名。
  • 随机化技术:确保 DNS 查询的 16 位 ID 是随机生成的,降低攻击者猜测成功的可能性;随机分配 UDP 查询的源端口,进一步提高伪造应答的难度。
  • 部署 Anycast 和冗余 DNS 架构:将 DNS 服务器通过 Anycast 技术在全球多个位置部署多个实例,分散流量并提高抗 DDoS 能力。配置主从 DNS 服务器,实现自动区域传输和冗余,确保一台服务器宕机时服务不中断。
  • 流量监控与速率限制:在 DNS 服务器上设置查询速率限制,防止攻击者利用大量伪造请求发动 DDoS 攻击,并实时监控 DNS 查询流量,及时发现异常模式和可疑行为,迅速采取措施阻断恶意流量。