DNS提供的服务简单来说就是查询
域名对应的IP
各种DNS服务器
- 根DNS:13个根"服务器",大部分在老美家。你可能会问:全球的服务13台服务器就解决了?岂不是比双十一淘宝厉害好几个档次。实际上,这里应该说是13个服务器群,每一个根服务器是一个冗余的服务器网络,只不过对外表现是一个服务器。阿里还是很厉害的。
- 顶级DNS服务器:顶级的意思是顶级域名,比如教育的edu,非盈利组织的org,国内的cn,hk等等,每个顶级服务器(群),负责对应后缀的请求。并且他们记录了自己旗下的权威DNS。
- 权威DNS:一个干实际事情的DNS服务器,顶级DNS只是分配任务,权威DNS像字典一样提供查询功能。
- 本地DNS服务器:学校或者单位一般都有自己的DNS服务器,这些服务器缓存了大量IP地址和域名,来提高相应速度。
- hosts文件:这只是操作系统中的一个文件,缓存域名和ip地址的关系。Linux和windows以及mac都有这个文件。
- 浏览器缓存:浏览器会缓存访问过的域名和IP地址,来提供速度,毕竟他们之间的映射关系很稳定。
举个例子
说了一堆,来举个例子吧!
我们在浏览器中敲www.baidu.com
会发生啥呢?
有下面两种查询方式:
递归查询
- 浏览器查询缓存,是否有百度的ip,如果有结束
- hosts文件中是否有百度的ip地址,如果有结束
- 如果本地DNS有百度的ip地址,如果有,本地DNS将其返回给请求主机,然后结束
- 根服务器根据
com
后缀,将请求转发给顶级域名服务器 - 顶级域名服务器查询自己的权威DNS服务器
- 权威DNS域名服务器查询到百度的IP,将结果返回给顶级,顶级返回给根,根返回给本地,本地返回给请求主机,结束。
迭代查询
- 浏览器查询缓存,是否有百度的ip,如果有结束
- hosts文件中是否有百度的ip地址,如果有结束
- 如果本地DNS有百度的ip地址,如果有,本地DNS将其返回给请求主机,然后结束
(前三步不变) - 根服务器根据
com
后缀,将顶级服务器IP告诉给本地服务器 - 本地服务器访问顶级DNS,顶级DNS将权威DNS返回给本地
- 本地服务器访问权威DNS,权威DNS将百度IP返回给本地
- 本地将百度IP返回给请求主机
补充
DNS是基于UDP的服务