【实验目的】
1、理解 DNS 实现的原理;
2、了解 DNS 解析的过程;
3、掌握 DNS 报文格式。
【实验环境】
本实验要求实验室主机能够连接到 Internet,并可浏览网页。
实验拓扑如图
【实验内容】
1、学习 DNS 协议的原理和实现方法;
2、了解 DNS 的工作过程;
3、通过编辑 DNS 请求数据包,了解 DNS 的报文格式;
4、掌握 nslookup 命令和 ipconfig 命令的使用方法。
【实验流程】
【实验原理】
DNS 域名系统是服务器和客户程序相互通信的一种协议。它提供了主机域名和 IP 地址 之间的转换。域名服务器使用固定的端口号 53,支持 UDP 和 TCP 访问。
DNS 协议
DNS 是域名系统(Domain Name System)的缩写,它是一种用于 TCP/IP 应用程序的分 布式数据库,它提供主机名字和 I P 地址之间的转换及有关电子邮件的选路信息。所谓“分 布式”是指在 Internet 上的单个站点不能拥有所有的信息。每个站点(如大学中的系、校 园、公司或公司中的部门)保留它自己的信息数据库,并运行一个服务器程序供 Internet 上的其他系统(客户程序)查询。
在 DNS 命名方式中,采用了分散和分层的机制来实现域名空间的委派授权,以及域名 与地址相转换的授权。通过使用 DNS 的命名方式来为遍布全球的网络设备分配域名,而这 则是由分散在世界各地的服务器实现的。
命名系统是分层次的,域名树是倒置的,它的根级显示在最上方,分为若干顶级域 (.com、.net、.edu、.gov、.org 等,以及 200 多个国家级的顶级域),这些域又被分成 二级域,依此类推。它们由各自相应的政府或私有实体管理。
DNS 的分布式机制支持有效且可靠的名字到 IP 地址的映射。多数名字可以在本地映射, 不同站点的服务器相互合作能够解决大网络的名字与 IP 地址的映射问题。单个服务器的故 障不会影响 DNS 的正确操作。
DNS 工作流程
域名服务分为客户端和服务器端,客户端提出请求,询问一个 Domain Name 的 IP 地 址,服务器端必须回答客户端的请求。本地 DNS 首先查询自己的数据库,如果自己的数据 库中没有对应的 IP 地址,则向本地 DNS 上所设的上一级 DNS 询问,得到结果之后,将收 到的结果保存在高速缓冲区,并回答给客户端。
DNS 的报文格式
DNS定义了用于查询和响应的报文格式,下图是查询和响应报文的总体格式:
这个报文由 1 2 字节长的首部和 4 个长度可变的字段组成。
标识字段由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否 匹配。16 bit 的标志字段被划分为若干子字段,如下图所示:
标志中每一位的含义如下:
QR:是 1 bit 字段,0 表示查询报文,1 表示响应报文。
Opcode:报文类型,是一个 4 bit 字段,通常值为 0(标准查询),其他值为 1(反向查询)和 2(服务器状态请求)。
AA:是 1 bit 字段,表示“授权回答(authoritative answer)”,如果此位为 1,表示服务器对问题部分的回答是权威性的。
TC:是 1 bit 字段,表示“可截断的(truncated)”。使用 UDP 时,它表示当应答的总长度超过 512 字节时,只返回前 512 个字节。
RD:是 1 bit 字段,表示“期望递归(recursion desired)”。该比特能在一个查询中设置,并在响应中返回。这个标志告诉名字服务器必须处理这个查询,也称为一个递归查 询。如果该位为 0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询 的其他名字服务器列表,这称为迭代查询。
RA:是 1 bit 字段,表示“可用递归”。如果名字服务器支持递归查询,则在响应中 将该比特设置为 1。
Zero:随后的 3 bit 字段必须为 0。
Rcode:是一个 4 bit 的返回码字段。通常的值为 0(没有差错)和 3(名字差错)。 名字差错只有从一个授权 DNS 服务器上返回,它表示在查询中制定的域名不存在。 随后的 4 个 16 bit 字段说明最后 4 个变长字段中包含的条目数。对于查询报文,问题(question)数通常是 1,而其他 3 项则均为 0。类似地,对于应答报文,回答数至少 是 1,剩下的两项可以是 0 或非 0。
查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值 来说明随后标识符的字节长度,每个名字以最后字节为 0 结束,长度为 0 的标识符是根标 识符。计数字节的值必须是 0 ~ 63 的数,因为标识符的最大长度仅为 63。
每个问题有一个查询类型,而每个响应(也称一个答案或资源记录)也有一个类型。大约有 20 个不同的类型值,其中的一些目前已经过时,常见的值如下表:
最常用的查询类型是 A 类型,表示期望获得查询名的 IP 地址。一个 PTR 查询则请求 获得一个 IP 地址对应的域名。
查询类通常是 1,指互联网地址(某些站点也支持其他非 I P 地址)。
DNS 报文中最后的三个字段,答案字段、权威答案字段和附加答案字段,均采用一种称 为资源记录 RR(Resource Record)的相同格式,下图是 DNS 响应报文中资源记录的格式:
域名:是记录中资源数据对应的名字。它的格式和前面介绍的查询名字段格式相同。 类型:说明 RR 的类型码。它的值和前面介绍的查询类型值是一样的。
类:通常为 1,指 Internet 数据。 生存时间:该字段是客户程序保留该资源记录的秒数。资源记录通常的生存时间值为 2天。
资源数据长度:说明资源数据的数量。该数据的格式依赖于类型字段的值。对于类型 1(A 记录)资源数据是 4 字节的 I P 地址。
【实验步骤】
步骤一:使用 nslookup 工具解析域名,捕获数据包并进行分析
1、在实验主机上启动网络协议分析仪进行数据捕获并设置过滤条件,在工具栏点击“过 滤器”按钮,会弹出“设置&过滤器”对话框,在“过滤器类型”中选择“类型过滤器”,
类型值中选择“DNS 协议”,点击“设置参数”按钮后“确定”,开始进行数据包的捕获:
- 使用 nslookup 工具进行域名的解析
nslookup 命令是查询域名对应 IP 的工具,其用法可以直接在 Windows 系统的命令提 示符下运行命令:nslookup 域名 来进行域名解析,例如:
也可以仅仅运行 nslookup 命令(不需任何参数),进入 nslookup 的交互界面,在“>” 提示符后可以多次输入不同的域名,以实现多次的查询,例如可以在一次 nslookup 的交互过程中,进行 www.hdu.edu.cn、 www.yahoo.com、 www.google.com 的查询:
3、分析捕获到的数据报文
分析一个 DNS 的查询报文,从中可以看到,报文的标识为 10,问题数是1,答案数、 权威答案数、附加答案数都是 0,而要查询的域名是www.yahoo.com :
分析一个响应报文,报文标识同样为 10,指明这个响应是针对哪一个查询报
步骤二:使用 ipconfig 命令查看 DNS 缓存
1、继续使用协议分析仪进行数据的捕获,同时打开 IE 浏览器,访问 www.hdu.edu.cn、 www.yahoo.com、 www.google.com,观察此时是否还有 DNS 请求?
2、关闭 IE 浏览器后再重新打开,访问一个尚未访问过的网站,例如 www.sohu.com, 观察此时是否有 DNS 请求?为什么?
3、在 Windows 系统的命令提示符下运行:ipconfig /displaydns 显示本机缓冲区中 的DNS 解析内容,如图所示:
在 Windows 系统的命令提示符下运行:ipconfig /flushdns,则可以清除本机的 DNS 缓存记录,如图所示:
5、此时关闭 IE 浏览器再打开,访问刚才打开过的网站,观察 DNS 请求.