九月 8, 2015 · DNS

DNS解析过程

早一段时间发布的一篇博文“你用对“404”了吗?”中提到一个网站是怎样才能被访问的,当中关于DNS解析部分讲的比较笼统,正好前段时间看到一张图比较清晰的解释了DNS请求过程就厚颜借来一用。

DNS是什么
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53。

概括
简单来说,一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问OS缓存,最后再访问DNS服务器(一般是ISP提供),然后DNS服务器会迭代式的查找域名记录,然后返回。

第一部分:本地DNS查询
现代浏览器都带有DNS记录缓存功能以提高解析速度,已Chrome浏览器为例打开chrome://net-internals/#dns即可显示出当前DNS记录缓存,以及“Clear Host Cache”按钮用以清除浏览器DNS记录缓存。每条DNS记录都有一个过期时间(Expires),当记录被标记为“Expired”才表示浏览器DNS缓存已经被清除。

经本人反复测试(Chrome版本 45.0.2454.85 m),chrome://net-internals/#dns缓存列表中的记录过期时间和值仅供参考,使用“Clear Host Cache”按钮并不能刷新浏览器DNS记录,只能等待约80S后让浏览器DNS记录自动过期

当浏览器DNS缓存记录中并无匹配记录时,将查找OS缓存中的DNS缓存记录。
ipconfig /displaydns //使用命令来查看当前OS中的DNS缓存记录
ipconfig /flushdns //使用命令来清空OS中的DNS缓存记录
MaxCacheEntryTtlLimit //设置OS中的DNS缓存存活时间

浏览器和OS的缓存中均未命中时,DNS请求将发往网络,主机设置了DNS代理(常见现象就是DNS地址设置为路由器内部IP)时路由器将会查询自身是否有匹配之DNS记录。

第二部分:DNS服务器查询
当在本地DNS缓存中未查询到结果后只能发往DNS服务器请求查询。在这一查询过程中按时间轴分两个阶段(两种查询)。

递归查询:主机发送查询请求到已配置的首选DNS服务器,当DNS服务器接收到查询时,首先检查它本地区域信息中是否有匹配之记录,如果区域信息中没有查询的名称,则服务器检查它先前查询的本地缓存。
迭代查询:通过上面的DNS查询依然没有找到想你的域名对应的IP地址,那么DNS服务器就要请求其他DNS服务器进行查询,这是一个反复询问的过程。

客户端发往DNS服务器是属于递归查询,服务器必需回答目标IP与域名的映射关系。而迭代查询是,服务器收到一次迭代查询回复一次结果,这个结果不一定是目标IP与域名的映射关系,也可以是其它DNS服务器的地址。

DNS-REQUEST

关联阅读:你用对“404”了吗?