【1.8.6.1】DNS域名解析流程

一、域名

域名(Domain Name)是用来表示 Internet 上某个计算机或计算机组的名称,用于在数据传输时标识计算机的地理位置。

1.1 域名的作用

在 TCP/IP 网络中,计算机要进行通信首先需要从 DHCP 服务器上获取 IP 地址,然后基于 IP 地址进行通信。

由于 IP 地址是由一串数字序列组成,所以难以记忆。并且,计算机的 IP 地址往往不是固定的,是经常变化的。因此,直接使用 IP 地址进行通信有很多不便之处。

为了避免这些不便,可以为每台计算机赋予唯一的名称,即域名。计算机之间可以使用域名进行通信。

1.2 域名的结构

一个完整的域名由 2 个或 2 个以上的部分组成,各部分之间用英文的句号.来分隔,每个部分的长度限制是 63 个字符,域名总长度则不能超过 253 个字符。

1.3 域名的分类

域名系统采用层次结构按地理域或机构域进行分层,用小数点将各个层次隔开,从右到左依次为最高域名段、次高域名段等,最左的一个字段为主域名(主机名)。所以,域名可以按照级别和类型进行分类。

域名级别

由于域名是使用.进行分隔的,所以通过.对域名进行级别分类。最后一个.的右边部分称为顶级域名(TLD,也称为一级域名),左边部分称为二级域名(SLD);二级域名的左边部分称为三级域名。

以此类推,每一级的域名控制它下一级域名的分配。例如,163.com 是一级域名,而 house.163.com 是二级域名。

域名类型

由于域名是用来标识唯一的名称,因此可以通过类型进行分类。常见的域名及对应关系如下。

  • 国际域名:.com、.top、.net、.org、.cc 和 .tv 等。
  • 国家/地区域名:cn(中国大陆)、de(德国)、jp(日本)、hk(中国香港)、tw(中国台湾)、uk(英国)和 us(美国)等。
  • 机构域名:gov(政府部门)、mil(军事部门)、com(商业性的机构或公司)等。

二、DNS域名解析流程

域名系统(Domain Name System,DNS)是将域名转化为 IP 地址的网络协议。

当用户在浏览器中输入域名后,浏览器会向 DNS 服务器发送 DNS 请求,获取指定域名的 IP 地址。DNS 服务器收到请求包后,会发送响应包,返回对应的 IP 地址。浏览器根据响应包中的 IP 地址,访问对应的网站

域名解析就是将域名转化为对应的 IP 地址,该工作由 DNS 服务器完成。本节将讲解域名解析的整个。

2.1 DNS 资源记录

在 DNS 服务器上,一个域名及其下级域名组成一个区域。相关的 DNS 信息构成一个数据库文件。所以每个区域数据库文件都是由资源记录构成的,一个资源记录就是一行文本,提供了一组有用的 DNS 配置信息。

常见的资源记录类型如表所示。

类型 编码 内容
A 1 将 DNS 域名映射到 IPv4 地址,基本作用是说明一个域名对应了哪些 IPv4 地址
NS 2 权威名称服务器记录,用于说明这个区域有哪些 DNS 服务器负责解析
CNAME 5 别名记录,主机别名对应的规范名称
SOA 6 起始授权机构记录,NS 记录说明了有多台服务器在进行解析,但哪一个才是主服务器,NS 并没有说明,SOA 记录了说明在众多 NS 记录里哪一台才是主要的服务器
PTR 12 IP 地址反向解析,是 A 记录的逆向记录,作用是把 IP 地址解析为域名
MX 15 邮件交换记录,指定负责接收和发送到域中的电子邮件的主机
TXT 16 文本资源记录,用来为某个主机名或域名设置的说明
AAAA 28 将 DNS 域名映射到 IPv6 地址,基本作用是说明一个域名对应了哪些 IPv6 地址

2.2 实施 DNS 查询请求

用户通过浏览器访问网站,一般情况下在浏览器中输入网站的域名,浏览器向 DNS 服务器发送 DNS 请求,请求域名对应的 IP 地址。DNS 服务器查询到 IP 地址以后,将 IP 地址返回给浏览器,浏览器通过该 IP 地址访问网站。

上述这些操作都是浏览器自动完成的。在请求 IP 地址过程中,可能会返回多个对应的 IP 地址,或者可以通过多个域名服务器进行解析。这些信息用户都不可能知晓。

为了了解这些信息,可以使用 netwox 工具中编号为 102 的模块,实施 DNS 查询请求,并得到对应的信息。

【实例】已知一个 DNS 查询服务器的 IP 地址为 192.168.59.2,通过该 DNS 服务器查询域名 baidu.com 的 IP 地址信息。执行命令如下:

root@daxueba:~# netwox 102 -i 192.168.59.2 -n baidu.com -y a

其中,-y 选项用来指定 DNS 资源类型,这里要根据域名查询 IP 地址,指定资源类型为 a。执行命令后,将会发送 DNS 请求。若 DNS 服务器存在,将会返回对应的 DNS 响应信息,显示查询的 IP 地址。

为了方便介绍,下面将信息拆分分别讲解。

  1. 发送的DNS请求信息如下:

    DNS_question______________________________________________________. | id=49550 rcode=OK opcode=QUERY | | aa=0 tr=0 rd=0 ra=0 quest=1 answer=0 auth=0 add=0 | | baidu.com. A | |_____________________________________________________________ |

以上输出信息中的第 1 行表示,该部分的信息是 DNS 请求信息。在最后一行中,baidu.com 表示进行查询的域名;A 表示 DNS 查询所使用的类型域,获取域名对应的 IPv4 地址。

  1. 返回的 DNS 响应信息,如下:

    DNS_answer____________________________________________________. | id=49550 rcode=OK opcode=QUERY | | aa=0 tr=0 rd=1 ra=1 quest=1 answer=2 auth=5 add=5 | | baidu.com. A | | baidu.com. A 5 123.125.115.110 | #域名及对应的IP地址 | baidu.com. A 5 220.181.57.216 | #域名及对应的IP地址 | baidu.com. NS 5 ns2.baidu.com. | #解析域名的权威名称服务器 | baidu.com. NS 5 ns7.baidu.com. | #解析域名的权威名称服务器 | baidu.com. NS 5 ns3.baidu.com. | #解析域名的权威名称服务器 | baidu.com. NS 5 dns.baidu.com. | #解析域名的权威名称服务器 | baidu.com. NS 5 ns4.baidu.com. | #解析域名的权威名称服务器 | dns.baidu.com. A 5 202.108.22.220 | #权威名称服务器的IP地址 | ns2.baidu.com. A 5 61.135.165.235 | #权威名称服务器的IP地址 | ns3.baidu.com. A 5 220.181.37.10 | #权威名称服务器的IP地址 | ns4.baidu.com. A 5 220.181.38.10 | #权威名称服务器的IP地址 | ns7.baidu.com. A 5 180.76.76.92 | #权威名称服务器的IP地址 |_____________________________________________ |

以上输出信息中的第 1 行表示,该部分的信息是 DNS 响应信息。

下面信息为报文信息,含义如下:

  • rd=1:表示期待递归。
  • ra=1:表示服务器支持递归查询。
  • quest=1:表示当前有一个请求。
  • answer=2:表示查询的域名对应的 IP 地址有两个结果。
  • auth=5:表示查询到有 5 个权威名称,服务器可以解析该域名。
  • add=5:表示权威名称,服务器对应的 IP 地址信息。

从下面的输出信息可以看出,域名 baidu.com 有两个对应的 IP 地址 123.125.115.110 和 220.181.57.216;该域名有 5 个权威名称服务器,如 ns2.baidu.com,其对应的 IP 地址为 61.135.165.235。

  1. 为了验证成功进行了 DNS 查询请求,并得到了对应的 IP 地址信息,可以通过抓包查看,如图所示。

图中第 4 个数据包为实施域名请求的 DNS 查询数据包,源地址为 192.168.59.133,是当前主机的真实 IP 地址。第 5 个数据包为对应的响应包。

2.3 域名解析流程

域名解析就是查询域名对应的IP地址,域名解析流程如图所示。

上图中分 8 个步骤介绍了域名解析的流程,每个步骤如下:

  1. 客户端通过浏览器访问域名为 www.baidu.com (http://www.baidu.com) 的网站,发起查询该域名的 IP 地址的 DNS 请求。该请求发送到了本地 DNS 服务器上。本地 DNS 服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地 DNS 服务器还要向 DNS 根服务器进行查询。

  2. 本地 DNS 服务器向根服务器发送 DNS 请求,请求域名为 www.baidu.com (http://www.baidu.com) 的 IP 地址。

  3. 根服务器经过查询,没有记录该域名及 IP 地址的对应关系。但是会告诉本地 DNS 服务器,可以到域名服务器上继续查询,并给出域名服务器的地址(.com 服务器)。

  4. 本地 DNS 服务器向 .com 服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。

  5. .com 服务器收到请求后,不会直接返回域名和 IP 地址的对应关系,而是告诉本地 DNS 服务器,该域名可以在 baidu.com 域名服务器上进行解析获取 IP 地址,并告诉 baidu.com 域名服务器的地址。

  6. 本地 DNS 服务器向 baidu.com 域名服务器发送 DNS 请求,请求域名 www.baidu.com (http://www.baidu.com) 的 IP 地址。

  7. baidu.com 服务器收到请求后,在自己的缓存表中发现了该域名和 IP 地址的对应关系,并将IP地址返回给本地 DNS 服务器。

  8. 本地 DNS 服务器将获取到与域名对应的 IP 地址返回给客户端,并且将域名和 IP 地址的对应关系保存在缓存中,以备下次别的用户查询时使用。

2.4 获取运行 BIND 的 DNS 服务器版本

BIND 是一种开源的 DNS(Domain Name System)服务器软件,包含对域名的查询和响应所需的所有功能。它是互联网上使用最广泛的一种 DNS 服务器。

为了能够获取运行 BIND 软件的 DNS 服务器的版本,netwox 提供了编号为 103 的模块来实现。

【实例】已知拥有 BIND 软件的 DNS 服务器的 IP 地址为 162.248.241.94,获取该服务器的版本信息。执行命令如下:

root@daxueba:~# netwox 162.248.241.94

输出信息如下:

9.10.3-P4-Debian

上述输出信息表示 DNS 服务器的版本为 9.10.3-P4-Debian。

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn