DNS

DNS协议概述

DNS(Domain Name System,域名系统) 是互联网的基础设施之一,它是一个分布式数据库系统,主要负责将人类易记的域名(如 www.example.com)转换为机器可识别的IP地址(如 93.184.216.34),从而实现域名到IP地址的映射(正向解析),也可以实现反向解析(IP到域名)。DNS 相当于互联网的“电话簿”,使人们无需记忆复杂的IP地址数字串,就能方便访问网络资源。

DNS 是应用层协议,主要基于UDP协议传输(端口53),因为UDP开销小、速度快,适合大多数查询场景。当响应数据超过512字节或需要可靠传输(如区域传输)时,会切换到TCP协议(同样端口53)。

主要功能

  • 主机名到IP地址的映射(A记录或AAAA记录)。
  • 主机别名(CNAME记录)。
  • 邮件服务器别名(MX记录)。
  • 负载均衡(多个A记录轮询分配流量)。
  • 支持其他资源记录,如TXT(文本信息,用于SPF/DKIM等)。

域名结构

DNS采用层次结构的树状命名空间,从根域(.)开始向下分层:

  • 根域(.):由13组根服务器管理(实际通过Anycast分布数百个实例)。
  • 顶级域(TLD):如 .com、.cn、.org,由ICANN管理。
  • 二级域:如 example.com。
  • 子域:如 www.example.com

域名总长度不超过253字符,每级标签不超过63字符。

DNS工作原理(域名解析过程)

DNS解析通常涉及递归查询(客户端到本地解析器)和迭代查询(解析器到其他服务器),过程如下(以查询 www.example.com 为例):

  1. 客户端查询:用户输入域名,操作系统或应用先检查本地hosts文件和缓存。如果无缓存,向配置的本地DNS解析器(递归解析器,通常由ISP提供,如8.8.8.8)发送UDP查询。

  2. 本地解析器处理

    • 如果缓存中有记录,直接返回。
    • 否则,从根域名服务器开始迭代查询:
      • 根服务器返回顶级域(.com)权威服务器地址。
      • 顶级域服务器返回二级域(example.com)权威服务器地址。
      • 权威服务器返回最终IP地址(或CNAME等)。
  3. 返回结果:本地解析器缓存结果(根据TTL生存时间),返回给客户端。

整个过程通常只需几毫秒到几秒,依赖分布式缓存机制。

DNS服务器类型

  • 递归解析器(Recursive Resolver):负责完整查询,常由ISP或公共DNS(如Google DNS)提供。
  • 根域名服务器:13组全球分布。
  • 顶级域服务器:管理特定TLD。
  • 权威域名服务器(Authoritative Nameserver):存储特定域的真实记录,由域名注册商或企业维护。

DNS报文格式(简要)

DNS查询和响应报文格式相同,包括:

  • 头部(12字节):ID、标志、问题/回答/权威/附加记录数等。
  • 问题区:查询域名、类型(A/MX等)、类(通常IN)。
  • 回答区:资源记录(RR)。
  • 权威区附加区:辅助信息。

标准依据

DNS协议主要定义在RFC 1034(概念)和RFC 1035(实现规范),后续有诸多扩展(如DNSSEC安全扩展)。

DNS是互联网高效运行的核心,但也存在风险,如DNS劫持、缓存投毒或DDoS攻击。现代DNS常结合DNSSEC和DoH/DoT(加密传输)提升安全。

DNS记录类型

DNS(Domain Name System)中的资源记录(Resource Record,简称RR) 是域名系统数据库的核心组成部分。每条资源记录都存储在区域文件(zone file)中,用于描述域名相关的特定信息。DNS支持多种记录类型,每种类型对应不同的功能和数据格式。这些记录类型主要定义在RFC 1035中,后续RFC不断扩展。

资源记录的通用格式包括:

  • 名称(Name):记录所属的域名。
  • 类型(Type):记录类型代码(如A、MX)。
  • 类(Class):通常为IN(Internet)。
  • TTL(Time To Live):缓存生存时间(秒)。
  • 数据(RDATA):类型特定的内容。

以下是日常管理和解析中最常用的记录类型,通常占DNS配置的90%以上:

类型 代码 描述 示例用途 RFC参考
A 1 将域名映射到IPv4地址。 网站服务器IP指向 RFC 1035
AAAA 28 将域名映射到IPv6地址。 支持IPv6的网站 RFC 3596
CNAME 5 别名记录,将一个域名指向另一个规范域名(不能用于根域)。 www.example.com → example.com RFC 1035
MX 15 邮件交换记录,指定域名的邮件服务器(可多个,数字越小优先级越高)。 邮件路由 RFC 1035
NS 2 名称服务器记录,指定域名的权威DNS服务器。 域名委托 RFC 1035
SOA 6 起始授权记录,每个区域必须有且仅有一个,包含主服务器、管理员邮箱等信息。 区域元数据 RFC 1035
TXT 16 文本记录,可存储任意文本,常用于验证或反垃圾邮件机制。 SPF、DKIM、DMARC、域名验证 RFC 1035
PTR 12 指针记录,反向解析(IP → 域名),用于逆向区域。 反向DNS查询、邮件验证 RFC 1035
SRV 33 服务记录,指定特定服务的服务器位置和端口。 VoIP、即时通讯(如SIP、XMPP) RFC 2782
CAA 257 证书颁发机构授权记录,限制哪些CA可为域名颁发证书。 增强TLS证书安全 RFC 8659

CNAME 记录

CNAME记录常用于CDN(Content Delivery Network,内容分发网络),这几乎是接入第三方CDN服务的标准配置方式。

为什么CNAME常用于CDN?

  • CDN的工作原理:CDN提供商(如Cloudflare、Akamai、阿里云CDN、AWS CloudFront等)拥有全球分布的边缘节点(PoP),用于缓存和加速内容分发。CDN的IP地址是动态的(会根据用户位置、安尼卡斯特路由等变化),不适合直接用A记录(固定IP)指向。
  • CNAME的作用:用户在自己的域名(如www.example.com)上添加一条CNAME记录,指向CDN提供商分配的域名(如example.com.cdn.cloudflare.net 或 example.edgesuite.net)。这样:
    • DNS解析时,会将请求重定向到CDN的边缘服务器。
    • CDN根据用户地理位置、智能调度返回最近节点的IP,实现加速、负载均衡和缓存。
    • 当CDN后端IP变化时,无需修改用户的DNS记录,只需CDN内部更新即可,维护更方便。

典型配置示例:

  1. 通用流程

    • 在CDN控制台添加加速域名(例如www.example.com)。
    • CDN返回一个CNAME目标域名(如xxxx.kunlun.com 或 xxxx.edgekey.net)。
    • 在用户的DNS提供商处添加记录:
      • 类型:CNAME
      • 主机名:www(或@,但根域通常需特殊处理)
      • 值:CDN提供的目标域名
    • 配置生效后,用户访问www.example.com的流量就会路由到CDN节点。
  2. 具体CDN示例

    • Cloudflare:支持Partial (CNAME) setup,用户添加CNAME指向{hostname}.cdn.cloudflare.net,实现代理和加速。
    • Akamai:常用.edgesuite.net或.edgekey.net作为CNAME目标,支持全球缓存和流量管理。
    • 阿里云CDN:添加域名后生成CNAME(如xxxx.cdn.aliyun.com),必须配置此记录才能激活加速。
    • 其他:KeyCDN、CacheFly、CDN77等均要求CNAME指向其Pull Zone或资源URL。

注意事项:

  • 根域(apex domain,如example.com)限制:DNS标准(RFC)不允许根域直接用CNAME(会与其他记录如MX冲突)。解决方案:
    • 使用子域(如www.example.com)。
    • 部分DNS提供商支持“CNAME Flattening”或“ALIAS/ANAME”记录(伪CNAME)。
    • 或通过页面重定向(301)将根域导到www。
  • TTL设置:建议较短(如3600秒),便于快速切换。
  • 优势:提升网站加载速度、全球访问体验、减轻源站压力,还可结合DDoS防护、WAF等。