话说DNS及域名&ip

以下内容首发于我的个人博客网站:
http://riun.xyz


本篇主要解决两个问题:
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有关。

下图手画,可以配合文字观看。
在这里插入图片描述

大图(存在github上,访问可能较慢):https://raw.githubusercontent.com/hanhanhanxu/pic/master/2020-3/DNS%E6%A0%B9%E6%8D%AE%E5%9F%9F%E5%90%8D%E6%9F%A5%E8%AF%A2ip.jpg


本期参考资料:

  • 阮一峰,DNS原理入门:https://www.ruanyifeng.com/blog/2016/06/dns.html

  • 户根勤《网络是怎样连接的》【微信读书可阅】

  • 百度百科-DNS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章