游客发表
打开浏览器,析查询敲下“example.com”,析查询回车。析查询屏幕在几百毫秒内刷出新页面。析查询这背后,析查询一场跨越全球的析查询接力赛已经跑完。DNS解析查询,析查询就是析查询这场接力赛的第一棒。
它做的析查询事,说穿了很简单:把人类能记住的析查询域名,翻译成机器能识别的析查询IP地址。你记不住142.250.72.14,析查询但你能记住google.com。析查询DNS就是析查询那个帮你查号的服务员。
但这个“服务员”的析查询工作流程,比大多数人想的要绕。
假设你第一次访问example.com。浏览器先翻自己的缓存——最近有没有查过?没有。操作系统也翻一遍自己的hosts文件和DNS缓存,还是没有。于是请求发给本地DNS服务器,通常是你路由器上配置的那个,或者运营商提供的。
本地DNS服务器如果也没缓存,它就得从根开始问起。
根域名服务器全球有13组,它不直接告诉你example.com的IP,而是说:“去问.com的服务器。”本地DNS转头去问.com的顶级域服务器,对方同样不直接回答,而是指向example.com的权威域名服务器。最后,权威服务器才给出真正的A记录,比如93.184.216.34。
这一圈跑下来,通常也就几十毫秒。但每次都要这么跑,谁都受不了。所以每一层都有缓存,TTL(生存时间)决定这条记录能存多久。常见值从300秒到86400秒不等。你改了解析记录,有时候要等半天才生效,就是旧缓存还没过期。
查询方式也有讲究。递归查询和迭代查询是两回事。你向本地DNS发起的通常是递归查询——“帮我查到底”。本地DNS向根、顶级域、权威服务器发起的则是迭代查询——“你告诉我下一步问谁就行”。
还有个细节:UDP协议。DNS查询默认走UDP的53端口,因为快,不需要三次握手。但UDP不保证送达,所以有EDNS0扩展和TCP回退机制。响应超过512字节,或者做区域传送,就切到TCP。这个设计在几十年前够用,现在DNSSEC签名一挂,包体积涨了不少,UDP的短板就露出来了。
我见过不少“网站打不开”的故障,最后查下来是DNS问题。有一次同事说公司内网某个系统访问不了,ping域名没反应,ping IP正常。换了个DNS服务器,立刻恢复。原因也简单:内部DNS服务器没配转发器,外部域名解析不了。
排查DNS问题,dig和nslookup是趁手的工具。dig +trace example.com 能把整条解析链路打出来,从根到权威一目了然。看响应里的status字段,NOERROR、NXDOMAIN、SERVFAIL,各自对应不同的问题。NXDOMAIN是域名不存在,SERVFAIL往往是服务器配置或网络出了问题。
公共DNS的选择也算个事儿。114.114.114.114国内快,8.8.8.8和1.1.1.1在国外资源上更稳。但别忽略一点:用谁的DNS,谁就能看到你查了什么。DNS over HTTPS和DNS over TLS这几年推得动,就是因为明文UDP查询在隐私上基本等于裸奔。Firefox和Chrome都内置了DoH支持,开启后查询走加密通道,运营商看不到你访问了哪些域名。
当然,加密DNS也带来新麻烦。企业内网想做域名过滤,DoH一开就绕过去了。所以不少公司干脆屏蔽公共DoH服务器,强制走内部解析。
DNS这套系统1983年设计出来,跑了四十多年。它不完美——明文传输、缓存污染、DDoS攻击面大。但你要换掉它,全球互联网都得跟着动。所以它还在那儿,默默做着翻译工作。你每次上网,它都在你看不见的地方跑完那圈接力。
友情链接