DNS原理

#DNS的作用
Q:DNS用来干啥?
A:DNS是Domain Name System 的缩写,简单一句话,就是把域名转换为IP
#术语概况
这里先介绍几个DNS里的术语,看不懂没关系,先略过,有个大致印象即可,后续文字会详细说明。
RR:Resource Record,资源记录,DNS服务器上都会保存有很多种类的资源记录(可以理解为一个数据库),比如:A记录、CNAME记录、NS记录等等。
A记录:address,IPv4地址记录,就是域名和IPv4的对应关系的记录。见下图。
AAAA记录:IPv6地址记录。
CNAME记录:规范名称,将一个名称映射为另一个(也叫:别名)。见下图。
NS记录:Name Server,名称服务器,提供区域授权名称服务器的名称。见下图。
dig输出
DNS缓存:DNS服务器一般都会有缓存,缓存用来存储曾今请求过的域名和IP的对应关系的记录,每条缓存记录都会TTL时间(即:过期时间)。当还在TTL时间内,收到同一个域名解析请求,就会直接通过缓存找到对应的IP记录返回给客户端;当超过TTL时间,收到同一个域名解析请求,那么就会向下一级的DNS服务器发送解析请求。具体的请求过程见下文。
这里写图片描述
DNS劫持
权威DNS:如果一个DNS服务器在自己的配置文件中直接写明(配置)了域名与IP的对应关系并被授权管理该域名时,那么这个DNS服务器就是该域名的权威DNS服务器。或者简单的讲,给你一个域名,如果你能在某个DNS服务器上直接找到该域名的A记录,而不是其他记录(比如CNAME到其他DNS上),那么这个DNS服务器就是该域名的权威DNS服务器。
本地DNS:就是我们在网卡配置里面设置的DNS服务器。比如:对于windows来说,如下图。
这里写图片描述
这里我们可以自己手动输入“本地DNS”,也可以“自动获取DNS”,这是DHCP的内容,有兴趣可以去了解下DHCP,这里不展开描述了。
公有DNS:有一些公有的DNS服务器,解析速度挺快的,可以用来设置为本地DNS,比如:比较出名的114DNS,地址为:114.114.114.114;google的DNS,地址为8.8.8.8等等。更多公有DNS服务器查询可以点击链接,点击我
#DNS查询过程
DNS的查询过程非常复杂,我们一般用dig工具(linux下)来分析。
下面举例,对news.163.com的DNS解析分析。

dig news.163.com

这里写图片描述
输出一共有六部分,分别是:
这里写图片描述
输出第一部分是:查询参数和一些统计信息。
这里写图片描述
输出第二部分是:查询内容。本例中,查询内容是news.163.com.的A记录。
这里写图片描述
输出第三部分是:DNS服务器的应答。本例中,news.163.com.先把解析权转交给web.163.com.lxdns.com.(通过CNAME机制转交域名的解析权),然后web.163.com.lxdns.com.把解析权再转交给163.xdwscache.ourglb0.com.,最后,163.xdwscache.ourglb0.com.再解析出3个A记录IP,通过这3个IP就可以访问news.163.com.了。图中的5是TTL时间,缓存时间,即5秒内不用重新向上查询。备注:上面这个CNAME到lxdns.com和ourglb0.com,这是网宿的CDN加速节点,说明网易有使用网宿的CDN加速服务,具体CDN的介绍可以看我之后的博文或者自己上网了解下
这里写图片描述
输出的第四部分是:授权信息。本例中是ourglb0.com的NS记录,即Name Server地址。也就是说是哪些服务器管理ourglb0.com的DNS记录(具体地说是DNS的A记录)。比如,上图中解析出5个NS记录,那么向任何一个NS记录节点查询,都可以获得ourglb0.com的IP地址。
这里写图片描述
输出的第五部分是:附加信息。本例中,就是NS记录中5个授权服务器的A记录,即IP。
这里写图片描述
输出的第六部分是:DNS服务器的一些传输信息。本例中,显示的信息有:本地的DNS服务器是192.168.47.2,端口是53(53是默认的DNS端口);回应的长度是354字节。

如果不想看这么多内容,可以使用+short参数。

dig news.163.com +short

这里写图片描述
dig也可以通过不同的DNS服务器来查询域名,使用@DNS地址,比如:通过114.114.114.114这个公有DNS服务器来查询news.163.com

dig @114.114.114.114 news.163.com

这里写图片描述
看输出的查询信息中,设置的本地DNS就不同(@114.114.114.114就相当于设置了本地DNS服务器);解析出的IP地址也不同,但是没关系,因为这是分布在网宿CDN各个边缘节点的IP,通过不同的DNS解析出的CDN边缘节点的IP自然是不会相同,但是这些IP都是可以访问到news.163.com的,这里面涉及CDN的知识,这里不展开讲,看我的其他博文。
##ping题外话
这里讲个题外话,就是ping,如果设置的DNS不同,ping出的IP地址也是不相同的。比如:我现在用的是114.114.114.114这个DNS,如下图设置:
这里写图片描述
ping的结果为:
这里写图片描述
IP:157.255.68.116
如果我是自动获取的本地DNS,如下图:
这里写图片描述
ping的结果为:
这里写图片描述
IP:117.27.241.90
这是2个不同的网宿加速节点,IP自然不同,但是都可以访问news.163.com
#DNS分级查询
DNS分析查询流程
step1:客户机提出域名解析请求,并将该请求发送给本地DNS服务器;
step2:当本地DNS服务器收到请求后,就先查询本地的缓存,如果有该记录项,则本地DNS服务器就直接把查询的结果返回;
step3:如果本地DNS服务器的缓存中没有该记录,则本地DNS服务器就直接把请求发给根DNS服务器,然后根DNS服务器再返回给本地DNS服务器一个所查询域(根的子域,即:顶级DNS服务器) 的地址。
step4:本地服务器再向上一步返回的DNS服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该记录,则返回相关的下级的域名服务器的地址。
step5:重复第四步,直到找到正确的纪录。
step6:本地DNS服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
这里写图片描述
这里写图片描述

对于第一次查询的域名,都会走返回根域名服务器递归迭代查询的过程,而非第一次查询的域名,有可能就是从某个DNS服务器的缓存中直接返回了,而不会再走递归迭代的过程,这取决于DNS服务器上缓存记录的TTL时间
可以用dig +trace来分析分级查询。

dig news.163.com +trace

这里写图片描述
上面命令的第一段:
列出根域名.的所有NS记录,即所有根域名服务器。
这里写图片描述
根据内置的根域名服务器IP地址,本地DNS服务器向所有这些IP地址发出查询请求,询问news.163.com.的顶级域名服务器com.的NS记录。最先回复的根域名服务器将被缓存,以后只向这台服务器发请求。

接着是第二段:
这里写图片描述
上面结果显示.com域名的13条NS记录,同时返回的还有每一条记录对应的IP地址。

然后,DNS服务器向这些顶级域名服务器发出查询请求,询问news.163.com的次级域名163.com的NS记录。
这里写图片描述
上面结果显示163.com有7条NS记录,同时返回的还有每一条NS记录对应的IP地址。

然后,DNS服务器向上面这7台NS服务器查询news.163.com的主机名。
这里写图片描述
上面结果显示,news.163.com有1条CNAME记录,即授权被转移到web.163.com.lxdns.com.上。并且还显示,最先返回结果的NS记录的DNS服务器IP地址为220.181.36.234。结合上个图知道,这个IP地址是ns3.nease.net
##dig题外话
dig命令可以单独查看每一级域名的各种记录

dig ns com  //查看com域名的ns记录
dig ns 163.com //查看163.com域名的ns记录
dig a com //查看com域名的a记录
dig a 163.com //查看163.com域名的a记录

dig +short可以简化结果

dig ns com +short
dig a 163.com +short

dig -x ip 反向解析,即IP>>>域名,查询PTR记录。
这里写图片描述

#参考链接

  1. http://www.ruanyifeng.com/blog/2016/06/dns.html
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值