很多次面试都问到了DNS解析的问题,回答的不是很好,今天专门总结一下
参考了文章如果美国把根域名服务器封了,中国会从网络上消失吗?文章来源于微月人话 ,作者卫sir
百度百科的解释
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
说人话就是把域名映射为IP的一个系统。
2.1 本地域名服务器LDNS
每个电脑里面都设置了本地DNS服务器(简称LDNS),需要的时候,就向LDNS发出请求,LDNS在网上问权威域名服务器(简称权威DNS)得到答案。
2.2 权威域名服务器
问我一个域名,我告诉你IP,如果我不知道,我告诉你谁可能知道,你再去问它。
负责对请求作出权威的回答。权威DNS中存储着记录,最常见的3种:A记录(记录某域名和其IP的对应),NS记录(记录某域名和负责解析该域的权威DNS),CNAME记录(负责记录某域名及其别名)。权威能直接回答的,就回A记录;需要其他权威DNS回答的,就回NS记录,然后LDNS再去找其他权威DNS问;如果该记录是别名类型的,就回CNAME,LDNS就会再去解析别名。
2.3 根域名服务器—根DNS
当LDNS啥都不知道的时候(也即没有任何缓存),就去问根DNS,根能告诉LDNS下一步该问谁。
2.3.1 全世界有多少根DNS?
13个,其中10个在美国,英国和瑞典各1个,日本1个。
有被问到中国大陆有没有根DNS。回答亚洲有一台。
2.3.2 根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)是辅根。
3.1 域名的级别
- .代表根域名,
- .com这种是顶级域名,也叫一级域名,
- baidu.com这种叫二级域名,
- www.baidu.com这种叫三级域名,
- 依次类推
3.2 具体过程
- 权威DNS:权威能直接回答的,就回ip;需要其他权威DNS回答的,就回NS记录(记录某域名和负责解析该域的权威DNS),然后LDNS再去找其他权威DNS问;如果该记录是别名类型的,就回CNAME(负责记录某域名及其别名),LDNS就会再去解析别名。
- 递归DNS:通常就是LDNS,它接受终端的域名查询请求,负责在网上问一圈后,将答案返回终端。
现在举一个具体的例子:比如终端请求www.baidu.com这个域名的IP。
在没有缓存时,LDNS会从根DNS问起:
1、LDNS问根DNS说:“www.baidu.com的IP是多少啊?”。
2、根DNS说:“我哪有时间管你这么细的问题,你去问com顶级域的DNS吧,我只管到顶级域,喏,这些是com顶级域DNS的名字和IP,你去问它们吧”。(以NS记录回应)
3、LDNS又忙问com的权威DNS,com权威DNS说:“你问的这是三级域名,我不管这么多,你去问baidu.com的权威DNS吧,它的名字是ns.baidu.com,他的IP是XXX(这里可能给出多个权威DNS)”。
4、LDNS继续问baidu.com的权威DNS,这次痛快,因为www.baidu.com正是它管的,它可能直接给出A记录,也可能给出CNAME记录,如果是前者,就直接得到IP,如果是后者,就需要对别名再做查询。
5、最终,LDNS得到www.baidu.com的IP,并将其返回给终端。
引用一张图片
注意:13个根域名服务器的IP通常是预先配置在LDNS里面的。在LDNS初始化DNS缓存或者缓存失效的时候,LDNS向自己被预先配置的这些IP中的一个,发起对根的查询(也即询问.的NS记录),获得最新的根DNS的信息。
考虑各个层面都有缓存,具体的请求解析过程会如下
举个例子,比如用户在浏览器中输入这个域名:123.abc.qq.com.cn
1、浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去hosts文件看,也没有,才会去问LDNS。
2、LDNS会去先看看自己有没有123.abc.qq.com.cn的A记录,要有就直接返回,要没有,就去看有没有abc.qq.com.cn的NS记录,如果有,就去问它要答案,如果没有,就去看有无qq.com.cn的NS的记录,如果有,就去问它,没有就去看有无com.cn的DNS,还没有就去看有无cn的DNS,如果连cn的NS记录都没有,才去问根。
只有在各处都没有缓存的时候,我们才会问根。
转载请注明来自石家庄天鲲化工设备有限公司 ,本文标题:《一文彻底搞定DNS面试题》
还没有评论,来说两句吧...