域名解析
输入网址,域名解析敲回车,域名解析网页就打开了。域名解析这中间发生的域名解析第一件事,就是域名解析域名解析。
浏览器拿到你输入的域名解析字符串之后,它其实并不知道"某某网站"在哪。域名解析它需要把这个人类可读的域名解析名字翻译成一个IP地址——类似 104.21.36.77 这样的一串数字。这个翻译过程,域名解析就是域名解析域名解析。没有这一步,域名解析你输入的域名解析每一个网址都只是一串无意义的字母。
具体怎么翻译?域名解析靠的是DNS,域名系统。域名解析你可以把它想象成一本全球共享的域名解析电话簿,只不过这本电话簿不是放在某一个地方,而是分散在成千上万台服务器上。每台服务器负责记录一部分域名和对应IP的映射关系。
查询的过程是递归的。你的电脑先问本地DNS服务器(通常是运营商提供的,也可能是公共的,比如 8.8.8.8 或者 223.5.5.5)。本地服务器如果缓存里有记录,直接返回;没有的话,它替你从根域名服务器开始,一层一层往下问。根服务器告诉你 .com 的顶级域名服务器在哪,顶级域名服务器告诉你负责这个具体域名的权威服务器在哪,权威服务器最终给出IP地址。整个过程通常在几十毫秒内完成,你根本感觉不到。
我第一次意识到这个过程有多复杂,是因为一次网站打不开的经历。浏览器一直转圈,最后报了个 DNS_PROBE_FINISHED_NXDOMAIN 的错误。查了一下才知道,NXDOMAIN 的意思是"这个域名不存在"。问题出在我本地DNS缓存里存了一条过期的记录——那个网站换了服务器,IP变了,但我电脑里还记着旧地址。清了一下缓存,立刻恢复正常。DNS缓存能加速解析,但缓存过期或者被污染的时候,也会带来麻烦。
域名解析不只是"翻译"这么简单。它还承担着负载均衡和故障转移的角色。大型网站一个域名可以对应多个IP地址,DNS服务器根据策略返回不同的IP,把流量分散到不同的机房。某个机房挂了,把对应的IP从DNS记录里摘掉就行。这个切换速度取决于TTL值——也就是那条记录在各级缓存里存活的时间。TTL设得短,切换快,但解析请求会更频繁;设得长,缓存命中率高,但出问题时切换就慢。运维人员经常要在这两者之间做取舍。
还有一种情况叫DNS劫持。你输入了正确的域名,但返回的是一个错误的IP——可能是广告页面,可能是钓鱼网站。早些年国内运营商干过这种事,把不存在的域名解析到自己的广告服务器上。现在好一些了,但公共WiFi环境下这个问题依然存在。用HTTPS能缓解一部分,因为证书验证会失败,浏览器会报警。但根本的解决办法还是用加密的DNS查询,比如DoH(DNS over HTTPS)或者DoT(DNS over TLS),让查询过程不被中间人篡改。
对普通用户来说,域名解析基本是透明的。你不需要知道它怎么工作,它就在那里。但一旦出问题,你会发现整个互联网好像都断了——明明网络是通的,QQ能发消息,但网页就是打不开。这种时候,多半就是DNS出了状况。换个DNS服务器地址,或者刷新一下缓存,往往就能解决。
我自己的习惯是把路由器上的DNS改成 223.5.5.5 和 119.29.29.29,国内用着稳定,解析速度也快。偶尔遇到某个域名解析异常,就临时切到 8.8.8.8 试试。算不上什么高深技巧,但确实省了不少事。
域名解析是互联网最基础的设施之一,基础到大多数人从来不会想到它。但正是这种"想不到",说明它运转得足够好。
本文地址:http://www.79wt.cn/news/1648e9599740.html
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。