在学习DNS域名解析之前,我们先要弄懂几个前提概念。
现在我们明白了DNS协议是在哪一层,有哪些层间依赖,下面我们来粗略了解一下IP地址概念。
IP地址是互联网上每一台计算机唯一的逻辑地址,通过IP地址我们可以实现不同计算机之间的互相通信,每台联网计算机都需要通过IP地址来互相联系和分别。
但是由于IP地址是由一串容易混淆的数字串构成(例如192.168.45.128),人们很难记忆所有计算机的IP地址,这样对于我们日常工作生活访问不同网站是很困难的。
基于这种背景,人们在IP地址的基础上又发展出了一种更容易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比IP地址更容易被识别和记忆,逐渐代替IP地址成为互联网用户进行访问互联的主要入口。这种符号化标识就是域名。(例如www.baidu.com)
域名虽然更容易被用户所接受和使用,但是计算机只能识别纯数字构成的IP地址,不能直接读取域名。因此想要达到访问效果,就需要将域名翻译成IP地址。
DNS协议承担了这个翻译责任,这个翻译过程,叫做DNS域名解析。
当我们在浏览器中输入www.bilibili.com时,DNS解析将会有10个步骤,具体的步骤过程如下
首先,浏览器会检查自己的缓存中是否有目标域名对应的IP地址,如果有,解析过程结束,直接使用缓存中的IP地址访问目标网站。
浏览器缓存域名是有限制的,不仅浏览器缓存的大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长或太短都不好,如果时间太长,一旦域名被解析到的IP有变化,会导致被客户端缓存的域名无法解析到变化后的IP地址,以致该域名不能正常解析,这段时间有内有一部分用户无法访问网站;如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名。
如果浏览器中没有缓存,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。
前两个过程无法解析的时候,就要用到我们网络配置中的”DNS服务器地址“了。
操作系统会把这个域名发送给这个本地DNS服务器。
大约百分之八十的域名解析到此就结束了,后续的DNS迭代和递归也是由本地DNS服务器负责。
本地DNS服务器把解析的结果返回给本地电脑,本地电脑根据TTL值缓存在本地系统缓存中。
域名解析过程结束在实际的DNS解析过程中,可能不止这么多,如Name Server可能有很多级,或者有一个GTM来负载均衡控制,这都有可能影响域名解析过程。
从请求主机到本地DNS服务器的查询是递归的,其余的查询是迭代的。