任务描述
本关任务:DNS 系统解析过程的具体分析。
相关知识
为了完成本关任务,你需要掌握:
- 如何实现 DNS 域名解析协议,
- 如何查看 DNS 的请求报文与响应报文。
DNS 域名解析过程
DNS 协议属于应用层,使用客户端-服务器模式运行在通信的端系统之间。在通信的端系统之间通过端到端传输输协议( UDP 协议,通常使用 53 号端口)来传送 DNS 报文。
DNS 系统解析过程如下图所示:
DNS 客户需要访问 WEB 服务器www.abc.xyz.com
,则客户机可以访问本地的 hosts 文件,看能否知道主机名称对应的 IP 地址,如果 hosts 文件不能解析该主机名称,则只能通过向客户机所设定的 DNS 服务器进行查询。查询过程如下: (1)DNS 客户机向本地域名服务器发送查询请求,查找域名www.abx.xyz.com
的 IP 地址。本地域名服务器查询本地的缓存,如果有这个地址,则将地址返回给 DNS 客户机; (2)如果本地域名服务器缓存没有这个地址,则发送查询请求到根域名服务器,询问www.abx.xyz.com
的地址,根域名服务器会将子域 com
的域名服务器的地址返回给本地域名服务器; (3)本地域名服务器再向 com
域发送查询请求,com
域服务器无法提供地址,但会把下一级的域名服务器 xyz.com
的地址发送给本地域名服务器; (4)重复(2)、(3)的过程,最后 xyz.com
域名服务器把abc.xyz.com
域名服务器地址发送给本地域名服务器; (5)本地域名服务器再向abc.xyz.com
域名服务器发送地址查询请求abc.xyz.com
,找到了www.abc.xyz.com
的地址,就将这个地址发送给本地域名服务器; (6)本地域名服务器把地址保存到缓存,同时返回给 DNS 客户机。 有两种查询方式,分别是:
- 递归查询:主机向本地域名服务器的查询一般都是采用递归查询;
- 迭代查询:本地域名服务器向根域名服务器的查询通常采用迭代查询。只是通常,也有的采用递归查询。
域名解析协议
域名解析的实现是依靠 DNS 协议来完成。有两种 DNS 报文——查询报文和响应报文,分别来实现 DNS 的查询请求和响应请求。
DNS 协议报文格式如下:
1.头部 (1)会话标识( 2 字节) DNS 报文的 ID 标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分 DNS 应答报文是哪个请求的响应。 (2)标志( 2 字节) 各字段定义如下:
- QR( 1 bit) 查询/响应标志,0 为查询,1 为响应
- opcode( 4 bit) 0 表示标准查询,1 表示反向查询,2 表示服务器状态请求
- AA( 1 bit) 表示授权回答
- TC( 1 bit) 表示可截断的
- RD( 1 bit) 表示期望递归
- RA( 1 bit) 表示可用递归
- rcode( 4 bit) 表示返回码,0 表示没有差错,3 表示名字差错,2 表示服务器错误(Server Failure)
(3)数量字段(总共 8 字节): 各自表示后面的四个区域的数目。
- Questions 表示查询问题区域节的数量
- Answers 表示回答区域的数量
- Authoritative nameservers 表示授权区域的数量
- Additional recoreds 表示附加区域的数量
2.正文 正文部分由查询区域和资源记录区域组成。 (1)查询区域
查询名:长度不固定,且不使用填充字节,一般该字段表示的就是需要查询的域名(如果是反向查询,则为 IP ,反向查询即由 IP 地址反查域名)。其构成如下:
查询类型:规定如下
注:查询类通常为 1 ,表明是 Internet 数据。
(2)资源记录 (RR) 区域(包括回答区域、授权区域和附加区域)
这三个区域分别是:回答区域,授权区域和附加区域,其格式都是一样的。
- 域名( 2 字节或不定长):格式和 Queries 区域的查询名字字段是一样的;
- 查询类型:表明资源纪录的类型,与查询类型表格相同;
- 查询类:对于 Internet 信息,总是 IN ;
- 生存时间(TTL):以秒为单位,表示的是资源记录的生命周期;
- 资源数据:可变长字段,表示按照查询段的要求返回的相关资源记录的数据。
操作要求
双击打开桌面上的工作区文件夹”workspace”,再打开实训文件夹”myshixun”,将查询的信息保存到文件message-3.txt
。具体要求如下:
(1)打开 Wireshark ,并在过滤器中输入 DNS 。筛选出 DNS 协议报文,并开始捕获报文。然后打开终端,输入命令并执行nslookup www.baidu.com
,在 Wireshark 中停止捕获报文; (2)查看报文列表,将 DNS 查询-响应的次数写入文件中; (3)展开最后一轮查询报文,分析协议字段中各字段的值,将 Queries Name 的值写入文件中;
(4)展开最后一轮响应报文,分析协议字段中各字段的值,将 Answers Cname 的值写入文件中;
(5)展开最后一轮响应报文,将 Answers 中的两个 IP 值写入文件中(两个 IP 地址用";"隔开);
测试说明
在此将 Answers 中的两个 IP 值与答案不符,小白表示不太懂。
平台会对你操作的结果进行测试,如果操作正确你将顺利通关。
开始你的任务吧,祝你成功!