话说DNS及域名&ip 2020-03-16 22:03 本篇主要解决两个问题: 1、DNS究竟是什么? 2、查询一个域名的ip会经过几次DNS服务器? > 阅读本篇的前置知识是大致知道访问一个url会先去DNS服务器根据域名解析出ip地址,然后才能正确的访问到对应的服务器。 ### DNS究竟是什么? DNS (Domain Name System 的缩写)域名系统服务。 他们是一台台**服务器**(你可以将其想成电脑),作用是根据域名查询出ip地址(这个过程我们叫做DNS解析),以及控制因特网的电子邮件的发送。**我们就称之为DNS服务器**。你可以将其想象做一个电话本。 用专业的话说,DNS是一种分布式网络目录服务。 ### 查询一个域名的ip会经过几次DNS服务器? #### 1、首先,我们要明确什么是域名。 www.baidu.com , oldj.net , riun.xyz , 这样的叫做域名。 **域名是有层级的**,所有域名的尾部,都有一个根域名.root。因为所有域名都有,所以平时就将其省略了。 比如:www.baidu.com 其实是 www.baidu.com.root oldj.net 其实是 oldj.net.root。平时用的只是简写(不过你如果输入 www.baidu.com.root 是无法访问的,因为会在其尾部默认加上一个.root,那么就变成了 www.baidu.com.root.root) 而域名的层级,是从后往前的。即位置靠“后面的”属于“上层”。 域名的层级为:主机名.次级域名.顶级域名.根域名。 比如:www.baidu.com 根域名为.root ,顶级域名为.com ,次级域名为.baidu ,主机名为www(又称三级域名) #### 2、其次,我们要做出一个假设 【查询一个域名的ip会经过几次DNS服务器?】这个问题并不等同于【在浏览器输入域名后敲回车经过了几次DNS服务器才找到对应ip】 由于我并不知道查一个域名的ip是否需要先去所谓的提供“根据域名查询ip”服务的网络应用,如果是,就要多加一次,因为去这个网络应用所在的服务器还需要一次DNS解析。 所以我现在假设不存在这个【网络应用】,而是直接通过命令(dig,nslookup等),查询一个域名对应的ip。 比如要查询oldj.net对应的ip。 查询域名对应的ip先从最近的DNS服务器去查找,如果找到就是1次;没有找到,就要从当前DNS服务器上找到内置的根域名服务器地址(第1次); 从根域名服务器上寻找顶级域名服务器(net)所在的DNS的ip地址(第2次),假设最好的情况下仅查询了一台根域名服务器就查询到了net这个顶级域名服务器对应的ip,那么就找到了net这个顶级域名存在的DNS服务器; 接着需要从net所在的这个DNS服务器上查找次级域名(oldj)的DNS服务器的ip(第3次),假设最好情况下当前顶级域名服务器(net)上就能够找到oldj对应的ip,就找到了。如果没有,就从其他DNS服务器上找(存有net这个顶级域名的DNS服务器有很多,在第一台上没有找到oldj对应的ip,就换下一台找) **所以我的答案是:≥1 次。** 不仅跟域名有关(oldj.net这样没有主机的域名天然比 www.baidu.com 这样有主机的域名要查询DNS的次数少),也跟所查询的DNS服务器有关(当前服务器上是否有所需的ip或者NS信息,如果没有就要接着下一台DNS服务器查询),还与最近的DNS服务器上是否存在当前域名的ip有关。 下图手画,可以配合文字观看(右键在新标签页打开查看大图)。  --- 本期参考资料: - 阮一峰,DNS原理入门:https://www.ruanyifeng.com/blog/2016/06/dns.html - 户根勤《网络是怎样连接的》【微信读书可阅】 - [百度百科-DNS](https://baike.baidu.com/item/%E5%9F%9F%E5%90%8D%E7%B3%BB%E7%BB%9F%EF%BC%88%E6%9C%8D%E5%8A%A1%EF%BC%89%E5%8D%8F%E8%AE%AE/15134609?fromtitle=DNS&fromid=427444&fr=aladdin) --END--
发表评论