DNS它是互联网的核心服务。作为一个可以将域名和IP地址相互映射的分布式数据库,它可以让人们更容易访问互联网
这是系统设计基础知识系列第十章DNS。你可以阅读我以前的文章
域名系统(DNS)是互联网的核心协议之一。了解基本的 DNS 原理有助于我们设计系统。
TCP/IP 基于 IP 地址进行通信,但 IP 地址很难记住。还有另一个标识符——主机名。为计算机配置主机名,并在使用网络通信时使用主机名指导,而不是输入一长串 IP 地址。网络系统通过一个名为hosts的文件实现将主机名转换为IP地址的功能。主机文件是本地文件。优点是搜索响应快。主要用于存储一些本地网络的主机名和IP地址的对应信息。当系统通过主机名访问主机时,会检查本地主机文件,从文件中找到对应的IP地址,然后发送消息。如果在主机文件中找不到相关信息,则主机访问失败。
DNS原理
网络通信基于 TCP/IP
TCP/IP 基于 IP 地址
计算机只能识别网络上的 IP 地址
我们无法记住超过 7 组 IP 地址的网站,所以当我们访问一个网站时,我们在浏览器地址栏中输入主机名即可访问所需的网页。有一个DNS服务器,可以将任何域名翻译成对应的IP地址,并调用该IP地址对应的网页。
域名结构
顶级域包括 com、net、gov、mil 或任何标准国家顶级域。新的顶级域 (TLD) 一直在创建。
资源类型——页面的类型
- 典型的网页是超文本传输协议 (HTTP)
- HTTPS 是安全的 HTTP。
- 其他资源包括文件传输协议 (FTP)、GOPHER、远程登录协议 (Telnet)、简单邮件传输协议 (SMTP) 等
机器名称- 子域
- 大多数网页以 WWW 开头。这不是一个绝对的规则。如果 DNS 设置正确,则大多数网页都不需要 WWW。
顶级域名——一大群相似类型的域名
- 有些仅限于某些机构,如 gov 或 int。
每个级别的域名由字母和数字组成。不区分大小写,长度不能超过63字节,一个完整的域名不能超过255字节。
域名空间
域命名空间结构就像一棵倒置的树。根域名是树的根。根域名的下一层称为顶级域名。是管理范围的划分。最大的域是根域,可以分为顶级域、二级域、三级域、四级域。对应的域名有根域名、顶级域名、二级域名、三级域名等。不同级别的域名以点号分隔,最低级的域名在最远左边,右边是最高级别的域。
顶级域名可以分为3类。
- ccTLD——国家顶级域名采用ISO3166的规定。现在大约有 200 个 ccTLD 正在使用中。
2. gTLD(国际顶级域名) ——国际组织可以注册.int。
有著名的顶级域名。他们是:
.com为公司,
.net代表网络服务机构,
.org指非营利组织,
.edu指教育机构(仅限美国),
.gov表示政府部门(仅限美国),
.mil表示军事部门(仅限美国)。
随着互联网用户的持续增长,又增加了七个gTLD。他们是:
.aero对于航空运输业,
.biz对于公司和企业,
.coop对于合作团体,
.info在各种情况下使用,
.museum对于博物馆,
.name供个人使用,
.pro对于自由职业者。
3.二级域名
注册在国家自行确定的国家顶级域名下。它们分为 2 类:
- 分类域名
- 管理域名
4. 三级域名和四级域名
命名树中任何一个节点的域名都是从这个节点到顶级域名的字符串,用“.”分隔。在域命名空间结构中,其所属域中节点的主机名标识可以相同,但域名必须不同。
域名解析流程
DNS 是一种应用层协议。事实上,它也适用于其他应用层协议,包括但不限于 HTTP、SMTP 和 FTP。它用于将用户提供的主机名解析为 IP 地址。
- 客户端检测到自己的缓存
- 如果不是,请检查主机文件
- 如果不是,则客户端发送 DNS 请求以转换 IP 地址或主机名
- DNS 服务器接收客户端的请求
- 检查 DNS 服务器的缓存,如果找到请求的地址或主机名,将向客户端发送响应消息
- 如果没有找到,将在数据库中搜索。如果找到请求的或主机名,将向客户端发送响应消息
- 如果没有找到,将向根域DNS服务器发送请求
- 根域服务器查找顶级域
- 从顶级域中找到二级域
- 二级域名找到三级
- 直到找到要解析的地址或主机名,才会向 DNS 服务器发送响应消息
- DNS 服务器将响应存储在缓存中,然后将解析结果发送给客户端
- 客户端从 DNS 服务器接收 IP 地址
- 如果未找到客户端,则返回错误消息。
域名解析
它可以分为2种。解析域名时,首先使用静态域名解析。如果静态域名解析不成功,则使用动态域名解析。
- 静态域名解析——通过静态域名解析表进行,手动建立域名与IP地址的对应表。DNS客户端在查找域名对应的IP地址时,会在静态域名解析表中查找指定的域名,从而获得对应的IP地址,提高解析效率。
- 动态域名解析——需要专门的域名服务器来运行域名解析服务器程序,提供域名到IP地址的映射关系,负责接收客户端的域名解析请求。
DNS 代理
它首先查找本地域名解析表。如果没有查询到对应的解析表项,则将DNS请求报文转发给DNS服务器,并在收到DNS服务器的响应报文后返回给DNS客户端。这样,当DNS服务器的地址发生变化时,只需要改变DNS代理上的配置,就不需要对局域网中每个DNS客户端的配置进行一一修改,从而简化了网络管理。
DNS解析器
从应用程序的角度来看,访问网页是通过解析器完成的。在发送 TCP 或 UDP 数据包之前,解析器必须将域名(主机名)转换为 IP 地址。解析器必须至少注册一个域名服务器的 IP 地址。
DNS 服务器
域名解析是根据DNS层次结构的特点自上而下进行的。但是如果每一个域名解析都是从根DNS服务器开始的,那么根DNS服务器可能承载不了海量的流量。实际上,大多数域名解析都是在本地 DNS 服务器中完成的。
通过适当设置本地DNS服务器,本地DNS服务器负责大部分域名解析请求,提高域名解析效率。
DNS 命名空间的层次结构允许不同的名称服务器管理命名空间的不同部分。域名服务器是管理其所在域的主机和软件。它管理的层称为区域。区域是 DNS 命名空间的子树,可以独立于其他区域进行管理。每层都有一个域名服务器。
根 DNS 服务器在检索数据的功能中起着至关重要的作用。顶级 DNS 服务器的 IP 地址注册在根 DNS 服务器中。如果顶级域名发生变化,您还必须在根 DNS 服务器中进行更改。
同理,二级DNS服务器的IP地址注册在顶级DNS服务器中。
主机名和 DNS 服务器都必须分层设置。如果名称服务器出现故障,则主机名的 DNS 查询将无法正常工作。因此,为了提高可用性,必须设置至少 2 个名称服务器。一旦第一个名称服务器无法提供查询结果,它会自动转到第二个甚至第三个名称服务器。
DNS 服务器类型
- 本地 DNS 服务器
- 本地 DNS 服务器更靠近客户端。当客户端发出查询请求时,它会被发送到本地 DNS 服务器。如果本地文件中有对应的主机名信息,则将其转换为IP地址返回给客户端。
- 如果不是,它会查询根 DNS 服务器。根 DNS 服务器收到本地 DNS 服务器的请求后,返回相关主机名的 IP 地址。本地 DNS 服务器从根 DNS 服务器接收结果,然后向相关域名服务器发送查询请求。
2. 根名称服务器
- 用于管理顶级域名。它本身并不解析域名,但它知道相关名称服务器的 IP 地址。全球共有 13 台 IPv4 域名服务器。
- 数字 13 是网络可靠性和性能之间的折衷。它基于大多数网络使用的 IPv4 约束。
- 每个根 DNS 服务器代表的不是一台计算机,而是一个由许多计算机组成的服务器集群。
- 这 13 个 IPv4 根 DNS 服务器可以支持多达 43 亿个 IP 地址。
9 个根 DNS 服务器在美国,2 个在欧洲(英国和瑞典),1 个在亚洲(日本)。
- 所有名称服务器都必须使用根 DNS 服务器的 IP 地址注册,因为当 DNS 搜索基于 IP 地址时。
3. 权威域名服务器
- 互联网上的主机注册在域名服务器上,该域名服务器是主机的域权威域名服务器。
- 主机将有 2 个名称服务器以防止单点故障。
- 授权域名服务器拥有注册主机域名与IP地址的映射信息。查询注册的主机名时,会返回对应主机的IP地址。如果主机名和IP地址有一些变化,可以在授权的域名服务器中进行处理。无需向其他域名服务器申请或报告。
- 主域名服务器——主域名服务器完成一个或多个区域的域名解析。它在区域中有源数据文件(主机名和 IP 地址信息)。
- 二级域名服务器——辅助主域名服务器提供域名查询服务,可有效降低主机多时主域名服务器的流量压力。当主域名服务器出现故障时,从域名服务器可以在数据有效期内继续为主机提供域名解析服务。
- 一个主域名服务器可以有多个二级域名服务器,一个二级域名服务器也可以是其他地区的主域名服务器。二级域名服务器包含区域内主机地址数据的授权信息,可以以区域配置文件副本的形式存储。因此,二级域名服务器可以为其覆盖区域提供服务。
- 二级域名服务器不创建数据文件,它获取区域数据的唯一方式是通过区域传输的方式从一级域名服务器获取最新的区域数据副本。
- 有两种方法可以获取数据的副本。
1. 二级域名服务器定期主动获取一级域名服务器的副本,或更新副本中的数据
2. 一级域名服务器通知二级域名服务器及时更新副本中的数据当区域数据发生变化时。
DNS 传输层协议
DNS 响应消息中有一个删除标志,用截断响应 (TC)表示。当响应报文采用UDP 封装且报文长度大于512字节时,服务器只返回前512字节,并设置TC标志位,表示该报文已被删除。当客户端收到 TC 设置的响应消息后,会使用 TCP 封装查询请求。DNS服务器返回的响应报文长度大于512字节。
UDP 报文最大长度为 512 字节,最多可包含 13 个根域名服务器。因此,IPv4 域名服务器的数量只能限制在 13 台。每台服务器以 A 到 M 的单个字母命名。
当辅助 DNS 名称服务器启动时,将从主 DNS 名称服务器执行区域传输。正常运行时,二级域名服务器也会定期查询主域名服务器,了解主域名服务器的数据是否发生变化。如果有变化,将执行区域转移。传输的数据由 TCP 封装。因此,UDP用于客户端和服务器之间的查询和响应。TCP用于主从服务器之间的传输。
DNS查询方式
- 递归查询——如果DNS服务器不能直接响应请求,它会继续请求其他DNS服务器,直到查询到解析结果。查询的结果可以是主机名的 IP 地址,也可以是主机名无法解析。无论结果如何,DNS 服务器都会将结果返回给客户端。
- 迭代查询——如果DNS服务器找不到对应的记录,它会返回一个可能知道结果的域名服务器IP地址给客户端,客户端会继续向其他域名服务器发送查询请求。
客户端查询IP地址时,对本地域名服务器进行递归查询。如果本地文件有对应的数据,则直接返回对应的数据。如果没有,则本地DNS服务器对根DNS服务器进行迭代查询,直到找到具体的域名服务器,并由域名服务器返回相应的数据。客户端和本地 DNS 服务器将接收到的数据存储在缓存中,以优化每次查询的性能。
DNS 正向查询 & DNS 反向查询
转发查询:客户端知道主机名但不知道 IP 地址
反向查询:客户端知道 IP 地址,但不知道 hsotname
为了实现反向查询/查找,互联网的反向DNS数据库植根于“ in-addr.arpa”级域。反向 DNS 解析 (rDNS)涉及搜索域名注册表和注册商表。为了创建反向命名空间,“ in-addr.arpa”级域中的子域按照 IP 地址的逆序构建。例如,要对 IP 地址进行反向查找,将查找8.8.4.4域名的 PTR 记录8.8.4.4.in-addr.arpa并发现指向dns.google。
DNS的缺点
- 使用 DNS 时会有轻微的延迟,即使它可以通过缓存来缓解
- DNS服务器的维护非常复杂
- DNS服务会受到DDoS攻击,导致用户无法访问网页
由于互联网的扩展,整个域名系统(DNS)变得非常复杂,这导致了DNS系统向多层架构演进。
如果你发现我的任何文章有帮助或有用,麻烦点赞或者转发。 谢谢!