DNS 域名解析流程

dns 解析流程

DNS 基本概述

DNS(Domain Name System)域名系统是一个将ip地址映射称为域名或者将域名映射成为ip地址的一种服务。DNS协议是应用层协议,运行在UDP之上,使用53端口。DNS使用客户 - 服务器模式运行在通信的端系统之间,在通信的端系统之间通过端到端的传输协议来传送DNS报文。

下面通过一个示例来简单描述DNS的解析过程,例如,你在浏览器中输入了 “mail.qq.com”,实际会发生以下操作:

  • 同一台用户主机上运行着 DNS 应用的客户端
  • 浏览器将主机名 “mail.qq.com” 发送给 DNS应用的客户端
  • DNS 客户端向 DNS 服务端发送一个包含主机名的请求
  • DNS 客户端最终会收到一份回答报文,其中包含该目标主机的IP地址
  • 一旦浏览器收到目标主机的IP地址后,它就能够向位于该IP地址80端口的HTTP服务器进程发起一个TCP连接

除了提供IP地址到主机名的转换,DNS还提供了下面几个重要的服务

  • 主机别名(host aliasing),有着复杂的主机名的主机能够拥有一个或者多个其他别名,比如说一台名为 aaabbbcdef.com 的主机,同时会拥有 a.com 和 b.com 两个主机别名,在这种情况下 aaabbbcdef.com 也称为规范主机名,而主机别名比规范主机名更加容易记忆。应用程序可以调用 DNS 来获得主机别名对应的规范主机名以及对应的IP地址。
  • 邮件服务器别名(mail server aliasing),同样的,电子邮件的应用程序也可以调用 DNS 对提供的主机名进行解析。
  • 负载均衡(load distribution),DNS也用于冗余的服务器之间进行负载分配。繁忙的站点例如 cnn.com 被冗余分布在多台服务器上,每台服务器运行在不同的端系统之间,每个都有着不同的IP地址。由于这些冗余的Web服务器,一个IP地址集合因此与同一个规范主机名联系。DNS数据库中存储着这些IP地址的集合。由于客户端每次都会发起 HTTP 请求,所以DNS就会在所有这些冗余的Web服务器之间循环分配了负载。

DNS的域名空间结构

域名系统作为一个层次结构和分布式数据库,包含各种类型的数据,包括主机名和域名。DNS数据库中的名称形成一个分层树状结构称为命名空间

domain-name-layer

了解域名结构

mail.qq.com域名为例,com为顶级域名,qq.com 为二级域名, mail.qq.com为三级域名

顶级域名服务器

顶级域名为最后一个.右侧部分的内容,如mail.qq.comcom就是顶级域名,顶级域名对应的服务器称之为顶级域名服务器

二级域名服务器

域名 mail.qq.com中的倒数第二个.右侧部分qq.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根服务器的新格局

本地域名服务器

本地域名服务器的范围非常广,没有一个详细的定位,可能是某个运营商部署在该城市的一台服务器,也可能是某个公司的一台服务器,甚至可能是某个学校的服务器

  • 根域名

DNS 域名使用中规定由尾部句点 . 来指定名称位于根或者更高层次的域层次结构

  • 顶级域名

用来表示国家、地区或者组织。采用三个字符,如 com 表示商业公司,edu 表示教育机构,net 表示网络公司, gov 表示非军事政府机构等等。

  • 二级域名

表示归属于某个公司或组织的域名

DNS 工作概述

假设运行在用户主机上的某些应用程序(如Web浏览器或邮件阅读器)需要将主机名转换成 IP 地址。这些应用程序将调用 DNS 的客户端,并指明需要被转换的主机名。用户主机上的 DNS 收到后,会使用 UDP 通过 53 端口向网络上发送一个 DNS 查询报文,经过一段时间后,用户主机以上的 DNS 会收到一个主机名对应的DNS回答报文。因此,从用户主机的角度来看,DNS就像是一个黑盒子,其内部的操作你无法看到。但是实际上,实现DNS这个服务的黑盒子非常复杂,它由分布于全球的大量DNS服务器以及定义了DNS服务器与查询主机通信方式的应用层协议组成。

DNS 最早的设计是只有一台 DNS 服务器。这台服务器会包含所有的 DNS 映射。这是一种集中式的设计,这种设计并不适用于当今的互联网,因为互联网有着数量巨大并且持续增长的主机,这种集中式的设计会存在以下几个问题:

  • 单点故障(a single point of failure),如果 DNS 服务器崩溃,那么整个网络随之瘫痪。
  • 通信容量(traffic volume),单个 DNS 服务器不得不处理所有的DNS查询,这种查询级别可能是百万、千万级
  • 远距离集中式数据库(distant centralized databases),单个 DNS 服务器不可能邻近所有的用户,假设在美国的 DNS 服务器不可能邻近让澳大利亚的查询使用,其中查询请求势必会经过低速和拥堵的链路,造成严重的时延。
  • 维护(maintenance),维护成本巨大,而且需要频繁更新。

存放地址

  1. 浏览器缓存
  2. 系统缓存
  3. 本地域名服务器
  4. 根域名服务器
  5. 顶级域名服务器
  6. 二级域名服务器 … …

查询顺序

  1. 检查浏览器缓存中是否存在改域名与IP地址的映射关系,如果有则解析结束,没有则继续
  2. 到系统本地查找映射关系,一般存在 hosts 文件中,如果有则解析结束,否则继续
  3. 本地域名服务器去查询 根域名服务器,该过程不会返回映射关系,只会告诉你去下级服务器(顶级域名服务器)查询
  4. 到本地域名服务器去查询,有则结束,否则继续
  5. 本地域名服务器查询顶级域名服务器(即 com 服务器),同样不会返回映射关系,只会引导你去二级域名服务器查询
  6. 本地域名服务器查询二级域名服务器(即 qq.com 服务器),引导去三级域名服务器
  7. 本地域名服务器查询三级域名服务器(即 mail.qq.com), 此时已经是最后一级,如果有则返回映射关系,并且本地服务器加入自身的映射表中,方便下次查询,同时返回给用户的计算机,没有找到则网页报错
Licensed under CC BY-NC-SA 4.0
皖ICP备20014602号
Built with Hugo
Theme Stack designed by Jimmy