DNS是如何解析的?
什么是DNS?
DNS:Domain Name System,负责将用户请求的域名解析为对应机器的IP地址。众所周知,互联网上的每一台机器的身份是由IP地址标识的,而我们想要与任何一台机器进行通信都必须知道它的IP地址,然而,由于IP地址对人类来说难于记忆,因此就产生了域名。就拿www.baidu.com来说,相信我们对于这个域名都再熟悉不过了,但是如果让你记忆对应的IP地址,这个一定很痛苦。而互联网上的域名数量又极其庞大,将这些记录全都存在用户本地也是不现实的,而且也很难做到实时同步,因此就产生了DNS域名系统。
DNS解析过程
如图所示,当Client想要查找example.com对应的IP地址时,路由器会将这条DNS查询请求转发给ISPs提供的本地域名服务器或者是用户自己指定的公共域名服务器(比如Google public DNS、Dynamic DNS、OpenDNS等等),由于这个域名服务器负责接下来递归地向根域名服务器、一级域名服务器、二级域名服务器进行查询,因此这个域名服务器也被称为递归解析器。
具体来讲
- 当用户想要查询example.com对应的IP地址时,首先检查自己的缓存记录,如果有对应的记录那么就不需要向外进行查询了,如果没有的话就将这条DNS查询请求发往递归解析器。
- 递归解析器收到用户的查询请求,还是先检查自己的缓存,缓存中有的话直接发给用户;缓存中没有的话就根据在配置文件中记录的13个根域名服务器,选择其中一个发送DNS查询。由于根域名服务器是对一级域名服务器进行管理,因此在根域名服务器中会记录.com的网址是由哪个一级域名服务器负责解析的,然后递归解析器就会收到根域名服务器的响应,响应中包含一个一级域名服务器的IP地址。
- 递归解析器再根据这个一级域名服务器IP进行查询,一级域名服务器是负责管理二级域名服务器,因此在一级域名服务器中会记录example.com这个域名是由哪个二级域名服务器进行解析的,然后将对应的IP发给递归解析器。
- 递归解析器再根据这个二级域名服务器IP进行查询,在二级域名服务器中就会记录example.com对应的IP地址,将这个IP地址发给递归解析器。
- 递归解析器收到回答后,再将这个IP地址发给用户,这就是一条大致的DNS解析流程。
实际案例
接下来我们尝试用linux上的dig工具来跟踪以下当我们访问百度首页时发生的DNS解析过程
1.dig工具从递归解析器中抓取到了13个根域名服务器(以及对应的IP,图中未显示)
2. 接下来递归解析器又从其中一个根域名服务器中获取到了对应的一级域名服务器
3.递归解析器接着向其中的一个一级域名服务器发起查询,查到了对应的二级域名服务器
4.然后从其中一个二级域名服务器中查询到了www.baidu.com对应的CNAME记录以及该别名对应的IP地址。
5.最后,递归解析器将该IP地址发给客户端
以上就是DNS解析的大致流程。