日常打开电脑或者手机,输入网址比如 taobao.com,页面很快加载出来。这件事太过平常,很少有人留意背后发生了什么,DNS就在后台默默承担域名解析工作。
DNS全称Domain Name System,中文叫域名系统。功能理解起来很简单:把人方便记忆的域名,转换为服务器识别的IP地址。
互联网里每一台服务器都分配IP地址,类似房屋门牌号。IPv4地址格式类似192.168.1.1或者142.250.72.196;IPv6地址更长,由十六进制字符搭配冒号组成。机器读取IP没有障碍,但人很难记忆。几乎没人能记住淘宝服务器IP,就算记住,一旦网站迁移服务器,IP变更,旧地址直接失效。所以需要一套系统,允许用户使用域名访问站点,后台自动翻译成当前生效IP,DNS就承担这个翻译工作。

可以把DNS类比成互联网电话簿。想联系朋友,不用死记手机号,打开通讯录找到名字直接拨号。DNS逻辑相近,提交域名,返回对应的IP地址。设备拿到IP之后,和目标服务器建立连接,下载网页内容。
DNS不是存放在单台机房设备里的静态电话簿,属于分布式数据库,部署在全球成千上万服务器上。没有任何一台服务器掌握全部域名对应的IP。服务器之间分工协作,逐层完成查询。
层级结构是这样:最顶层是根域名服务器,全球一共13组。根服务器不保存具体域名解析结果,只记录全部顶级域名,像.com、.cn、org对应的服务器地址。查询www.example.comIP,根服务器不会直接给出答案,只会告知.com顶级域名服务器位置,让查询请求转向它。接着.com顶级域名服务器返回example.com权威服务器地址。最后权威服务器保存www.example.com和IP的映射关系,返回最终查询结果。
完整一轮查询流程,耗时通常在几十毫秒。电脑和本地DNS服务器会缓存解析结果,再次访问同一个域名,直接调取缓存,不用重复完整查询链路。
DNS在互联网的作用,不只是域名IP翻译。邮件路由同样依赖DNS。发送邮件到someone@example.com,邮件系统会查询example.com的MX记录,找到负责接收邮件的服务器地址。缺少DNS,电子邮件无法正常投递。
内容分发业务也离不开DNS。大型网站普遍部署CDN,把静态资源缓存到离用户更近的节点。DNS可以根据用户地理位置返回不同IP地址。在北京访问,分配北京节点IP;广州用户访问,则返回广州节点。用户感知不到这个过程,但网页加载速度会得到提升。
域名所有权验证同样依靠DNS。申请网站SSL证书的时候,证书机构会要求在DNS内添加特定TXT记录,检索到这条记录,就能确认域名归属。很多第三方平台绑定域名,都采用同样验证方式。
安全层面DNS也起到关键作用。DNSSEC属于DNS安全扩展,用来防止解析结果被篡改。没有DNSSEC保护,攻击者有可能伪造DNS返回记录,把用户引导至虚假网站。DNSSEC整体普及率不算高,但金融、政府这类高安全需求场景,应用越来越广泛。
DNS故障带来的影响十分直观,网站打不开、App无法连接服务器、邮件发送失败。有意思的一点,如果直接输入IP访问站点,网络有可能正常连通。这种情况说明基础网络没问题,问题出在DNS解析环节。不少互联网线上故障,排查之后根源都是DNS异常。
简单总结,DNS就是互联网导航系统。它不负责搭建网络线路,也不负责传输数据,但没有DNS,设备找不到目标服务器。DNS始终在后台静默运行,用户很难感知,每天处理全球万亿级别DNS查询请求,查询量还在持续上涨。
下次打开网页,可以简单想一想这套底层系统。它不显眼,但整个互联网都离不开它。