深入理解 DNS:互联网的“电话簿”
当我们在浏览器中输入一个网址,比如 www.baidu.com
,背后到底发生了什么?这其实离不开一个关键的网络基础设施 —— DNS(域名系统)。本篇博客将围绕以下四个关键问题,带你深入理解 DNS 的原理与实际运作:
- DNS 是什么?
- DNS 域名解析的流程?
- DNS 劫持和污染?
- DNS 用了什么传输协议?(TCP 还是 UDP)
一、DNS 是什么?
DNS(Domain Name System)即“域名系统”,是互联网中的分布式数据库系统,主要功能是将域名映射为 IP 地址,也就是我们常说的“域名解析”。
因为人类更容易记住域名,而计算机之间通信只能使用 IP 地址,所以 DNS 的存在大大提升了互联网的可用性。
举个例子:
当你访问 www.taobao.com
,DNS 服务器会将它解析为一个 IP 地址,比如 140.205.220.96
,然后你的计算机就可以和这个 IP 建立连接,实现网页访问。
二、DNS 域名解析的流程
域名解析其实是一个分层递归查询的过程,下面是完整流程的详解:
1. 浏览器缓存
浏览器会首先查找本地是否缓存过该域名对应的 IP,如果找到了,就直接使用,节省解析时间。
2. 操作系统缓存
若浏览器缓存中没有,系统会检查操作系统维护的 DNS 缓存(如 ipconfig /displaydns
可以查看 Windows 下的 DNS 缓存)。
3. 本地 DNS 服务器(递归解析器)
如果本地没有缓存,系统会将请求发送到 ISP(网络运营商)配置的本地 DNS 服务器,这个服务器会负责递归查询过程。
举个例子:你访问 www.baidu.com
:
- 浏览器将请求发给本地 DNS;
- 本地 DNS 向根服务器、TLD 服务器、权威服务器等一步步查询;
- 拿到结果后返回给浏览器。
➡️ 客户端“只问一次”,本地 DNS“跑断腿”。
4. DNS 服务器之间迭代查询过程
本地 DNS 服务器依次向以下服务器查询:
- 根域名服务器(Root DNS):返回顶级域服务器地址(如
.com
的服务器); - 顶级域名服务器(TLD DNS):返回权威域服务器地址;
- 权威 DNS 服务器(Authoritative DNS):返回最终 IP 地址。
最终本地 DNS 服务器将 IP 返回给客户端,同时缓存结果以加快下次查询。
例如,你要访问“www.apple.com”,就要进行下面的三次查询:
- 访问根域名服务器,它会告诉你“com”顶级域名服务器的地址;
- 访问“com”顶级域名服务器,它再告诉你“apple.com”域名服务器的地址;
- 最后访问“apple.com”域名服务器,就得到了“www.apple.com”的地址。
虽然核心的 DNS 系统遍布全球,服务能力很强也很稳定,但如果全世界的网民都往这个系统里挤,即使不挤瘫痪了,访问速度也会很慢。
所以在核心 DNS 系统之外,还有两种手段用来减轻域名解析的压力,并且能够更快地获取结果,基本思路就是“缓存”。
➡️ 每一层“只指路”,最终结果靠发起者拼出来。
三、DNS 劫持和污染
DNS 的开放性和明文传输方式,使其成为攻击者的目标。两种常见的攻击方式是:
1. DNS 劫持(DNS Hijacking)
攻击者通过篡改 DNS 查询路径,将原本访问的域名重定向到恶意网站或广告页面。
常见方式:
- 修改本地 hosts 文件
- 路由器被篡改
- 运营商劫持 DNS 响应
后果:
- 访问网站被篡改
- 中毒、丢失账户信息
2. DNS 污染(DNS Spoofing / DNS Cache Poisoning)
攻击者向 DNS 缓存中注入虚假解析记录,让你访问的是一个伪造的 IP 地址。
特点:
- 通常发生在 DNS 服务器之间的数据传输过程中;
- 伪造响应比真正的响应先到达 DNS 服务器,就会被错误缓存;
- 用户即使访问正确的域名,也会被导向错误的地址。
🔐 防御措施:
- 使用可信 DNS,如
8.8.8.8
(Google)、1.1.1.1
(Cloudflare); - 开启 DNS 加密传输协议(DoH、DoT);
- 检查路由器安全配置,避免被第三方劫持;
- 避免连接来路不明的 WiFi 网络。
四、DNS 用了什么传输协议?(TCP 还是 UDP)
DNS 查询本质上是客户端与服务器之间的通信。那么它是用哪种传输协议完成的呢?
✅ 默认使用 UDP 协议(端口号 53)
- DNS 查询对实时性要求高,UDP 是无连接协议,速度快;
- 普通 DNS 查询的数据包较小,UDP 能够胜任;
- 无需建立连接,效率高、资源占用低。
📦 什么时候使用 TCP?
- 当 DNS 响应的数据超过 512 字节(如带有大量记录的响应);
- 使用 DNSSEC 或长记录时;
- 执行 区域传输(Zone Transfer) 操作;
- UDP 查询失败,自动回退为 TCP。
📊 协议对比表:
场景 | 协议 | 端口 |
普通查询(A记录、CNAME等) | UDP | 53 |
响应过大 / 安全验证 | TCP | 53 |
加密 DNS(DoH、DoT) | HTTPS/TLS | 443/853 |
✍️ 总结
DNS 是互联网背后最基础的“翻译官”,帮助我们用文字记住网站,用 IP 建立连接。掌握它的工作机制、安全隐患以及通信协议,不仅有助于理解网络底层原理,也能帮助我们提升网络安全意识。