Part1什么是DNS
我们知道,每个网站都有一个域名和一个以上的IP地址,当我们想浏览某个网站的时候,只需要在浏览器输入该网址的域名就可以访问了。要是没有域名能不能实现访问网站呢?答案当然是可以啦,不过你每次都需要记住访问的网址的IP地址,比如,你想用百度,每次都需要在浏览器打入112.80.248.74,是不是很令人崩溃啊哈哈哈哈。那么,网址域名和IP地址之间是如何实现一一映射的呢?这时候DNS就该闪亮登场的了。
DNS的全称是domain name system
,即域名系统。DNS是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的去访问互联网而不用去记住能够被机器直接读取的IP地址。通过域名,最终得到该域名对应的IP地址的过程则是域名解析的过程。DNS如何解析
Part2递归查询
某天,客户端想要访问XXX网站,但是,客户端并不知道XXX网站的IP地址。于是,展开了如下对话
客户端:“本地DNS服务器大佬,求问XXX的IP地址是多少?”
本地DNS服务器:“不好意思,我不知道,但是根域名服务器可能会知道,我替去问他吧”
本地DNS服务器:“根域名服务器大佬,求问XXX的IP地址是多少?”
根域名服务器:“不好意思,我不也知道,但是A顶级域名服务器可能会知道,我替你去问他吧”
根域名服务器:“A顶级域名服务器,求问XXX的IP地址是多少?”
A顶级域名服务器:“不好意思,我不也知道,但是B域名服务器可能会知道,我替你去问他吧”
A顶级域名服务器:“B域名服务器,求问XXX的IP地址是多少?”
B域名服务器:“A顶级域名服务器,查到XXX的IP地址是192.168.168.6
”
A顶级域名服务器:“根域名服务器,查到XXX的IP地址是192.168.168.6
”
根域名服务器:“本地DNS服务器,查到XXX的IP地址是192.168.168.6
”
本地DNS服务器:“客户端,查到XXX的IP地址是192.168.168.6”
客户端:“谢谢各位大佬,XXX的IP地址是192.168.168.6
,我可以和他愉快的通讯了”
通过上面的对话,我们可以发现,递归查询时如果客户端所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他顶级域名服务器继续发出查询,直到查询到结果后,再层层传递回来。
Part3迭代查询
客户端:“本地DNS服务器大佬,求问XXX的IP地址是多少?”
本地DNS服务器:“不好意思,我不知道,但是根域名服务器可能会知道,你去问他吧”,本地DNS服务器说完,并把根域名服务器地址发给客户端。
客户端:“根域名服务器大佬,求问XXX的IP地址是多少?”
根域名服务器:“不好意思,我不也知道,但是A顶级域名服务器可能会知道,你去问他吧”,根域名服务器说完,并把A顶级域名服务器地址发给客户端。
客户端只能又跑去问A顶级域名服务器了。
客户端:“A顶级域名服务器大佬,求问XXX的IP地址是多少?”
A顶级域名服务器:“不好意思,我不也知道,但是B域名服务器可能会知道,你去问他吧”,A顶级域名服务器说完,并把B域名服务器地址发给客户端。
客户端非常无奈,只能又跑去问B域名服务器了。
客户端:“B域名服务器大佬,求问XXX的IP地址是多少?”
B域名服务器:“客户端同学,查到XXX的IP地址是192.168.168.6”
。
客户端:“谢谢B域名服务器大佬,XXX的IP地址是192.168.168.6
,我可以和他愉快的通讯了”
就这样,客户端在询问了一大圈之后,终于知道了XXX的IP地址了。
Part4总结
在上一节中,我们知道了DNS的两种查询方法,但实际上,在DNS查询过程中,客户端和服务器也都会加入缓存的机制,这样可以减少查询的次数,加快域名解析过程。当我们在浏览器中输入一个网站时,会发生如下过程
1、浏览器中输入想要访问的网站的域名,操作系统会先检查本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
2、如果hosts里没有这个域名的映射,客户端会向本地DNS服务器发起查询。本地DNS服务器收到查询时,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析。
3、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置,采用递归或者迭代查询,直至解析完成。