1.什么是DNS域名解析
- 我们首先要了解域名和IP地址的区别。IP地址是互联网上计算机唯一的逻辑地址,通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和分别。
- 但由于IP地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机的IP地址,这样对于我们日常工作生活访问不同网站是很困难的。基于这种背景,人们在IP地址的基础上又发展出了一种更易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比IP地址更易被识别和记忆,逐渐代替IP地址成为互联网用户进行访问互联的主要入口。这种符号化标识就是域名。
- 域名虽然更易被用户所接受和使用,但计算机只能识别纯数字构成的IP地址,不能直接读取域名。因此要想达到访问效果,就需要将域名翻译成IP地址。而DNS域名解析承担的就是这种翻译效果。例如:把 www.baidu.com 这个域名翻译成对应 IP 220.181.38.251
2.DNS域名解析过程
- 当我们在浏览器地址栏中输入www.baidu.com时,DNS解析将会有将近10个步骤,这个过程大体大体由一张图可以表示:
2.1 域名解析流程
整个过程大体描述如下,其中前两个步骤是在本地电脑内完成的,后8个步骤涉及到真正的域名解析服务器:
- 浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果缓存中有,这个解析过程就结束。
- 如果浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。其实操作系统也有一个域名解析的过程,在windows中可以通过配置C:\Windows\System32\drivers\etc\hosts文件来设置,用户可以将任何域名解析到任何能够访问的IP地址。
- 前两个过程无法解析时,就要用到我们网络配置中的"DNS服务器地址"了。客户端通过浏览器访问域名为 www.baidu.com (http://www.baidu.com) 的网站,发起查询该域名的IP地址的DNS请求。该请求发送到了本地DNS服务器上。本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。每个完整的内网通常都会配置本地DNS服务器(例如你是通过学校连接互联网的一般是你学校的DNS服务器,如果你是在小区连接互联网的一般是网络提供商比如电信,联通的DNS服务器,DNS服务器通常不会太远)大约80%的域名解析到这里就完成了。
- 本地 DNS 服务器向根服务器发送 DNS 请求,请求域名为 www.baidu.com (http://www.baidu.com) 的 IP 地址。
- 根服务器经过查询,没有记录该域名及IP地址的对应关系。但是会告诉本地DNS服务器,可以到顶级域名服务器上继续查询,并给出顶级域名服务器的地址。如.com、.cn、.org等,全球只有13台
- 本地 DNS 服务器向 顶级DNS服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
- 顶级DNS服务器收到请求后,不会直接返回域名和 IP 地址的对应关系,而是告诉本地DNS 服务器,该域名可以在 baidu.com 域名服务器(Name Server服务器)上进行解析获取 IP 地址,并告诉 baidu.com 域名服务器的地址。
- 本地 DNS 服务器向 baidu.com 域名服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。
- baidu.com 服务器收到请求后,在自己的缓存表中发现了该域名和 IP 地址的对应映射关系表,并将 IP 地址返回给本地 DNS 服务器。
- 本地 DNS 服务器将获取到与域名对应的 IP 地址返回给客户端,并且将域名和 IP 地址的对应关系保存在缓存中,以备下次别的用户查询时使用。
2.2 nslookup命令模拟DNS域名解析
- 小伙伴可以通过输入以下指令来更好的理解DNS解析域名的过程
- 首先通过 win+r 打开 运行窗口 输入cmd
- 第一步:在命令行中输入 nslookup, 返回默认的DNS服务器和IP地址
第二步:输入 set type=ns 此处的ns代表服务器名称name server
- 然后输入 . 点代表查询根服务器
- 非权威的结果一般来说是缓存的结果,而不是控管的相应服务器返回的结果。
- 第三步:输入server 192.33.4.12 和该根服务器域名建立通信(此处有可以会出现DNS request time out),大家可以尝试切换其他节点的服务,如d.root-servers.net.
第四步:输入 set type=ns
- 输入com. 向根域名服务器咨询,com. 域名服务器的地址
- 此处响应为权威响应,因为是我们现在接入的根服务器域名对我们的真实响应。顶部是服务器的域名,底部是域名对应的IPV4和IPV6地址。其中,gtld为通用顶级域(英语:Generic top-level domain),属于顶级域名里最常见的一种。于是我们可以直接和任意一个ip地址进行通信
- 第五步:输入server 192.55.83.30 和m对应的gtld进行通信,显示出如下通信信息
第六步:输入 set type=a
- 输入 baidu.com. 向顶级域名服务器咨询baidu.com域名服务器地址
- 第七步:输入server 220.181.33.31 和权威域名服务器对话
第八步:输入 set type=ns
- 输入 www.baidu.com. 向权威域名服务器咨询www.baidu.com域名服务器地址
- Canonical Name指的就是CNAME记录,也就是别名解析,可以将指定的域名解析到其他域名上,而其他域名就是指定域名的别名,整个解析过程称为别名解析。
- 第九步:输入 www.a.shifen.com 这里返回的ip地址就是我们最终解析到的ip