浏览器之DNS解析过程详解

3,594 阅读6分钟

本文档已更新于 【前端橘子君】 【Github】

域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。

简单的说,域名解析就是将域名转换为IP地址的过程。因为想要访问一台服务器,最终是靠IP地址访问的,而不是靠域名访问的,他们的之间的映射关系保存在本地缓存和网络上的各种域名解析服务器中,如浏览器缓存,系统缓存,域名商的域名解析服务器,.....,那么他们的查询顺序和查询方式就是本文的内容。

域名结构

就以mail.baidu.com域名为例,域名最后一个.的右侧部分我们称之为顶级域名,倒数第二个.右侧部分称之为二级域名,以此类推,就会有三级域名,四级域名等等。

mail.baidu.com的域名中,com成为顶级域名,baidu.com称为二级域名,mail.baidu.com称为三级域名。

域名由两个或两个以上的词组成,常见域名为二级域名+顶级域名组成,所以一般我们会将域名分为顶级域名、二级域名,除此之外,还有国家代码顶级域名。

顶级域名服务器

顶级域名为域名最后一个.号右侧部分的单词,如mail.baidu.comcom就是顶级域名,顶级域名对应的服务器我们称之为顶级域名服务器,除此之外,常见的顶级域名还有.NET.TOP.ORG等,他们都有各自的用途。

  • .COM:用于商业机构,没有使用限制,所有人都可以注册
  • .NET:最开始用于网络组织,如服务商和维修商,现在没有使用限制,所有人都可以注册
  • .TOP:用于行业内的顶级企业或个人,所有人都可以注册
  • .ORG:用于各种组织,如非盈利组织、教育组织等,现在所有人都可以注册

国家代码顶级域名

常见的顶级域名除上述的之外,还有.CN.UA.JP等,这些是由两个字母组成的,是各个国家专用的顶级域名,如.CN是中国专用的顶级域名,.JP是日本专用的顶级域名。

二级域名服务器

域名中倒数第二个.的右侧部分称之为二级域名,如mail.baidu.com中的baidu.com就是二级域名,二级域名没有固定的单词,可以由各种字母和数组组成,如51cto.com,和顶级域名服务器类似,与二级域名对应的称为二级域名服务器,以此类推,还有三级域名服务器,四级域名服务器,....

根域名服务器

在2016年之前全球一共拥有13台根服务器,1台主根服务器在美国,其他12台为辅根服务器,其中美国9台,英国1台,瑞典1台,日本1台,这13台根服务器主要管理互联网的主目录,主要作用IPV4。

2016年,中国下一代互联网工程中心领衔发起雪人计划,旨在为下一代互联网(IPV6)提供更多的根服务器解决方案,该计划于2017年完成,其中包含3台主根服务器,中国1台,美国1台,日本1台,22台辅根服务器,中国3台,美国2台,印度和法国分别有3台,德国2台,俄罗斯、意大利、西班牙、奥地利、智利、南非、澳大利亚、瑞士、荷兰各1台,共22台,从此形成了13台原有根加25台IPV6根服务器的新格局。

01

本地域名服务器

本地域名服务器的范围非常广,没有一个详细的定位,可能是某个运营商部署在该城市的一台服务器,也可能是某个公司的一台服务器,甚至可能是某个学校的某一台服务器,不必深究概念,只要知道有这样一台服务器就行。

存放地址

介绍完了域名的组成和域名服务器的分类,我们就来看看域名和IP地址的对应关系都会存放在哪些地方:

  • 浏览器缓存
  • 系统缓存
  • 本地域名服务器
  • 根域名解析服务器
  • 顶级域名服务器
  • 二级域名服务器
  • 三级域名服务器
  • ......

查询顺序

现在我们来看看怎么去根据域名查询一台服务器的IP地址。

如果某个用户正在用浏览器mail.baidu.com的网址,当你敲下回车键的一瞬间:

  • 1、检查浏览器缓存中是否存在该域名与IP地址的映射关系,如果有则解析结束,没有则继续
  • 2、到系统本地查找映射关系,一般在hosts文件中,如果有则解析结束,否则继续
  • 3、到本地域名服务器去查询,有则结束,否则继续
  • 4、本地域名服务器查询根域名服务器,该过程并不会返回映射关系,只会告诉你去下级服务器(顶级域名服务器)查询
  • 5、本地域名服务器查询顶级域名服务器(即com服务器),同样不会返回映射关系,只会引导你去二级域名服务器查询
  • 6、本地域名服务器查询二级域名服务器(即baidu.com服务器),引导去三级域名服务器查询
  • 7、本地域名服务器查询三级域名服务器(即mail.baidu.com服务器),此时已经是最后一级了,如果有则返回映射关系,则本地域名服务器加入自身的映射表中,方便下次查询或其他用户查找,同时返回给该用户的计算机,没有找到则网页报错
  • 8、如果还有下级服务器,则依此方法进行查询,直至返回映射关系或报错

像该过程中的第1、2、3点,仅限于在本地域名服务器中查找,如果有则直接返回映射关系,否则就去其他DNS服务器中查询,这种查询方式我们叫做递归查询

第3、4、5、6、7、8过程,他们只会给出下级DNS服务器的地址,并不会直接返回映射关系,这种查询方式叫做迭代查询

总结

最后引用大神的一张图做总结吧:

02


更多相关文档,请见:

线上地址 【前端橘子君】

GitHub仓库【前端橘子君】