news 2026/9/7 14:20:37

域名与DNS解析原理全解:从注册到配置的实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
域名与DNS解析原理全解:从注册到配置的实战指南

你在配置网站、调试接口或者上线项目的时候,是不是经常被域名相关的问题卡住?比如:为什么刚买的域名访问不了?为什么解析记录明明加了却不生效?域名和 DNS 到底是什么关系?子域名、一级域名、二级域名又该怎么分?如果你对这些问题只有零散的印象,那么这篇文章正好适合你。

本文将围绕“域名是怎么工作的”这条主线,从域名结构、DNS 解析原理、域名注册备案、实际配置命令、常见问题排查这几个方面,把整个流程完整拆解一遍。读完以后,你不仅能理解输入网址后后台发生了什么,还能自己动手查询解析记录、排查域名故障,甚至写一个小脚本批量检查域名连通性。

1. 先从一次页面访问开始

1.1 当你在浏览器输入一个网址时,发生了什么

打开浏览器,在地址栏输入www.example.com,回车,页面正常显示。这个过程在用户眼里是一瞬间的事,但在技术上其实经历了好几步:

  1. 浏览器先判断这个地址是不是合法的 URL。
  2. 浏览器检查自身缓存里有没有这个域名对应的 IP。
  3. 如果没有,操作系统检查本地 hosts 文件和 DNS 缓存。
  4. 还是没有,系统把查询请求发送给配置的 DNS 服务器。
  5. DNS 服务器经过递归查询,最终找到存放该域名解析记录的权威服务器。
  6. 权威服务器返回域名对应的 IP 地址。
  7. 浏览器拿到 IP,向该 IP 发起 HTTP/HTTPS 请求。
  8. Web 服务器响应请求,浏览器渲染页面。

可以看到,域名本身并不能直接让浏览器访问资源,它只是起到了一个“名字”的作用。真正通信时使用的还是 IP 地址。域名系统要解决的,就是把人类容易记忆的名字,翻译成机器能够使用的 IP 地址。

1.2 域名、IP、DNS 三者的关系

很多初学者会把“域名解析”和“DNS”混在一起说,其实它们的关系是:

  • IP 地址是网络设备的“门牌号”,唯一标识一台主机。
  • 域名是人类可读的“名字”,方便记忆和传播。
  • DNS(Domain Name System,域名系统)是一套分布式数据库系统,负责完成域名与 IP 之间的映射。

简单打个比方:IP 地址相当于一个人的身份证号,域名相当于这个人的姓名。DNS 就是那个“查号台”,你报出姓名,它告诉你身份证号。

但这个“查号台”不是一台服务器,而是全球范围内协作的很多台服务器组成的层级体系。理解这个层级体系,是理解域名工作的关键。

2. 域名的结构与层级

2.1 从 URL 看域名的组成

一个完整 URL 的常见形式是:

https://www.example.com:443/path/to/page?name=value#fragment

拆开来看:

组成部分示例作用
协议https浏览器与服务器通信的规则
主机名www常表示提供 Web 服务的主机
域名主体example.com真正注册的域名
端口443访问服务器上的某个服务端口
路径/path/to/page服务器上的资源路径
查询参数name=value传给后端的参数
片段#fragment页面内部锚点

其中example.com是域名的主体部分,www是它的一个子域名,也叫主机记录。

2.2 域名的层级

域名采用树形层级结构,从右往左看:

www.example.com.

最右边有一个隐式的根.,通常不显示。

层级如下:

  • 根域名(Root Domain):用点号表示,是整个 DNS 树的起点。
  • 顶级域名(Top-Level Domain, TLD):如comorgnetcn
  • 二级域名(Second-Level Domain):如example.com中的example
  • 子域名(Subdomain):如www.example.com中的www,也可以继续扩展为api.example.comstatic.example.com

这里有一个容易混淆的概念:我们日常说“一级域名”时,通常指example.com这种形式;“二级域名”在不同语境下含义不同。从域名注册角度看,example.com是用户注册的顶级商用域名,www.example.com是它的子域名。但从 DNS 树层级看,com是顶级域,example.com是二级域。为了避免歧义,下文统一使用“主域名”和“子域名”来表达。

2.3 为什么要划分层级

层级结构的最大好处是可扩展和可授权。

全世界不可能靠一台服务器维护所有域名记录,所以 DNS 被设计成树状结构。每一层只负责自己层级的解析,并把下一级的查询任务“委托”给对应的子节点。例如:

  • 根服务器知道.com的服务器在哪。
  • .com服务器知道example.com的服务器在哪。
  • example.com的权威服务器知道自己所有子域名的记录。

这样每个层级只需要维护少量数据,整个系统可以无限扩展。

3. DNS 解析的核心机制

3.1 什么是 DNS 查询

DNS 查询指的是终端设备向 DNS 服务器发起请求,询问某个域名对应的 IP 地址。

根据查询方式的不同,可以分成:

  • 递归查询(Recursive Query):终端向本地 DNS 服务器发起请求,本地 DNS 服务器负责替终端找到最终结果。
  • 迭代查询(Iterative Query):本地 DNS 服务器向其他服务器逐级询问,每台服务器只返回它所知道的下一个线索,由本地 DNS 服务器继续追问。

用户端通常只体验递归查询,而 DNS 服务器之间是迭代查询。

3.2 一次完整解析流程

以下面的场景为例,浏览器访问www.example.com

  1. 浏览器检查本地 DNS 缓存,如果有对应 IP,直接使用。
  2. 浏览器检查操作系统 hosts 文件,如果有手动配置记录,优先使用。
  3. 操作系统向本地配置的 DNS 服务器(比如路由器的 DNS)发起递归查询。
  4. 本地 DNS 服务器先查自己的缓存,没有则从根服务器开始迭代。
  5. 根服务器返回.com顶级域服务器的地址。
  6. 本地 DNS 向.com服务器查询,得到example.com权威服务器的地址。
  7. 本地 DNS 向example.com权威服务器查询www记录。
  8. 权威服务器返回www.example.com的 IP。
  9. 本地 DNS 把结果缓存起来,并返回给操作系统。
  10. 操作系统把结果交给浏览器,并缓存一份。
  11. 浏览器向返回的 IP 发起真正的网络请求。

这就是为什么有时候加了 DNS 记录后不能立刻生效。每一级缓存都可能存在旧数据,需要等待缓存过期。

3.3 常见 DNS 记录类型

不同的记录类型解决不同的问题,常用的有:

记录类型作用示例
A把域名指向 IPv4 地址example.com93.184.216.34
AAAA把域名指向 IPv6 地址example.com2606:2800:220:1:...
CNAME把域名指向另一个域名wwwexample.com
MX指定邮件服务器example.commail.example.com
TXT文本记录,常用于验证和 SPF 反垃圾邮件v=spf1 include:... -all
NS指定域名的权威 DNS 服务器example.comns1.dns.com
SOA记录域名的起始授权信息,包含主 DNS、管理员邮箱等每个域名必须有一条
PTRIP 反向解析到域名34.216.184.93example.com

A 记录和 CNAME 记录是最常用的。A 记录直接指向 IP,CNAME 记录指向另一个域名,适合 CDN 和多域名指向同一目标时使用。需要说明的是,CNAME 记录不能与 MX 等部分记录共存于同一个主机名下,不同 DNS 服务商约束可能不同。

3.4 TTL 与解析生效时间

TTL(Time to Live)是 DNS 记录在缓存中存活的时间,单位是秒。

假设 TTL 为 600,意味着本地 DNS 服务器把这条记录缓存 600 秒。期间有新的查询,直接使用缓存结果,不再向上级服务器发起请求。

TTL 设置需要权衡:

  • TTL 越小,解析记录更新越快,但 DNS 服务器压力越大。
  • TTL 越大,查询效率越高,但修改记录后生效越慢。

所以在做域名迁移或解析变更前,建议先把 TTL 调小,比如 300 秒,等变更完成后再调回来。

4. 域名从注册到上线需要什么

4.1 域名注册与实名认证

购买域名时,你实际上是从域名注册商那里获得了一段时间的使用权。域名注册商需要向注册局提交你的注册信息,所以大多数平台都要求实名认证。

域名注册时需要注意:

  • 选择可靠、经营稳定的注册商。
  • 域名到期前及时续费,避免域名被释放。
  • 维护好注册邮箱,用于接收到期和转移通知。
  • 个人主体和公司主体的域名实名信息会影响后续备案主体。

4.2 域名备案

如果域名解析到的服务器位于中国内地,就需要完成 ICP 备案。备案的目的是让域名与服务器主体信息对应,属于网络合规的基本要求。操作流程一般是:

  1. 在服务器服务商处提交备案申请。
  2. 填写主体信息、网站信息、域名信息。
  3. 提交身份证、核验单等材料。
  4. 服务商初审后提交管局审核。
  5. 审核通过后获得备案号。

备案需要一定时间,且不同的省份、不同的服务商要求略有差异。建议在正式上线前预留充足的备案时间。若服务器在境外,则不需要 ICP 备案,但访问速度和稳定性需要自行评估。

4.3 添加解析记录

备案通过后,就可以到 DNS 解析服务商后台添加解析记录。国内常见的解析服务商包括阿里云 DNS、腾讯云 DNSPod、华为云 DNS 等。国外常用的有 Cloudflare、Route 53 等。

添加解析时,界面一般需要填写:

  • 主机记录:如www@(表示主域名本身)、*(泛解析)。
  • 记录类型:A、CNAME、MX、TXT 等。
  • 记录值:IP 地址或目标域名。
  • TTL:缓存时间。

以添加一条www.example.com的 A 记录为例,配置如下:

配置项示例值
主机记录www
记录类型A
记录值93.184.216.34
TTL600

保存后等待生效,就可以用命令验证了。

4.4 配置 HTTPS 证书

域名上线必不可少的一步是配置 HTTPS。现代网站在浏览器地址栏会显示“不安全”或“安全”标识,这些都和 SSL/TLS 证书有关。

证书申请主要有三种方式:

  • 云服务商免费证书:申请方便,有效期通常为 3 个月或 1 年,需要定期续期。
  • Let‘s Encrypt 免费证书:配合 Certbot 等工具可以自动化续期。
  • 商业付费证书:适合对品牌和兼容性要求较高的场景。

申请证书时通常需要证明你拥有域名,常见验证方式有:

  • DNS 验证:添加一条指定的 TXT 记录。
  • 文件验证:在网站根目录放置指定文件。
  • 邮箱验证:通过域名管理员邮箱确认。

DNS 验证最常见,因为不需要暴露服务端口。比如申请证书时,证书服务商要求添加如下 TXT 记录:

主机记录:_dnsauth 记录类型:TXT 记录值:ca-xxxxxx-xxxx

添加后等待 DNS 生效,点击验证即可。

证书签发后,还需要在 Nginx、Apache 或其他 Web 服务器上配置证书文件路径。以 Nginx 为例:

server { listen 443 ssl; server_name www.example.com; ssl_certificate /etc/nginx/ssl/www.example.com.pem; ssl_certificate_key /etc/nginx/ssl/www.example.com.key; location / { proxy_pass http://127.0.0.1:8080; } }

配置完成后,使用nginx -t检查语法,然后重载 Nginx 生效。

5. 实战:用命令和脚本观察域名工作过程

看完理论部分,我们来动手实践一下。这一节会用常见的命令和一个小型 Python 脚本,演示如何观察域名解析过程、检查域名连通性。

5.1 使用 ping 检查域名连通性

ping是最基础也最常用的网络测试命令。它的原理是向目标主机发送 ICMP 报文,检查网络是否可达。

在 Windows 系统,可以打开 CMD 或 PowerShell,执行:

ping www.baidu.com

在 Linux 或 macOS 终端里,命令格式相同。默认会不断执行,按Ctrl + C停止,也可以指定次数:

ping -c 4 www.baidu.com

-c 4表示只发送 4 个 ICMP 请求。

如果不想手动敲命令、又想批量记录结果,可以把 ping 的输出重定向到文件。例如将百度 ping 30 次的结果保存到当前目录下的baidu.txt

ping -c 30 www.baidu.com > baidu.txt

执行后,baidu.txt里就会包含 ping 的统计信息。Windows 下使用ping -n 30指定次数,注意参数不同:

ping -n 30 www.baidu.com > baidu.txt

5.2 使用 nslookup 查看解析记录

nslookup是查询 DNS 记录最方便的命令,Windows、Linux、macOS 都自带。

查询 A 记录:

nslookup www.baidu.com

输出中会显示域名的 IP 地址,以及使用的是哪台 DNS 服务器。

指定 DNS 服务器查询,可以加上服务器地址:

nslookup www.baidu.com 8.8.8.8

查看 MX 记录:

nslookup -type=mx example.com

查看 TXT 记录:

nslookup -type=txt example.com

如果你在 Linux 环境,还可以使用更强大的dig命令:

dig www.baidu.com

dig会显示完整的查询过程,包括查询状态、查询耗时、权威服务器等信息。dig还可以只查看某一条记录,比如 SPF 记录:

dig example.com TXT +short

5.3 Python 脚本:批量解析域名并保存结果

前面那种手动 ping 的方式适合单个域名,如果需要对多个域名做检查,用 Python 写一个脚本会更方便。

下面这段脚本实现的功能是读取一个域名列表,逐个解析域名,然后发起 ICMP ping 测试,并把结果保存到当前目录下的result.txt文件中。

# -*- coding: utf-8 -*- """ 域名连通性批量检查脚本 用法: python check_domain.py 依赖: ping 命令(Windows/Linux/macOS 均可,参数略有差异) """ import socket import subprocess import sys import platform def resolve_domain(domain): """解析域名,返回 IP 地址列表""" try: infos = socket.getaddrinfo(domain, None) ip_list = sorted(set(info[4][0] for info in infos)) return ip_list except socket.gaierror: return [] def ping_domain(domain, count=4): """对域名执行 ping 测试,返回是否通、输出信息""" system = platform.system() if system == "Windows": cmd = ["ping", "-n", str(count), domain] else: cmd = ["ping", "-c", str(count), domain] try: result = subprocess.run( cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, timeout=30 ) return result.returncode == 0, result.stdout except subprocess.TimeoutExpired: return False, "ping timeout" def main(): # 需要检查的域名列表 domains = [ "www.baidu.com", "www.qq.com", "www.example.com", "nonexistent-domain-2025.com", ] output_lines = [] for domain in domains: print(f"正在检查: {domain}") output_lines.append(f"域名: {domain}") # 1. 解析域名 ip_list = resolve_domain(domain) if ip_list: output_lines.append(f"解析结果: {', '.join(ip_list)}") else: output_lines.append("解析结果: 失败") # 2. ping 测试 ok, ping_output = ping_domain(domain) output_lines.append(f"ping 状态: {'通' if ok else '不通'}") output_lines.append("ping 输出:") output_lines.append(ping_output) output_lines.append("-" * 50) # 写结果到文件 with open("result.txt", "w", encoding="utf-8") as f: f.write("\n".join(output_lines)) print("检查完成,结果已保存到 result.txt") if __name__ == "__main__": main()

在项目目录中运行:

python check_domain.py

运行结束后,打开result.txt,可以看到每个域名的解析结果和 ping 输出。

需要注意的是,部分服务器禁 ping,导致 ping 不通并不代表域名解析有问题。如果只是检查域名解析,建议优先看resolve_domain返回的 IP 列表。

5.4 使用浏览器开发者工具观察请求过程

命令行是排查问题的好帮手,但浏览器开发者工具能更直观地展示域名与请求之间的关系。

以 Chrome 浏览器为例:

  1. 打开开发者工具,快捷键F12
  2. 切换到 Network 面板。
  3. 刷新页面。
  4. 点击任意一个请求,查看 Headers 信息。

请求头里的Host字段就是目标域名,Remote Address显示的是实际连接的 IP。如果出现Failed to load resource之类的错误,可以结合 DNS 解析结果判断是域名解析问题还是服务器问题。

6. 常见问题与排查思路

6.1 检查步骤清单

域名相关的问题通常有规律可循。遇到域名访问异常时,按以下顺序排查:

  1. 检查域名是否过期。
  2. 检查域名是否完成了实名认证和备案。
  3. 检查 DNS 解析记录是否存在、配置是否正确。
  4. 检查本地 hosts 文件是否有旧记录。
  5. 检查浏览器和操作系统 DNS 缓存。
  6. 检查目标服务器是否正常运行。
  7. 检查服务器防火墙与安全组是否放行对应端口。

6.2 常见问题汇总

问题现象常见原因解决思路
域名无法解析解析记录未添加或记录值写错到 DNS 控制台检查记录
解析记录刚修改却不生效各级 DNS 缓存未过期等待 TTL 过期或强制刷新缓存
本地能打开,别人打不开本地 hosts 文件有旧记录检查 hosts 文件
网站打不开,但解析正常服务器 80/443 端口被防火墙拦截检查安全组和服务器防火墙
邮箱发信被拒缺少 SPF、MX 或 DMARC 记录添加正确的 TXT 记录
添加子域名后访问不了子域名没有绑定服务器站点同时在 Web 服务器配置对应主机名
域名证书验证失败DNS 验证记录没有生效检查 TXT 记录内容与生效状态
域名指向 IP 后访问到其他网站IP 绑定了多个域名,需要配置 Host在 Nginx/Apache 配置 server_name
https 报证书不匹配证书域名和访问域名不一致重新申请匹配域名的证书

6.3 清理本地 DNS 缓存

当解析结果更新后,本机可能仍然使用旧缓存。清理方式因系统而异:

Windows:

ipconfig /flushdns

macOS:

sudo dscacheutil -flushcache sudo killall -HUP mDNSResponder

Linux 如果使用 systemd-resolved:

sudo systemd-resolve --flush-caches

在重新检查解析前,先用nslookup手动查询一次,能比较准确地判断权威解析是否已经生效。

6.4 关于内网域名 .local

有些读者可能在企业或实验环境中见过xxx.local这种域名。.local通常用于局域网内部解析,常见于 macOS 的 Bonjour、Windows 活动目录域环境,或者基于 mDNS 的设备发现。local不是互联网公共顶级域名,公网 DNS 无法解析。所以如果项目里使用.local,说明它只用于内网环境,不适用于公网访问。如果需要公网解析,还是要注册一个正式域名。

6.5 查询域名 TLS 版本

在排查 HTTPS 兼容性问题时,可能需要查看某个域名支持哪些 TLS 版本。可以使用 OpenSSL 客户端测试:

openssl s_client -connect www.example.com:443 -tls1_2

如果要测试其他版本,把-tls1_2换成-tls1_1-tls1_3等。连接成功表示该域名支持对应 TLS 版本。

7. 域名使用的工程建议

7.1 域名命名规划

域名一旦投入使用,再更换成本较高,所以建议在开始阶段就做好规划:

  • 使用企业或项目品牌一致的域名,方便记忆。
  • 主域名尽量简短,避免数字、连字符过多。
  • 子域名按用途划分,例如api.www.static.img.admin.
  • 不要在一个子域名上同时承载多个不相关业务,否则后续迁移困难。
  • 在 DNS 服务商处启用域名锁定,防止域名被恶意转移。

7.2 解析记录管理

解析记录是域名对外服务的基础配置,建议遵循以下原则:

  • 使用最小权限策略。不需要公网访问的服务不添加公网解析记录。
  • 为每种服务选择正确的记录类型。能用 CNAME 指向稳定目标时,不直接用 A 记录写死 IP。
  • 重要记录添加监控,发现解析异常及时处理。
  • 合理设置 TTL。日常使用保持 600 秒左右,变更前调低为 60 到 300 秒。
  • 所有解析记录变更前,先记录旧值,便于快速回滚。

7.3 安全与监控

域名安全直接影响网站可用性,建议关注以下几点:

  • 使用强密码和双重认证保护域名注册商与 DNS 服务商账号。
  • 启用 DNSSEC(如果服务商支持),防止 DNS 欺骗和缓存污染。
  • 正确配置 SPF、DKIM、DMARC 记录,防止域名被用于伪造发件人。
  • 监控域名到期时间,提前 30 天续费。
  • 定期检查解析记录,确认没有新增的未知记录。如果发现陌生子域名或陌生 IP 指向,可能存在恶意解析,需要立即排查并清理。
  • 使用 CDN 服务时,注意源站 IP 泄露问题,防止攻击者绕过 CDN 直接攻击源站。

7.4 多域名与子域名场景

实际项目中,一个服务器往往需要配多个域名或多个子域名。以 Nginx 为例,可以通过多个server块分别配置:

# 文件路径:/etc/nginx/conf.d/www.conf server { listen 80; server_name www.example.com; location / { proxy_pass http://127.0.0.1:8080; } } # 文件路径:/etc/nginx/conf.d/api.conf server { listen 80; server_name api.example.com; location / { proxy_pass http://127.0.0.1:9090; } }

这样的好处是,每个子域名可以独立指向不同的后端服务,互不影响。修改 DNS 时,只需在解析控制台添加对应的主机记录即可。

如果有多个域名共用同一套站点,可以使用server_name字段配置多个域名:

server { listen 80; server_name example.com www.example.com; location / { proxy_pass http://127.0.0.1:8080; } }

7.5 域名相关自动化

域名配置中重复性较高的操作,可以考虑写成脚本。比如批量检查多个域名的解析结果、自动续期 HTTPS 证书、解析记录变更前备份等。

对于证书续期,推荐使用 Certbot:

sudo certbot renew --dry-run

把续期命令配置为 cron 定期任务,可以实现 HTTPS 证书自动化管理,避免证书过期导致网站无法访问。

8. 写在最后

域名的核心并不复杂。理解了域名结构、DNS 解析流程和常见记录类型,大部分日常问题都能自己排查。真正容易踩坑的地方反而是缓存、备案、证书、服务器配置这些周边环节。

建议你接下来动手做三件事:

  1. nslookupdig查看自己常用网站的 A 记录、MX 记录、TXT 记录,对比解析结果。
  2. 如果你有域名,尝试添加一条新的子域名解析记录,并配置到本地 Web 服务上。
  3. 用文中给出的 Python 脚本,批量检查几个域名并保存结果,体验从解析到连通性测试的完整流程。

掌握域名的工作原理后,再遇到“网站打不开”“解析不生效”这类问题,你就不会盲目改配置,而是能按部就班地定位问题出在缓存、解析、服务器还是网络链路上了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 14:17:33

腾讯开源多模态本地搜索工具:让图片视频文本统一检索

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 14:15:45

ARM Mali GPU开发:libmali链接与动态库加载排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 14:13:02

维普重点标红文献综述和理论分析的降AI修改方法

维普重点标红文献综述和理论分析的降AI修改方法 在公共管理与城市空间治理现代化政策评估方向的硕士学位论文维普审查中,综述与理论部分的连续高亮让很多同学倍感焦虑:维普重点标红文献综述和理论分析的降AI修改方法该怎么做?整篇 3.3 万字的…

作者头像 李华