DNS域名解析流程剖析(详解版)
域名系统(Domain Name System,DNS)是将域名转化为 IP 地址的网络协议。
当用户在浏览器中输入域名后,浏览器会向 DNS 服务器发送 DNS 请求,获取指定域名的 IP 地址。DNS 服务器收到请求包后,会发送响应包,返回对应的 IP 地址。浏览器根据响应包中的 IP 地址,访问对应的网站
域名解析就是将域名转化为对应的 IP 地址,该工作由 DNS 服务器完成。本节将讲解域名解析的整个。
常见的资源记录类型如表所示。
上述这些操作都是浏览器自动完成的。在请求 IP 地址过程中,可能会返回多个对应的 IP 地址,或者可以通过多个域名服务器进行解析。这些信息用户都不可能知晓。
为了了解这些信息,可以使用 netwox 工具中编号为 102 的模块,实施 DNS 查询请求,并得到对应的信息。
【实例】已知一个 DNS 查询服务器的 IP 地址为 192.168.59.2,通过该 DNS 服务器查询域名 baidu.com 的 IP 地址信息。执行命令如下:
为了方便介绍,下面将信息拆分分别讲解。
1) 发送的DNS请求信息如下:
2) 返回的 DNS 响应信息,如下:
下面信息为报文信息,含义如下:
从下面的输出信息可以看出,域名 baidu.com 有两个对应的 IP 地址 123.125.115.110 和 220.181.57.216;该域名有 5 个权威名称服务器,如 ns2.baidu.com,其对应的 IP 地址为 61.135.165.235。
3) 为了验证成功进行了 DNS 查询请求,并得到了对应的 IP 地址信息,可以通过抓包查看,如图所示。
图中第 4 个数据包为实施域名请求的 DNS 查询数据包,源地址为 192.168.59.133,是当前主机的真实 IP 地址。第 5 个数据包为对应的响应包。
上图中分 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 地址的对应关系保存在缓存中,以备下次别的用户查询时使用。
为了能够获取运行 BIND 软件的 DNS 服务器的版本,netwox 提供了编号为 103 的模块来实现。
【实例】已知拥有 BIND 软件的 DNS 服务器的 IP 地址为 162.248.241.94,获取该服务器的版本信息。执行命令如下:
当用户在浏览器中输入域名后,浏览器会向 DNS 服务器发送 DNS 请求,获取指定域名的 IP 地址。DNS 服务器收到请求包后,会发送响应包,返回对应的 IP 地址。浏览器根据响应包中的 IP 地址,访问对应的网站
域名解析就是将域名转化为对应的 IP 地址,该工作由 DNS 服务器完成。本节将讲解域名解析的整个。
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 地址 |
实施 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 地址。
2) 返回的 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。
3) 为了验证成功进行了 DNS 查询请求,并得到了对应的 IP 地址信息,可以通过抓包查看,如图所示。
域名解析流程
域名解析就是查询域名对应的IP地址,域名解析流程如图所示。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 地址的对应关系保存在缓存中,以备下次别的用户查询时使用。
获取运行 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。所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算