先了解一下域名层级:以百度为例子:www.baidu.com
。依次是com
(顶级域名)、baidu
(一级域名)、www
(二级域名)。但是实质上还有一个唯一的根域名root
:www.baidu.com.root
,但由于root
是唯一的,因此是否写root
根域名不是特别必要。
1.什么是DNS
DNS:Domain Name System
,也即域名系统,主要用于管理和查询域名对应的IP地址。在实际的生活中,在网页上输入某个网址:www.baidu.com
时,浏览器并不是仅通过www.baidu.com
这个域名就能访问到对应的服务器并请求到内容,浏览器需要有对应服务器的ip地址,那如何获取域名对应的IP
地址呢?此时DNS
就在此处起作用了,浏览器通过将域名www.baidu.com
传给域名服务器DNS
,DNS
查找到对应的ip
地址发送给浏览器,浏览器便可以通过ip
地址访问到对应的服务器获取到内容了。
2.DNS工作机制
我们从浏览器输入域名到获取到真正的ip地址出发,查看整套工作流程,从而明白DNS在其中发挥的作用是这样的。
首先在浏览器中输入域名:www.baidu.com
,此时浏览器会先在浏览器自身的DNS缓存中进行查找记录,如果查找到此域名相关的记录,则直接进行访问对应的ip地址。如果查找不到,浏览器则会去本地电脑中去查找hosts
文件,查找此域名的相关记录,如果查找成功则直接访问IP地址,否则浏览器会查询当前电脑设置中设置好的DNS服务器地址,一般电脑连上网络之后DNS服务器地址都是自动设置好了的(也可以手动设置已知的DNS服务器地址),也即默认由设备连接的路由器分配好了,但是自动设置的DNS服务器的IP地址,一般都是管理WiFi的路由器的IP地址。
假设采取自动设置,浏览器在网络设置中获取到的ip地址由于是路由ip,则会发起DNS查询请求到对应的路由器,此时路由器收到DNS查询请求之后,会将请求转发到光猫(光猫只要连接上服务器网络,就会被分配相应的DNS服务器IP),光猫再转发给运营商DNS服务器,一般是Local DNS Server
(DNS服务器,最临近当前浏览器地址),负责域名查询。
此时Local DNS Server
先在自己的服务器进行查询,查看是否有www.baidu.com
域名对应信息,有则返回对应的ip地址给浏览器,否则将查询请求发送给根DNS服务器(Root DNS Server),那Local DNS Server
如何访问到Root DNS Server
的?
由于Root DNS Server
在全球只有13台,所以其信息一般内置在其他DNS服务器中的。而访问哪一台Root DNS Server
呢?DNS服务器会向每一台root DNS Server
发起查询顶级域名请求,哪一台信息先抵达,则使用哪一台回传的信息。
那什么是root DNS server
呢?root DNS Server
中记录了各个顶级域名的DNS服务器的ip地址信息。因此local DNS Server
会先去询问root DNS Server
中关于com
的信息,接着Local DNS server
收到关于com
顶级域名的DNS IP地址,也即Top Level Server
(com顶级域名服务器,记录一级域名的DNS服务器)
此时Local DNS Server
又去访问Top Level Server
,询问其关于baidu.com
的信息,接着Local DNS Server
收到关于负责baidu.com
一级域名的DNS ip地址,也即Name DNS Server
(记录完整的域名,最后查找到ip地址的地方)
最后Local DNS Server
从Name DNS Server
处获取到www.baidu.com
的ip地址,并将其传给了浏览器。
可以看出DNS查询机制主要依赖于域名的分层机构,先从顶级域名com
查询,再查询baidu.com
一级域名,最后是完整的域名www.baidu.com
,而每一层对应着root DNS Server、Top DNS Server、Name DNS Server
DNS服务器,而这些服务器都是记录了管理下一层域名的DNS服务器的ip地址,也即Root DNS Server
记录了管理不同顶级域名的DNS服务器IP地址,比如:com、org、net等这些顶级域名对应的服务器。Top DNS Server
记录了管理不同一级域名的DNS服务器IP地址,比如:该台DNS服务器是负责所有com顶级域名的服务器,里面记录了baidu.com、bing.com
等一系列的管理这些一级域名的DNS服务器的ip地址