DNSReadme:我是如何为域名找到家的当我们在浏览器的地址栏中输入www.baidu.com时,百??度的首页就出现在我们的面前。但是你有没有想过,为什么我们一进入www.baidu.com就弹出百度首页?弹指之间发生了什么?今天,就让小编带你揭开这背后发生的一切。在开始之前,我们需要了解:虽然我们每次访问网页时都会使用域名(例如:www.baidu.com)。但是对于一台电脑来说,最终访问的是域名对应的IP(比如:10.102.201.253)。所以我们今天要讲的所有内容,其实就是想弄清楚一件事:DNS是如何为域名找到对应的IP地址的。浏览器DNS缓存当我们在浏览器地址栏输入域名时,浏览器会先去自己的DNS缓存中查找是否有对应域名的记录。如果是,则直接访问相应的服务器。不同的浏览器会设置不同的DNS缓存时间,一般在2-30分钟之间。如果发现修改系统DNS缓存后访问仍然不生效,可以尝试清除浏览器的DNS缓存。系统DNS缓存当浏览器在自己的缓存中找不到域名的记录时,它会在系统的DNS缓存中查找记录。在Windows系统上,DNS缓存信息存储在C:/windows/system32/drivers/etc/hosts中。在MacOSX系统上,DNS缓存信息存储在/etc/hosts文件中。但是无论在哪个系统,文件的格式都是域名IP地址的映射。每一行都是一个映射,前面是域名对应的IP地址,后面是对应的域名。127.0.0.1www.baidu.com192.168.1.1www.google.com如上例所示,设置了我们访问www.baidu.com时直接访问本机127.0.0.1。而当我们访问www.google.com时,我们直接访问机器192.168.1.1。所以很多时候,我们在本地调试的时候,可以设置任意域名,只要该域名对应的IP有相应的服务即可。比如我这种喜欢写文章的程序员,我可以这样写一个域名映射:127.0.0.1top-writer.google.com当你在你的机器上访问top-writer.google.com时,请求会自然会转发到这台机器,即使你不是这个域名的所有者。如果本地DNS服务器在系统DNS中找不到域名记录,浏览器就会去本地DNS服务器(LDNS)寻找域名记录。这里的LDNS一般是指本机设置的DNS服务器地址。比如在我的电脑上,它对应的DNS地址是:10.xxx.xxx.253。然后浏览器会去DNS服务器上查找域名对应的记录。如果在LDNS服务器上查到该记录,则直接返回。但如果你仍然找不到记录,那么你必须进一步寻找。根DNS服务器当LDNS服务器仍然无法招募到该域名对应的记录时,它会去根DNS服务器寻找该域名对应的记录。世界上只有13台根DNS服务器,所以在建立LDNS服务器时,会写入根DNS服务器的IP地址列表。但实际上,根DNS服务器并不存储所有域名的信息,它只存储顶级域名的解析记录。即对于我们访问的域名www.baidu.com,根DNS服务器无法告诉我们域名www.baidu.com的IP地址是多少,它只能告诉我们顶级域名是哪个DNS服务器name.com应该找到解析,然后告诉我们顶级DNS服务器对应的IP地址。顶级DNS服务器我们访问域名www.baidu.com后,根DNS服务器告诉我们可以找到对应的.com顶级DNS服务器进行解析。但实际上顶级DNS服务器只能解析二级域名的地址,也就是只能告诉你应该用哪个DNS服务器来解析域名baidu.com。这里我们从顶级DNS服务器解析域名baidu.com,得到DNS服务器,其实就是购买域名时用来管理解析的服务器。并且也是你在设置域名NS记录时设置的DNS服务器的地址。注:关于什么是NS记录,可以在公众号后台回复“域名解析类型”,查看我写的另一篇文章。在域名DNS服务器的最后一步,我们知道应该使用哪个DNS服务器来解析顶级域名baidu.com。其实这个DNS服务器就是我们在购买域名的时候设置的用来解析的DNS服务器。在这个DNS服务器上,我们可以通过设置A记录(A记录是域名到IP地址的映射)将域名与IP关联起来。当浏览器请求baidu.com对应的DNS服务器时,会尝试查找解析类型为A、主机名为www的解析记录。如果找到,则返回对应的IP地址。否则会报DNS解析错误,不会去其他DNS服务器上找。小结看到这里,相信大家对DNS寻址的整个过程就清楚了。一般来说,DNS寻址的顺序是:浏览器DNS缓存系统DNS缓存本地DNS服务器根DNS服务器顶级DNS服务器域名如果DNS服务器最后还是找不到解析记录,会直接报一个域名分辨率错误。在这个过程中,我们还可以学到两个重要的知识点,即:第一,域名的DNS服务器是NS记录设置的地址。我们可以在域名服务商处设置NS记录,将域名托管到另一台DNS服务器上进行解析。这时候顶级DNS服务器注册的域名DNS服务器就是我们NS记录配置的值。上图中,我为doc.csyimg.com子域名设置了一条NS解析记录。那么当我访问doc.csyimg.com时,解析到顶级DNS服务器时,顶级DNS服务器应该返回csyimg.com对应的域名的DNS服务器地址。然后当浏览器访问csyimg.com对应的域名的DNS服务器时,发现要访问域名doc.csyimg.com,因为设置了NS记录,所以被告知要去DNSns.baidu.com的服务器找到对应的解析记录。注意:这里说的是找ns.baidu.com解决。其实应该是域名对应的IP。为表达方便,这里不作解释。第二,域名最终得到的IP地址是通过域名的A解析类型。通过上面的解释,你会发现无论你怎么设置,最终都会有一个DNS服务器来解析域名。在DNS服务器上,肯定有一条解析类型为A的解析记录,如下图,我为域名hello.csyimg.com设置了一条A记录,指向IP192.168.1.1。如果最后找不到A记录,浏览器就会报DNS解析错误。三、域名的组成:主机名。二级域名。顶级域名。根域名。例如:www.baidu.com中,www为主机名,.baidu为二级域名,.com为顶级域名。和。.com后省略为根域名。通过这两个知识点,你会发现域名解析类型与DNS解析原理息息相关。有兴趣的可以在公众号后台回复“域名解析类型”,看看我写的另一篇文章。
