很多网站管理人员大概都了解域名解析的原理和过程,但是对于一些细节问题可能不太清楚,比如当客户端对域名发起请求时,具体的解析顺序是什么样的?下面中科三方针对这个问题做下简单介绍。
1.DNS的作用
在互联网中,其实没有类似于www.example.con这样的域名方式,计算机识别的是纯数字的IP地址,如222.222.222.222,比如我们知道一个网站的IP地址,直接输入访问绝对是能打开的。
但现在网站成千上万,如果我们只能通过IP地址访问,这得需要我们花很大力气去记住这些繁琐和相似的数字,所以域名就作为一种更简便的寻址方式出现了。
那为什么会有DNS呢?因为域名是给人使用的,计算机只能识别IP地址,所以需要DNS作为桥梁将域名翻译成IP地址。这样就能保证我们通过域名也能到达对应的服务器地址了。
我们平时工作时会发现,有时候会出现能够登陆qq、微信,但是却打不开网页的情况,其中大部分原因都是DNS服务器故障造成的。因为网站需要通过DNS服务器查询解析结果,用户根据这个结果才能通过域名去访问,但是qq、微信等聊天软件,采用的是UDP传输协议,即不可靠传输协议,无需DNS服务器地址,也能登陆,所以才会出现上面的情况。
DNS解析过程
当客户端对域名发起访问时,会将解析请求发送给递归解析服务器,递归服务器会代替客户端进行全球递归查询。
首先递归服务器会请求根域名服务器,根域名服务器根据域名后缀,告知对应的顶级域名服务器;递归服务器再向顶级服务器发起请求,顶级域名服务器告知对应的权威服务器;递归服务器向权威服务器发起请求,权威服务器告知解析结果;递归服务器将结果告知客户端,客户端完成访问。
DNS缓存
以上是DNS解析的标准流程,但是由于各种DNS缓存的存在,导致DNS解析环节更为复杂。
所谓DNS缓存是指DNS返回正确的IP地址之后,系统会将这个结果临时储存起来,并为缓存设定一个失效时间(TTL值),在TTL失效前,当再次访问这个网站,系统就会直接从DNS 缓存中将结果返回,而不必再次委托递归服务器进行全球解析查询,加快了DNS解析的流程。
当然TTL值失效后,系统还会自动再次询问DNS服务器以获取最新的解析结果。
DNS缓存分类
(1)浏览器DNS缓存:浏览器会根据一定频率缓存DNS记录;
(2)本地DNS缓存:如果浏览器缓存中找不到解析记录,就会去询问操作系统中的缓存;
(3)本地HOSTS文件:HOSTS是记录域名与IP地址一一映射关系的本地文件,windows系统中位于C:WindowsSystem32driversetc;
(4)路由器DNS缓存:我们常用的路由器也带有自动缓存功能,路由器DNS被篡改会造成域名劫持,将访问网址定位到另外一个服务器;
(5)递归服务器缓存:递归服务器在将解析结果告知客户端的同时,将记录缓存下来,当下次请求同一个域名时,直接会将记录返回,而无需再进行全球查询。
DNS解析顺序
DNS解析顺序是“先查缓存,再递归解析”,查询顺序为:浏览器缓存—系统缓存—路由器缓存—递归服务器缓存—递归查询。
我们以www.example.com这个域名为例进行查询,具体流程如下:
(1)搜索浏览器自带的DNS缓存
当收到访问请求后,浏览器首先会查询浏览器自身的DNS缓存,这个缓存时间比较短(chrome:/.NET-internals/#dns 这里可以查询缓存的dns记录),且只能容纳 1000条缓存,如果缓存中有对应条目,返回结果,解析到此结束。
(2)查询操作系统缓存和hosts本地文件
如果浏览器缓存中没有找到对应条目(ipconfig /displaydns可以查看),操作系统也会有一个域名解析的过程,浏览器会先搜索操作系统的DNS缓存中是否有这个域名解析记录,如果有返回结果,解析结束。
此外,电脑本地文件HOSTS中可以设定域名到IP地址的指向关系。如果HOSTS文件中保存有该域名的记录,浏览器会首先使用这个IP地址,并将其结果缓存下来,缓存时间同样受域名失效时间和缓存空间大小决定。
(3)查询路由器缓存
如果浏览器和操作系统中没有域名解析记录,就会查询路由器中的DNS缓存,如果路由器DNS缓存中有解析条目,直接返回结果,解析结束。
(4)递归解析服务器缓存
如果本机和路由器DNS缓存中没有该域名的解析记录,浏览器就会向递归服务器发起请求,如果递归服务器缓存有该域名解析条目,返回结果,解析结束。
(5)查询根域名服务器
如果递归服务器缓存中没有结果,就会委托递归服务器发起全球查询,首先递归服务器会向根域名服务器发起解析请求。根域名服务器告知.com顶级域名服务器地址。
(6)查询顶级域名服务器
递归服务器向.com顶级域名服务器发起DNS请求,.com顶级服务器告知example.com所属权威域名服务器地址。
(7)查询权威域名服务器
递归服务器向example.com的权威域名服务器地址发起请求,权威服务器告知www.example.com所对应的IP地址。
(8)返回解析结果
得到www.example.com的IP地址后,递归服务器将结果告知客户端,客户端对该IP地址发起访问。整个DNS解析流程到此结束。