Skip to main content

应用层-DNS

问题产生背景

因特网上的主机需要一个身份标识,一种标识方法是使用主机名进行标识,比如域名:www.bjfu.edu.com。但是对于网络中的设备来说(比如路由器),解析这些名字是困难的。所以可以用IP地址来标识主机。比如:202.204.121.124,从这个信息中我们可以得到主机在因特网中的位置信息。 为了协调好域名和IP的关系,我们就需要一个网络服务器来解析域名,并将IP地址和域名进行绑定,这就是DNS服务器,中文为域名解析服务器。英文全称为Domain Name System。

DNS提供的服务

DNS由两部分组成。
一、由分层的DNS服务器实现的分布式数据库
二、一个使主机能够查询分布式数据库的应用层协议

DNS服务器的特点是:
1.运行BIND软件的UNIX机器。
2.DNS跑在UDP之上,使用53号端口

🔔 服务二、主机别名

有些主机拥有多个别名,假设tsinghua.edu.cn还拥有qinghua.com这个别名,那么DNS就可以将每一个别名都对应到一个IP地址上或者规范名称上。

🔔 服务三、邮件服务器别名

如主机别名为yahoo. com更好记,但其主机名的规范服务器主机名可能更为复杂,DNS可以对主机别名进行解析从而得到规范主机名。

🔔 服务四、负载分配

DNS可以负责负载分配,比如baidu.com这个站点非常繁忙,它背冗余分布在多台服务器上,具有多个IP地址,如当客户对映射到某地址集合的名字发出一个DNS请求时,该服务器用IP地址的整个集合进行响应,但在每次回答中循环这些地址次序。因为客户通常总是向IP地址排在最前面的服务器发送HTTP请求报文,所以DNS就在所有这些冗余的web服务器之间循环分配了负载。
简单理解就是,DNS让每个服务器都能均衡地工作。

域名服务器分类

image.png
为了有效管理整个互联网的DNS域名解析工作,DNS系统开发者设计了一个与分层dns域名结构类似的层次化的dns名称服务器结构。把所有dns名称服务器自高到低分为4个级别根名称服务器、顶级名称服务器、权威名称服务器和本地域名服务器

1、根服务器。
根名称服务器是由互联网管理机构配置建立的,是最高层次的名称服务器,负责对互联网所有顶级名称服务器进行管理,有全部顶级名称服务器的IP地址和域名映射。 全球共有13套,每套都只有一个主根名称服务器。其中10台在美国,2台在欧洲,一台在日本。根名称服务器并不直接用于名称解析,因为其没有保存全部互联网域名记录,只是负责顶级名称服务器相关内容。

2.顶级名称服务器。
顶级名称服务器是各顶级域名自己的名称服务器,负责他们各自管理的二级域名解析。比如.com、.cn、.edu、.net、.org等,每个顶级域名都有一个顶级名称服务器

3.权威名称服务器。
权威名称服务器是针对dns区域提供名称解析服务而专门配置、建立的名称服务器,可为用户提供最权威的dns域名解析。每个域名在互联网上都可以找到一台权威服务器,一台权威服务器可以为很多域名提供域名解析

4.本地域名服务器。
一般是指ISP提供的名称服务器(也就是本地DNS服务器),例如我们使用的114.114.114.114,Google的8.8.8.8,这些都可以是。

DNS查询过程

没有一台DNS服务器拥有因特网上所有主机的映射,这些映射分布在所有的DNS服务器上。DNS查询方式有迭代查询和递归查询两种。

⚠ 递归查询 Recursive Query

一般发生在 Client 请求 DNS Server。Client 发出一个域名解析的请求,DNS Server 必须返回对应的 IP 地址,或者返回"找不到"的报错。

⚠ 迭代查询 Iterative Query

迭代查询一般发生在 DNS Server 之间,当 Client 发出域名解析的请求后,DNS Server 需要给予最佳答案,这个最佳答案可能是"距离最近"的顶级域名服务器,也能是权威域名服务器。无论如何,Client 需要对返回结果再次发起请求,知道获得最终结果。

image.png

🌳 实例

小明在 Laptop 的浏览器输入了 example.com,在没有任何缓存的情况下,laptop 作为 Client 向 Router(路由器) 发出 DNS 递归查询请求,要求 Router 必须返回这个域名的 IP。Router 在什么都不知道的情况下,继续向 ISP(如,中国电信) 发起对 example.com 的递归查询,ISP 的 DNS server 在收到请求后,会依次对 Root Name Server(根域名服务器.com),TLD Name Server(顶级域名服务器example.com),Authoritative Name Server(权威域名服务器) 等发起迭代查询,最终返回我们要的结果。

区别就是迭代查询是通过一个一个的域名服务器来查询,而递归查询是通过一个域名服务器来查询,然后再通过这个域名服务器来查询,直到找到结果。
迭代查询root、TLD、Authoritative Name Server都是查到后就立刻返回local DNS Server,而递归查询则是逐级往上查询,待查到之后再层层返回,参考下面的课本配图。

Details
DNS查询-参考文章地址 [来自稀土掘金](https://juejin.cn/post/6844903900982558734),大佬写得太好了
Details
课本图示 *迭代查询:**递归查询:*
Details
详解图示

DNS缓存

DNS查询的过程耗时非常长,但由于DNS缓存的存在,通常使得查询路径比理论中的短。因为在一个请求链中,当某DNS服务器接受一个DNS回答时,它能将映射缓存在本地存储器中,当下次有另一个对相同主机名的查询到达该DNS服务器时,该DNS服务器就能够提供所需要的IP地址,即使它不是该主机名的权威服务器。 图示见上面。

DNS报文

image.png
上图中显示了 DNS 的报文格式。其中,事务 ID、标志、问题计数、回答资源记录数、权威名称服务器计数、附加资源记录数这 6 个字段是DNS的报文首部共 12 个字节
整个 DNS 格式主要分为 3 部分内容,即基础结构部分、问题部分、资源记录部分

DNS报文格式详解