首先DNS(Domain Name System)即域名系统,为什么会有域名系统这回事呢?想想一下当你想要访问一个网站(本质是访问一个服务器其对应一个I或多个IP),如果你需要在地址栏里输入每个网站的IP地址时,那是多让人感到痛苦的事情,你不可能记住所有你想访问的网站的IP(因为他们没有任何的规律可言)。于是,伟大的先人们就想到了域名解析这个点子,即通过有规律的(比如网站的名称就是网站 的访问标识)的名字标志来让大家访问网站,当然通过IP也是可以访问的(当网站就域名仅仅对应一个IP时)。但是最终的访问本质还是基于IP访问的(因为它是“唯一”),所以我们需要在IP和域名间做个映射,当用户通过域名访问是DNS服务器就会映射到相应的IP上。故DNS从某种意义上来说就是一个巨大的IP和域名相互映射的数据库。
说完了简单的问题来源,咱们就说下具体的DNS原理。假设当你访问baidu.com 这个域名时就需要吧这个域名解析到相应主机的IP上才能访问这个站点。那怎么查询,又分为递归查询和迭代查询。所谓递归查询是提高解析查询的过程相应地区都会建立区域的DNS子系统,子系统上是上一层系统,直至根服务器(全球共有13台根服务器指的就是这个,10台在美国,2台在欧洲,小日本有一台,中国没有)。当我们查询baidu时就会先到本地区的DNS服务器上查询有没有这个记录,如果有怎返回结果,并解析到相应的主机上实现访问。如果没有则向上一层的服务器请求查询,有则返回给查询的服务器在返回给客户端,否则继续向上查询直至跟服务器(请相信如果跟服务器都没有那是不可能的,这就是你注册了域名后还需要进行相应的域名解析才能通过域名访问)。当然高一级的服务器是不会返回具体的结果的,比如你访问baidu.com根服务器不会直接返回结果,而是会交给.com服务器来处理,。。。。这就是递归,就像编程里的递归函数似的。接下来是迭代查询(其实我不是很清楚这个查询会在什么时候用到),迭代就是遍历,当客户端访问一个域名时会想区域内所有的DNS服务器发出查询请求。上个图吧。
说完了查询过程,接下来说下域名解析的常用类别(还有其他的):
其实关于域名解析的定义,google或百度会更好,我写主要是看看自己表达的时候会不会发现什么不懂的地方好进行学习。最最主要的是看到DNS劫持想把它搞明白,接下来一篇文章会用Wireshark来搞一下数据包说明一下DNS数据包的格式之类的,并通过kali linux下的一些工具来获取相应域名的DNS信息,最后再说说DNS的劫持原理和防御,有可能实现一下一台DNS服务器配置(毕竟现在手上有两台机子),并实现下劫持(这算是进入kali linux做的计算机网络知识的准备吧)。
写的真心不好,有很多不好的地方欢迎大家指正!!!期待下一篇关于DNS数据包详细解析吧。