微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DNS查询过程

提示文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言`

DNS是什么呢?
DNS,域名系统,是一项互联网服务,是一个将域名和IP地址映射起来的分布式数据库,能够使人们更方便地访问互联网。DNS是运行在UDP协议之上的,因此使用UPD端口53.


一、为什么DNS运行在UDP之上?

这与UPD协议的特点是密不可分的。

及时传输数据

采用UDP协议,只需要将应用数据传递给UDP,然后UDP就会将数据打包称为UDP报文进行传输。而如果采用TCP协议的话,由于TCP协议会进行流量控制、拥塞控制、报文确认等操作从而保证可靠的交付,会造成一定的时间延时,而实时应用通常不希望有过多的延时,并且能够忍受一定的数据丢失,因此UDP协议更适合

无需建立连接

TCP在开始数据传输之前要经过三次握手。UDP却不需要任何准备即可进行数据传输。因此UDP不会引入建立连接的时延。这可能是 DNS运行在 UDP之上而不是运行在TCP之上的主要原因(如果运行在TCP上,则 DNS会慢得多)。。

分组首部开销小

每个TCP报文段都有20字节的首部开销,而 UDP仅有8字节的开销。
注意:DNS并不是仅仅使用UDP,TCP协议也会使用的。

DNS 为什么需要同时使用 UDP 和 TCP呢?

这实际上跟与这个问题息息相关:
TCP是面向字节流的,而UDP是面向报文的。
我们知道,TCP 具有序列号机制,发送方会把一个大的 HTTP 报文按序号分割成若干报文段并加上 TCP 首部,也就是封装成 TCP 报文段。那么接收方在收到这些 TCP 报文段后,就会按照序号以原来的顺序重组 HTTP 报文。这就是面向字节流的 TCP。

而所谓 UDP 面向报文,发送方的 UDP 对应用层交付下来的 HTTP 报文, 在添加 UDP 首部后也就是封装成 UDP 报文,就向下交付给网络层 IP 协议。不做任何的拆分与合并,主要就是因为 UDP 没有像 TCP 一样的序列号机制来标识报文,所以认只有一个 UDP 报文。

但是,UDP 这么做就会导致一个问题。

1、互联网上物理链路的最小传输单元 = 576 字节,为了在物理链路上顺利传输,UDP 报文不能超过 576 字节,为此,UDP 报文被限制在 512 字节以内。

2、 DNS 由于大面积使用了 UDP,这样一旦 DNS 报文超过 512 字节,基于 UDP 的 DNS 报文就只有抛弃多出来的 64 字节,截短为 512 字节,那么用户得到的 DNS 报文就是不完整的。

如何解决这个问题呢?

没错,最简单的方式就是使用 TCP。尽管速度可能相之 UDP 较慢,但对于得到完整的 DNS 报文,速度慢一点也可以忍受。

注意:以太网帧在局域网中的MTU是1500byte,但是在非局域网环境,如:internet下的时候,MTU是各个路由器进行一个配置的。所以,通常路由器认的MTU为576字节。所以,为了适应网络环境,DNS协议在返回的数据报大于512的时候,就转化为了TCP协议。

那么,DNS分别在什么情况下使用 UDP 和 TCP呢?

1、若客户端事先知道 DNS 响应报文的长度会大于 512 字节,则应当直接使用 TCP 建立连接
2、若客户端事先不知道 DNS 响应报文的长度,一般会先使用 UDP 协议发送 DNS 查询报文,若 DNS 服务器发现 DNS 响应报文的长度大于 512 字节,则多出来的部分会被 UDP 抛弃(截断 Truncation),那么服务器会把这个部分被抛弃的 DNS 报文首部中的 TC 标志位置为 1,以通知客户端该 DNS 报文已经被截断。客户端收到之后会重新发起一次 TCP 请求,从而使得它将来能够从 DNS 服务器收到完整的响应报文。
当然了,在域名解析的时候,一般返回的 DNS 响应报文都不会超过 512 字节,用 UDP 传输即可。事实上,很多 DNS 服务器进行配置的时候,也仅支持 UDP 查询包。
3、DNS 不仅存在域名解析的过程,还有区域传输的过程,而在进行区域传输的时候 DNS 会强制使用 TCP 协议。
设置域名服务器时,服务器管理员可以选择将域名服务器指定为主服务器还是辅助服务器(也称为从服务器)。
主域名服务器负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。主服务器直接从本地文件获取此信息。只能在主服务器上更改区域的 DNS 记录,然后主服务器才能更新辅助服务器。
当主域名服务器出现故障、关闭负载过重时,辅助域名服务器作为主域名服务器的备份提供域名解析服务。辅助域名服务器中的区域文件中的数据是从主域名服务器中复制过来的,无法自行修改
其实就是主从的概念,各位应该也都比较熟悉了。主域名服务器用来写,辅助域名服务器用来读,提供负载均衡的能力,缓解主域名服务器的压力。
那么所谓区域传输(zone transfer)呢,就是辅助域名服务器与主域名服务器通信,并同步数据信息的过程。
辅域名服务器会定时向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传输。区域传输使用 TCP 而不是 UDP,因为数据同步传送的数据量比一个 DNS 请求和响应报文的数据量要多得多。
文章开头提到的既然 UDP 更快,为什么 HTTP 不使用 UDP 呢?这个问题的答案也大抵如此。

由于互联网的不安全性,我们需要数字证书并携带数字签名来保证数据的安全性,为此,整个 HTTP 报文的大小已经远远超过 512 字节,无法使用 UDP 传输。

二、DNS的查询过程

首先,会将DNS请求发送到本地DNS服务器中,本地DNS服务器会查找本地是否存在该域名的缓存,如果存在,则使用本地缓存,若不在,那么接下来将进行三个过程的查询
www.baidu.com 这个域名为例:
1、本地DNS服务器发送请求,根域名服务器中查找顶级域名服务器的NS记录和 A记录 (根域名服务器返回负责顶级域名服务器.com的IP地址列表)
2、本地DNS服务器发送请求,从顶级域名服务器中查找权限域名服务器的NS记录和A记录(顶级域名服务器返回负责权限域名服务器.baidu的IP地址列表)
3、本地DNS服务器发送请求,从权限域名服务器中查找对应主机名的IP地址列表,然后将解析得到的结果缓存以便备查,并将其返回给浏览器。

三、DNS中的一些记录

DNS 服务器中以资源记录的形式存储信息,每一个 DNS 响应报文一般包含多条资源记录。一条资源记录的具体的格式为 (Name,Value,Type,TTL)
TTL:资源记录的生存时间,它定义了资源记录能够其他的DNS服务器缓存多长时间。
Type:记录的资源类型不同。
(1)若Type = A ,那么Name = 主机,而Value = 主机对应的IP地址,A记录提供了标准的主机名到IP地址的映射。
(2)若Type = NS,则Name = 域名,而Value = 负责该域名的DNS服务器的主机名,NS记录记录了解析域名的域名服务器信息,主要用于链式查询时,返回下一级需要查询DNS服务器信息。
(3)若Type = CNAME, 则Name = 别名,而Value = 该主机的规范主机名,CNAME记录用于向查询的主机返回一个主机名对应的规范主机名,从而告诉查询主机去查询这个主机名的 IP 地址。主机别名主要是为了通过给一些复杂的主机名提供一个便于记忆的简单的别名。
(4)若Type = MX,则Name = 一个邮件服务器的别名,而Value = 该邮件服务器的规范主机名,其作用和CNAME记录是一样的,都是为了解决规范主机名不利于记忆的缺点,返回规范的主机名。
其他的还有TXT记录,一般是为了给某个主机或者域名设置的说明。

四、DNS查询中的递归查询和迭代查询

1、递归查询指的是查询请求发出后,域名服务器代为向下一级域名服务器发出请求,最后向用户返回查询的最终结果。使用递归查询用户只需要发出一次查询请求。

2、迭代查询指的是查询请求后,域名服务器返回单次查询的结果。下一级的查询用户自己请求。使用迭代查询用户需要发出
多次的查询请求。

主机向本地域名服务器的查询一般都是采用递归查询。因为我们只需要发出一次请求,然后本地 DNS 服务器返回给我们最终的请求结果。(如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。)
本地域名服务器向根域名服务器的查询的迭代查询。因为每一次域名服务器只返回单次查询的结果,下一级的查询由本地 DNS 服务器自己进行。

五、DNS实现负载均衡

DNS 可以用于在冗余的服务器上实现负载平衡。因为现在一般的大型网站使用多台服务器提供服务,因此一个域名可能会对应多个服务器地址。当用户发起网站域名的 DNS 请求的时候,DNS 服务器返回这个域名所对应的服务器 IP 地址的集合,但在每个回答中,会循环这些 IP 地址的顺序,用户一般会选择排在前面的地址发送请求。以此将用户的请求均衡的分配到各个不同的服务器上,这样来实现负载均衡。

原文地址:https://www.jb51.cc/wenti/3280559.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐