DNS介绍
DNS是什么?
DNS就是将域名转换成IP的,因为数字化的IP很难被记住,而且电脑通信都需要用到IP,所以有了域名(比较语义化的),例如www.baidu.com,www.taobao.com,通过DNS将这些域名转换成电脑需要的IP
DNS怎么运作的?
每个电脑里面都设置了本地DNS服务器(简称LDNS),需要的时候,就向LDNS发出请求,LDNS在网上问权威域名服务器(简称权威DNS),有时候问一个是不够的,需要问一大圈多个下来,才能得到答案。
权威DNS是什么?
问我一个域名,我告诉你IP,如果我不知道,我告诉你谁可能知道,你再去问它
什么是根域名服务器(简称根DNS)?
当LDNS什么也不知道的时候(即没有任何缓存),就去问根DNS,根能告诉LDNS下一步问谁
根DNS的名字和IP都是什么
在网址:https://www.internic.net/domain/named.root
打开可以看到里面有13个根的名字和IP,其名字从A.root-servers.net到M.root-servers.net。
A开头简称A根也叫主根,其他12个(B、C、D、E、F、G、H、I、J、K、L、M)是辅根。
DNS到底是怎么工作的(重要)
域名的级别
.代表根域名,.com这种是顶级域名,也叫一级域名,baidu.com这种叫二级域名,www.baidu.com这种叫三级域名,依次类推
最常见的两种域名服务器
1.权威DNS:负责对请求做出权威的回答。权威DNS中存储着记录,最常见的3种:
A记录(记录某域名和其IP的对应)
NS记录(记录某域名和负责解析该域的权威DNS)
CNAME记录(负责记录某域名及其别名)
权威能直接回答的,就回A记录;需要其他权威DNS回答的,就回NS记录,然后LDNS再去找其他权威DNS问;如果该记录是别名类型的。就回CNAME,LDNS就会再去解析别名
2.递归DNS:通常就是LDNS,它接受终端的域名查询请求,负责在网上问一圈后,将答案返回终端。
举一个具体的例子:比如终端请求www.baidu.con这个域名的IP。
在没有缓存时,LDNS会从根DNS问起:
- LDNS问根DNS说:“www.baidu.com的IP是多少”
- 根DNS说:“我没有时间管这么细的问题,你去问com顶级域的DNS,我只管到顶级域,这些是com顶级域DNS的名字和IP,你去问它们吧”。(以NS记录回应)
- LDNS又忙去问com的权威DNS,com权威DNS说:“你问的这是三级域名,我不管这么多,去问baidu.com的权威DNS,它叫ns.baidu.com,他的IP是XXX(这里可能给出多个权威DNS)”。
- LDNS继续问baidu.com的权威DNS,这次很成功,因为www.baidu.com就是它管的,它可能直接给出A记录,也可能给出CNAME记录,如果是前者,就会直接得到IP,如果是后者,就需要对别名再做查询
- 最终,LDNS得到www.baidu.的IP,将其返回给终端
在第1步中,LDNS问根DNS的时候,他是怎么知道根DNS的?
这13个IP通常是预先配置在LDNS里面的。在LDNS初始化DNS缓存或者缓存失效的时候,LDNS向自己被预先配置的这些IP中的一个,发起对根的查询(即询问.的NS记录),获取最新的根DNS的信息
对于DNS服务器软件而言,这13个IP,配置在根提示文件(root hints file)中,可能是named.cache或root.ca或root.hints等等之类的文件
上面是各种教科书中都会讲到的DNS查询过程,但实际上没有这么麻烦,因为各个层面都是有缓存的。
实际上DNS查询的过程,是这样的:
举个例子,比如用户在浏览器中输入这个域名:123.abc.qq.com.cn
1、浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去host文件看,也没有,才会去问LDNS。
2、LDNS会去先看看自己有没有123.abc.qq.com.cn的A记录,要有就直接返回,没有就去看有没有abc.qq.com.cn的NS记录,如果有,就去问它要答案,如果没有就去看看有无qq.com.cn的NS的记录,再没有看看有无.com.cn的NS,还没有就去看cn的NS,如果连cn的NS都没有,就去问根
所有有了缓存之后,从跟问起的情况实际上很少发生,只有在各处都没有缓存的时候才会发生
根镜像起什么作用
根镜像承担起和跟一样的功能。
根DNS中,最重要的文件就是根区文件(Root Zone file),所有顶级域名记录都存在根区文件中。
辅根从主根同步数据,根镜像从根同步数据。最终,所有根和镜像都有着同样的根区文件。而且有意思的是,根镜像和根有着相同的IP,全球有一千多个根镜像,但是它们是一起共享13个IP的,因为只有13个根
这是因为DNS跟服务器上使用了任播技术
任播是指在IP网络上通过一个IP地址标识一组提供特定服务的主机,服务访问方并不关心提供服务具体是哪一台主机提供,访问该地址的报文可以被IP网络路由到“最近的一个”(最好也只是一个,别送到多个)服务器上。这里“最近”可以是指路由器跳数、服务器负载、服务器吞吐量、客户和服务器之间的往返时间(RTT,round trip time)、链路的可用宽带等特征值。
多个)服务器上。这里“最近”可以是指路由器跳数、服务器负载、服务器吞吐量、客户和服务器之间的往返时间(RTT,round trip time)、链路的可用宽带等特征值。
这样一方面用户可以就近访问;另一方面。即使是部分跟出现故障也没事。