学习:DNS协议分析

DNS服务:采用服务器/客户端(C/S)的方式工作。当客户端程序要通过一个主机名称访问网络中的一台主机时,它首先需要得到这个主机名称所对应的IP地址,此时就需要用到DNS,来进行域名转换为网络地址的作用

进行DNS服务查询之前,会先进行系统DNS缓存 > HOSTS文件

然后会请求 DNS服务器中的缓存,如果没有就开始迭代DNS查询


DNS报文格式:

首先看看Header段中每个字段的含义:

DNS ID号(DNS ID Number): 用来对应DNS查询和DNS响应

查询/响应(Query/Response, QR): 用来指明这个报文是DNS查询还是响应,占1个比特位。为1代表响应,0代表查询

操作代码(OpCode):用来定义消息中请求的类型

权威应答(Authoritative Answer, AA):这个比特位在响应的时候才有意义。则说明这个响应是由域内权威域名服务器发出的

截断(Truncation, TC):用来指出报文比允许的长度还要长,导致被截断

期望递归(Recursion Desired, RD):如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的。

支持递归(Recursion Available, RA): 当响应中设定了这个值,说明域名服务器支持递归查询

保留(Z): 未使用,用0表示

响应代码(Response  Code): 在DNS响应中指明错误,占4个比特位。

问题计数(Question Count): 问题区段中的问题记录数

回答计数(Answer Count):回答区段中的回答记录数

域名服务计数(Name Server Count):权威区段中的记录数

额外记录数(Additional  Records Count):在额外信息区段中的记录数

问题区段(Question Section):包含有被发送到DNS服务器的一条或者多条信息

回答区段(Answer Section):含有用来回答查询的一条或者多条资源记录

权威区段(Authority Section):包含权威域名服务器的资源记录

额外信息区段(Additional Information Section): 包含资源记录且大小可变的区段。

分析数据包:

DNS请求数据包:

DNS应答数据包:

需要注意的是:上面的抓到的只是客户端与DNS服务器114.114.114.114之间的递归查询,DNS服务器114.114.114.114还进行了之后的迭代查询

1、递归查询

客户计算机向本地域名服务器的查询一般采用的是递归查询。如果客户机所询问的本地域名服务器无法提供被查询域名的IP地址,那么本地域名服务器就会以DNS客户的身份,向其它根域名服务器继续发出查询请求的报文。

2、迭代查询

本地域名服务器向根域名服务器的查询通常采用的是迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求的报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器“下一步应该向哪个域名服务器进行查询”。然后本地域名服务器就进行后续的查询。

我们用linux的dig命令来进行查询下dig @www.adexx.xyz +trace

猜你喜欢

转载自www.cnblogs.com/zpchcbd/p/12293596.html