DNS协议分析

DNS协议分析

协议描述

DNS协议是用来进行域名与IP地址之间的转换的。当一个应用进程需要把域名解析为IP地址时,该应用进程就调用解析程序,把待解析的域名在DNS请求报文中,以UDP数据报方式发送给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在DNS应答报文中返回。若本地域名服务器不能回答该请求,则向其它域名服务器发送查询请求,直至找到能够回答该请求的域名服务器。

协议数据格式

根据RFC1035文档可知,DNS协议报文格式如下所示:

+---------------------+
|        Header       | 报文头
+---------------------+
|       Question      | 查询请求
+---------------------+
|        Answer       | 应答
+---------------------+
|      Authority      | 授权应答
+---------------------+
|      Additional     | 附加信息
+---------------------+

Header定义了报文是请求还是应答、错误码以及其它的一些标志位;
Question描述了查询的问题,包括查询类型(QTYPE)、查询类(QCLASS) 和查询的域名(QNAME);
Answer段包含回答问题的RRs;
Authority段包含授权域名服务器的RRs;
Additional段包含和请求相关的,但是不是必须回答的RRs。

首部部分格式

DNS协议报文首部的格式如下所示:

    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      ID                       |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |QR|  Opcode   |AA|TC|RD|RA|Z |AD|CD|   RCODE   |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    QDCOUNT                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    ANCOUNT                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    NSCOUNT                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    ARCOUNT                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

ID (16Bits)
客户端设置,响应报文会原样带回,用于客户端区分不同的请求应答;
QR (1Bit)
区分是请求 (0 Question) 还是应答 (1 Response);
Opcode (4Bits)
设置查询的种类,响应报文会原样带回,可以为:0 标准查询 QUERY;1 反向查询 IQUERY;2 服务器状态查询 STATUS;3~15 保留;
AA (1Bit)
授权应答(Authoritative Answer),这个位在响应报文有效,用于标示服务器响应报文是否为授权服务器返回的结果,可能是在本地 Cache 的缓存;
TC (1Bit)
截断(Truncation),报文因为超过了允许的长度,导致被截断,仅当DNS报文使用UDP服务时使用。因为UDP数据包有长度限制,当长度过长时会被截断。当TC = 1时,标识DNS报文长度超过512字节,并被截断;
RD (1Bit)
期望递归(Recursion Desired)用于请求中,这个位可以置为1,并且被复制到响应中,它引导名称服务器递归跟踪查询,支持递归跟踪查询是可选项。
如果RD = 1,标识执行递归查询,即DNS服务器无法解析某一个主机名,则它向其它DNS服务器继续查询,如此反复,直到它解析到目标主机名并返回给客户端;
如果RD =0标识迭代查询,即DNS服务器无法解析目标主机时,它将查询到的其它DNS服务器的IP地址返回给客户端,供客户端进行参考;
RA (1Bit)
递归可用(Recursion Available)用于响应中,如果服务器支持递归查询则设置为 1 ,否则设置为 0 ;
Z (1Bit)
保留将来使用,原始的DNS保留Z字段供将来使用,它所有的查询和响应中必须是零(0);
AD (1Bit)
应答认证(Answer authenticated)应答/权限部分未由服务器进行认证。
AD = 0 应答服务器未验证该查询相关的 DNSSEC 数字签名;
AD = 1 应答服务器已经验证了该查询相关的 DNSSEC 数字签名。
CD (1Bit)
未经认证的数据:不可接受
CD = 0 为服务器已经进行了相关 DNSSEC 数字签名的验证;
CD = 1 为服务器并未进行相关 DNSSEC 数字签

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值