在浏览器里输入一个域名,几秒钟之后页面就出来了,中间发生的事一件也看不到。这段过程里地址是怎么被问出来的、谁负责回答,平时没人关心,可一旦出现打不开、跳到别处、时好时坏这类现象,就得知道每一步是谁在做。把参与其中的几个角色分清,遇到解析类的问题时能直接判断从哪里查起,不用一个个去试。代理IP使用中遇到的不少访问异常,源头也在这条链上。
地址是被问出来的
本机并不记得每个域名对应哪个地址,需要的时候才去问。第一站是本机配置里写着的那台服务器,请求先发给它。如果它手里有现成的答案并且没过期,就直接返回,这条路最短也最快。没有答案的时候,它代替使用者继续往外问,问到结果再带回来。
往外问的那一段
往外问是逐级进行的:从最顶层开始,一层层往下要,直到问到管着这个域名的服务器。这个过程中可能经过好几台,每台的耗时不一样,所以第一次问某个域名往往比第二次慢。
第一次查询慢,多数是因为逐级去问了;第二次快,是因为路上已经留了副本。
管着某个域名的服务器给出的答案叫权威答案,其他环节给出的都只是转述或者副本。分清这两类,判断结果可信度时就有依据。副本会按记录上标明的时间保留一段,到期之后要重新去问一次。代理IP环境下如果本机或者链路上多了一层留副本的环节,答案的更新时间也会跟着变。
结果回到本机之后
拿到答案之后,本机也会按同样的时间保留一份。这段时间内再次访问同一个域名,不会再往外问,直接用手里这份。所以修改域名指向之后,各地生效快慢并不一致,取决于路上每个环节各自留了多久。代理IP的解析设置如果被改动,同样要等到这一层副本过期才能在现象上看到变化。
- 本机 → 本地服务器 → 逐级询问 → 管这个域名的服务器
- 每经过一个留副本的环节,答案就被多存一份
- 记录上标明的时间决定存多久,到期重新问
每一层的保留时间各自独立,到期时间不会整齐划一。
从输入域名到拿到地址,中间参与的角色并不少。把留副本这一环记住,代理IP环境下解析异常的判断会顺很多。
