DNS解析
Client
--> 本地hosts文件
--> Client DNS Service Local Cache
--> DNS Server recursion (递归)
--> DNS Server Cache
--> DNS iteration (迭代)
--> 根域
--> 顶级域名DNS
--> 二级域名DNS...
常规流程简述
- 客户端首先查找本机
/etc/hosts
文件,若无匹配进入下一步 - 客户端向本地DNS服务器(
nameserver
)发起查询请求,若无匹配的缓存则进入下一步(递归) - 本地DNS服务器中保存了根域DNS服务器的信息,消息转发给根域DNS服务器(开始迭代)
- 根域查询不到,但根据域名结构可以判断这个域名属于
com 域
(例),因此根域DNS服务器会返回它所管理的com域
中的DNS服务器的 IP地址 - 本地DNS服务器又会向
com 域
的DNS服务器发送查询消息,获得下级域信息 - 同理再向下一级DNS服务器转发,若无匹配,获得下级域信息再次发起查询
- 以此类推,就可以顺藤摸瓜找到目标 DNS服务器
迭代与递归
递归查询
- 一般客户机和本地DNS服务器之间属于递归查询
- 当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果之后转交给客户机
- 此查询的源和目标保持不变,为了查询结果客户端只需要发起一次查询
迭代查询
- 一般情况下本地的DNS服务器向其它DNS服务器的查询属于迭代查询
- 若对方不能返回权威的结果,则它会(参考前一个DNS服务器返回的结果)向下一个DNS服务器再次发起进行查询,直到返回查询的结果为止
- 此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询
智能DNS之CDN服务
是基于DNS解析方式实现 Global Server Load Balance(全局负载均衡)的一种方式
工作原理
- 用户向浏览器输入
www.a.com
这个域名,首先发送到本地DNS服务,若无缓存,则发送到根域服务器 - 通过根域迭代查询,找到权威DNS服务器,发现解析记录是CNAME,指向了
www.a.tbcdn.com
www.a.tbcdn.com
是CDN网络中的智能DNS负载均衡系统- 智能DNS根据本地
nameserver
的地址就近分配,将对用户响应速度最快的IP节点返回给用户 - 用户向返回的 IP节点发出请求,此节点即为CDN服务服务商提供的服务器
- CDN服务器会通过内部节点专用DNS解析得到此域名的真正IP(源web站点IP)
- 将解析结果返回本地
nameserver
,实现访问
注:第6步中,若所有CDN节点都没有解析记录,也能自动去源网站进行解析再返回,此情况极少