原文链接地址:http://blog.chinaunix.net/uid-24875436-id-3088461.html

DNS报文格式(借个图贴过来):

    说明一下:并不是所有DNS报文都有以上各个部分的。图中标示的“12字节”为DNS首部,这部分肯定都会有,首部下面的是正文部分,其中查询问题部分也都会有。除此之外,回答、授权和额外信息部分是只出现在DNS应答报文中的,而这三部分又都采用资源记录(Recource Record)的相同格式,这个稍后会提到。下面逐个字段地分析DNS报文。

    标识(2字节):这个字段网上的解释有点不清楚:“由客户程序设置并有服务器返回结果。”看了下实验室的程序和文档,原来这个字段可以看作是DNS报文的ID,对于相关联的请求报文和应答报文,这个字段是相同的,由此可以区分DNS应答报文是哪个请求报文的响应。

    标志(2字节):这部分非常重要,需要逐比特分析。再借个图:

    QR(1比特):查询/响应的标志位,1为响应,0为查询。

    opcode(4比特):定义查询或响应的类型(若为0则表示是标准的,若为1则是反向的,若为2则是服务器状态请求)。

    AA(1比特):授权回答的标志位。该位在响应报文中有效,1表示名字服务器是权限服务器(关于权限服务器以后再讨论)

    TC(1比特):截断标志位。1表示响应已超过512字节并已被截断(依稀好像记得哪里提过这个截断和UDP有关,先记着)

    RD(1比特):该位为1表示客户端希望得到递归回答(递归以后再讨论)

    RA(1比特):只能在响应报文中置为1,表示可以得到递归响应。

    zero(3比特):不说也知道都是0了,保留字段。

   rcode(4比特):返回码,表示响应的差错状态,通常为0和3,各取值含义如下:

0          无差错

1          格式差错

2          问题在域名服务器上

3          域参照问题

4          查询类型不支持

5          在管理上被禁止

6          -- 15 保留

    标志段说完了,下面是问题数、资源记录数、授权资源记录数和额外资源记录数,这四个字段都是两字节,分别对应下面的查询问题、回答、授权和额外信息部分的数量。一般问题数都为1,DNS查询报文中,资源记录数、授权资源记录数和额外资源记录数都为0.

    该说正文部分了。查询问题部分格式如下:

    查询名部分长度不定,一般为要查询的域名(也会有IP的时候,即反向查询)。此部分由一个或者多个标示符序列组成,每个标示符以首字节数的计数值来说明该标示符长度,每个名字以0结束。计数字节数必须是0~63之间。该字段无需填充字节。还是借个例子来说明更直观些,查询名为gemini.tuc.noao.edu的话,查询名字段如下:

    查询类型(2字节):通常查询类型为A(由名字获得IP地址)或者PTR(获得IP地址对应的域名),类型列表如下:

类型 助记符 说明

1 A IPv4地址。

2 NS 名字服务器。

5 CNAME 规范名称。定义主机的正式名字的别名。

6 SOA 开始授权。标记一个区的开始。

11 WKS 熟知服务。定义主机提供的网络服务。

12 PTR 指针。把IP地址转化为域名。

13 HINFO 主机信息。给出主机使用的硬件和操作系统的表述。

15 MX 邮件交换。把邮件改变路由送到邮件服务器。

28 AAAA IPv6地址。

252 AXFR 传送整个区的请求。

255 ANY 对所有记录的请求。

   查询类(2字节):通常为1,指Internet数据。

前面说过,回答字段,授权字段和附加信息字段均采用资源记录RR(Resource Record)的相同格式。该格式如下:

    域名字段(不定长或2字节):记录中资源数据对应的名字,它的格式和查询名字段格式相同。当报文中域名重复出现时,就需要使用2字节的偏移指针来替换。例如,在资源记录中,域名通常是查询问题部分的域名的重复,就需要用指针指向查询问题部分的域名。关于指针怎么用,TCP/IP详解里面有,即2字节的指针,最签名的两个高位是11,用于识别指针。其他14位从报文开始处计数(从0开始),指出该报文中的相应字节数。注意,DNS报文的第一个字节是字节0,第二个报文是字节1。一般响应报文中,资源部分的域名都是指针C00C(1100000000001100),刚好指向请求部分的域名。

    类型(2字节)、类(2字节):含义与查询问题部分的类型和类相同。

    生存时间(4字节):该字段表示资源记录的生命周期(以秒为单位),一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。

    资源数据长度(2字节):表示资源数据的长度(以字节为单位,如果资源数据为IP则为0004)

    资源数据:该字段是可变长字段,表示按查询段要求返回的相关资源记录的数据。

    基本上对DNS报文格式的分析就是这些了。贴个报文实例,用wireshark抓的:

    对应的报文:

    就不再分析了,对比wireshark的分析应该能找到各个字段。

DNS报文格式的更多相关文章

  1. DNS报文格式(RFC1035)

    一.域名和资源记录的定义 1.Name space definitions 2.资源记录定义(RR definitions)      2.1 格式          后面分析报文的时候详细解释.   ...

  2. 【转】TCP/IP报文格式

    1.IP报文格式 IP协议是TCP/IP协议族中最为核心的协议.它提供不可靠.无连接的服务,也即依赖其他层的协议进行差错控制.在局域网环境,IP协议往往被封装在以太网帧(见本章1.3节)中传送.而所有 ...

  3. http请求报文格式和响应报文格式

    转载 出处 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求 ...

  4. TCP报文格式

    转载自https://blog.csdn.net/mary19920410/article/details/58030147 1.TCP报文格式 TCP报头中的源端口号和目的端口号同IP数据报中的源I ...

  5. TCP报文格式,TCP的三次握手和四次挥手&hosts文件

    1.TCP报文格式 TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接 序号(4字节=32位): 37 59 56 75 用来标识TCP发端向TCP收端发送的数据 ...

  6. 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)

    摘要:     本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述     TCP是面向连接的可靠 ...

  7. 如何突破DNS报文的512字节限制

    - DNS的512字节限制 根据协议标准,DNS协议同时占用UDP和TCP的53端口,这是为什么呢? 翻阅DNS资料,可以发现,DNS协议默认按UDP传输,为优化传输性能,DNS协议有一个512字节的 ...

  8. http请求报文格式(请求行、请求头、空行 和 请求包体)和响应报文格式(状态行、响应头部、空行 和 响应包体)

    转载 出处 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求 ...

  9. DHCP原理及报文格式

    DHCP原理及报文格式 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是IETF为实现IP的自动配置而设计的协议,它可以为客户机自动分配IP地址. ...

随机推荐

  1. Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室

    一.聊天室简单介绍 采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制.聊天室增加了 注册登录模块 ,并将用户个人信息和聊天记录存入数据库. 数据库采用 ...

  2. .NET生成缩略图并下载

    缩略图:比喻一张图片宽度为1000px,大小为800K,经过缩略后变成一张宽度100px,大小10K的图片. 先给出界面: 总体的流程分5步如下图: 1.添加一个html:GetminPic.html ...

  3. asp.net中绘制大数据量的可交互的图表

    在一个asp.net项目中要用到能绘制大数据量信息的图表,并且是可交互的(放大.缩小.导出.打印.实时数据),能够绘制多种图形. 为此进行了多方调查预研工作,预研过微软的MsChart图表组件.基于j ...

  4. 分享一个Winform里面的HTML编辑控件Zeta HTML Edit Control,汉化附源码

    我们知道,Web开发上有很多HTML的编辑控件,如FCKEditor.CKEditor.kindeditor等等,很多都做的很好,而虽然Winform里面有WebBrowser控件,但是默认这个控件是 ...

  5. HTML5实现音频播放

    Web 上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件(比如 Flash)来播放的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定了一种通过 aud ...

  6. PHP入门:在Windows中安装PHP工作环境

    PHP入门:在Windows系统中分别安装PHP工作环境 一.什么是LAMP? Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是 ...

  7. [CLR via C#]19. 可空值类型

    我们知道,一个值类型的变量永远不可能为null.它总是包含值类型本身.遗憾的是,这在某些情况下会成为问题.例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型 ...

  8. sql添加合计

    在项目中发现有这样的写法 SELECT ZoneID,CountSQAZFZSBJZ3G+CountSQGZJRJZSL3G AS column1FROM G3MulticarrierSiteCove ...

  9. 从零开始学习Linux(mkdir and rmdir)

    今天说mkdir 和 rmdir.因为mkdir 内容比较少.而且也很好理解. 对于mkdir来说,一般只用到 -p -m,我只用过-p参数,-m也是刚刚看的. 先说不带参数的: mkdir  tes ...

  10. 【图解】Eclipse下JRebel6.2.0热部署插件安装、破解及配置【转】

    标签: 这两天在做后台管理系统,前端框架用Bootstrap,后端用SpringMVC+Velocity.在开发过程中,经常需要对界面进行微调,调整传参等,每次更改一次java代码,就得重新部署一次, ...