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 为例):
-
客户端查询:用户输入域名,操作系统或应用先检查本地hosts文件和缓存。如果无缓存,向配置的本地DNS解析器(递归解析器,通常由ISP提供,如8.8.8.8)发送UDP查询。
-
本地解析器处理:
- 如果缓存中有记录,直接返回。
- 否则,从根域名服务器开始迭代查询:
- 根服务器返回顶级域(.com)权威服务器地址。
- 顶级域服务器返回二级域(example.com)权威服务器地址。
- 权威服务器返回最终IP地址(或CNAME等)。
-
返回结果:本地解析器缓存结果(根据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内部更新即可,维护更方便。
典型配置示例:
-
通用流程:
- 在CDN控制台添加加速域名(例如www.example.com)。
- CDN返回一个CNAME目标域名(如xxxx.kunlun.com 或 xxxx.edgekey.net)。
- 在用户的DNS提供商处添加记录:
- 类型:CNAME
- 主机名:www(或@,但根域通常需特殊处理)
- 值:CDN提供的目标域名
- 配置生效后,用户访问www.example.com的流量就会路由到CDN节点。
-
具体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等。