DNS(域名系统)

协议和标准
Internet的分层命名系统,将人类可读的域名转换为计算机用来通信的IP地址。
← 返回词汇表

什么是DNS?

DNS(域名系统)是互联网的电话簿。它将人类可读的域名(如"example.com")转换为计算机用来查找和相互通信的机器可读的IP地址(如"93.184.216.34")。没有DNS,你需要记住IP地址才能访问网站——想象一下输入142.250.80.46而不是google.com。

DNS的工作原理

当你在浏览器中输入域名时,会发生一个复杂但闪电般快速的过程:

DNS解析过程

1. 本地缓存检查:你的浏览器和操作系统首先检查其本地DNS缓存中最近对该域的查询。

2. 递归解析器查询:如果未缓存,查询转到递归DNS解析器(通常由你的ISP或Cloudflare的1.1.1.1或Google的8.8.8.8等服务运营)。

3. 根服务器查询:解析器查询根名称服务器,该服务器指导它查询适当的TLD服务器。

4. TLD服务器查询:TLD服务器(例如.com)提供特定域的权威名称服务器。

5. 权威服务器查询:最后,权威名称服务器返回域的实际IP地址。

6. 响应缓存:结果在各个级别根据TTL(生存时间)值进行缓存。

整个过程通常在毫秒内完成。

DNS记录类型

DNS存储各种类型的记录,每种都有不同的用途:

记录类型用途示例
A映射域到IPv4地址example.com → 93.184.216.34
AAAA映射域到IPv6地址example.com → 2606:2800:220:1:...
CNAME指向另一个域的别名www.example.com → example.com
MX邮件服务器指定example.com → mail.example.com
TXT文本数据(SPF、DKIM、验证)各种验证字符串
NS名称服务器委派example.com → ns1.provider.com

DNS层次结构

DNS作为分布式分层数据库运行:

.(根)

├── com(TLD)

│ ├── example(SLD)

│ │ ├── www(子域)

│ │ └── mail(子域)

│ └── google

├── org(TLD)

└── io(TLD)

这个层次结构使得能够在数千个组织中分布式管理数十亿个域名。

面向开发者的DNS

理解DNS对于网页开发至关重要:

常见开发任务

域名配置:设置A记录、子域的CNAME和电子邮件的MX记录需要DNS知识。 SSL/TLS验证:许多证书颁发机构使用DNS记录(TXT或CNAME)来验证域名所有权。 CDN设置:内容交付网络通常需要CNAME记录来通过其边缘服务器路由流量。 电子邮件可递送性:SPF、DKIM和DMARC记录都是对电子邮件身份验证至关重要的DNS TXT记录。

DNS传播

当你更新DNS记录时,更改不会立即生效。DNS传播(更改在全球DNS基础设施中传播所需的时间)可以从几分钟到48小时不等,取决于TTL设置和缓存行为。

DNS安全考虑

DNS具有安全含义,开发者应该理解:

DNS欺骗:攻击者可以尝试返回虚假的DNS响应,将用户重定向到恶意网站。DNSSEC(DNS安全扩展)通过密码签名帮助防止这种情况。 DNS泄露:VPN用户可能会意外地在加密隧道外发送DNS查询,暴露浏览活动。 DDoS放大:DNS可以因为协议能够返回大于请求的响应而在放大攻击中被利用。

DNS和域名可用性

DNS解析状态可以指示域名可用性——如果不存在DNS记录,域名可能未注册。但RDAP/WHOIS查询提供更可靠的可用性信息,因为已注册的域名可能根本没有配置DNS记录。

将知识付诸实践

使用 DomScan 的 API 检查域名可用性、健康状态等。