一,简介

空谈误国,要让一大堆抽象的DNS概念落地,还是需要了解DNS消息格式的,本文会尽量详细地介绍DNS消息格式的每一个字段。

也可以移步rfc1035了解。

二,概览

DNS消息主要由五部分组成,如下图所示:

Header 消息头部
Question DNS请求
Answer 回答请求的资源记录(Resource Record(s))
Authority 指向域的资源记录
Additional 其他资源记录

三,头部格式

头部消息的格式如下图所示:

各字段的意义:

Message ID 16位的消息ID标示一次正常的交互,该ID由消息请求者设置,消息响应者回复请求时带上该ID。
QR 标示该消息是请求消息(该位为0)还是应答消息(该位为1)
OPCODE   

请求类型,目前有三类值:

0  QUERY。标准查询

1 IQUERY, 反向查询

2 STATUS, DNS状态请求

5 UPDATE, DNS域更新请求

AA     只在响应消息中有效。该位标示响应该消息的域名服务器是该域中的权威域名服务器。因为Answer Section中可能会有很多域名
TC 标示这条消息是否因为长度超过UDP数据包的标准长度512字节,如果超过512字节,该位被设置为1
RD 是否递归查询。如果该位被设置为1,则收到请求的域名服务器会递归查询域名,需要注意的是,该位为1,域名服务器不一定会做递归查询,这取决于域名服务器是否支持递归查询。
RA   在响应消息中清除并设置。标示该DNS域名服务器是否支持递归查询。
RCODE  

只在响应消息中有效,标示响应消息的类型:

0  成功的响应

1  格式错误--域名服务器无法解析请求,因为请求消息格式错误

2   服务器错误--域名服务器因为内部错误无法解析该请求

3   名字错误-- 只在权威域名服务器的响应消息中有效,标示请求中请求的域不存在

4   Not Implemented--域名服务器不支持请求的类型

5   Refused -- 域名服务器因为策略的原因拒绝执行请求的操作。例如域名服务器不会为特定的请求者返回查询结果,或者域名服务器不会为特定的请求返回特定的数据

QDCOUNT 标示请求部分的条目数
ANCOUNT   标示响应部分的资源记录数。如果响应消息中没有记录,则设置为0
NSCOUNT   标示权威部分的域名服务器资源记录数。如果响应消息中没有权威记录,则设置为0
ARCOUNT   标示额外部分的资源记录数。

四 请求部分格式

请求消息中包含要请求的内容,请求部分中包含QDCOUNT(往往是1)个条目,每个条目遵循下面的格式

QNAME:请求的域名

QTYPE

QNAME

请求的域名。这里需要注意的是域名的编码。请求的域名中没有“.”,域名中的“.”被编码为元信息,指示接下来的多少字节是有效信息。看个例子:

我要请求www.google.com.hk的A记录。

其中的QNAME段是:03 77 77 77 06 67 6f 6f 67 6c 65 03 63 6f 6d 02 68 6b 00

w   w   w   .   g   o   o  g  l   e   .   c   o   m  .  h   k

其中的蓝色字体就是元信息

QTYPE

请求的资源记录的类型,最常见的有:

0x0001  A记录

0x0002  NS记录

0x0005  CNAME记录

0x0006  SOA记录

0x000B  WKS记录

0x000C  PRT记录

0x000F  MX记录

0x0021  SRV记录

0x0026 A6记录

0x00FF  任何资源记录

更多的资源记录见维基百科

QCLASS

请求的资源记录的类型,Internet或CHAOS?最主要的是:

0x0001  IN 或 Internet

五,DNS应答部分

DNS的剩余三个部分有相同的格式:

NAME

请求的域名。需要注意的是,此处的域名有两种类型的标示防范,一是上面提到的元信息标示方法;二是指针法。

指针法中请求的域名由一个16位的地址标示,该地址指向请求部分中的域名,它的地址是请求部分中域名距离消息开头的偏移量

TYPE

16位。定义了RDATA部分中的内容:

0x0001  A记录

0x0002  NS记录

0x0005  CNAME记录

0x0006  SOA记录

0x000B  WKS记录

0x000C  PRT记录

0x000F  MX记录

0x0021  SRV记录

0x0026 A6记录

0x00FF  任何资源记录

 CLASS

16位。响应的资源记录的类型,Internet或CHAOS?最主要的是:

0x0001  IN 或 Internet

 TTL    32位。该资源记录被缓存的秒数。
 RDLENGTH 16位。RDATA部分的长度,单位是字节。 
 RDATA  

不同类型的资源记录有不同的RDATA格式:

SOA记录:

Primary NS  变长类型,域中master的名字

Admin MB   变长类型,域管理者的邮箱

Serial Number   32位

Refresh Interval  32位

Retry Interval   32位

Expiratio Limit  32位

TTL  32位

MX记录:

Preference

Main Exchanger 提供邮件服务的主机名

A记录:

IP地址,32位

PRT,NS记录

Name: 如果是PRT记录,则返回IP地址对应的域名;如果是NS记录,则返回NS。

参考文献:

· http://www.zytrax.com/books/dns/apd/rfc1035.txt

   · DNS以及所有标准归类http://en.wikipedia.org/wiki/Domain_Name_System

DNS消息格式的更多相关文章

  1. Lind.DDD.LindMQ~关于持久化到Redis的消息格式

    回到目录 关于持久化到Redis的消息格式,主要是说在Broker上把消息持久化的过程中,需要存储哪些类型的消息,因为我们的消息是分topic的,而每个topic又有若干个queue组成,而我们的to ...

  2. CORBA GIOP消息格式学习

    想要深入理解ORB的工作过程与原理,学习与了解GIOP消息格式必不可少.我们知道GIOP是独立于具体通信的更高级别的抽象,因此这里针对GIOP在TCP/IP上的实现IIOP协议进行学习与分析(IIOP ...

  3. DNS报文格式

    原文链接地址:http://blog.chinaunix.net/uid-24875436-id-3088461.html DNS报文格式(借个图贴过来):     说明一下:并不是所有DNS报文都有 ...

  4. Kafka的消息格式

    Commit Log Kafka储存消息的文件被它叫做log,按照Kafka文档的说法是: Each partition is an ordered, immutable sequence of me ...

  5. 【转】[WCF REST] 帮助页面与自动消息格式(JSON/XML)选择

    可以说WebHttpBinding和WebHttpBehavior是整个Web HTTP编程模型最为核心的两个类型,前者主要解决消息编码问题,而余下的工作基本上落在了终结点行为WebHttpBehav ...

  6. Web Service 消息格式

    当客户端和Web Service服务器进行通信时,他们交换消息.客户端发送请求消息到Web Service服务器. Web Service服务器响应并返回消息.这就像普通的HTTP,浏览器发送一个HT ...

  7. Kafka-Record(消息格式)

    注:本文依赖于kafka-0.10.0.1-src kafka消息格式是经过多个版本的演变的,本文只说0.10.0.1版本的消息格式. 消息格式如图1所示: 图1 CRC:用于校验消息内容.占4个字节 ...

  8. MQTT-SN协议乱翻之消息格式

    前言 紧接着上篇初步介绍,本文为第二篇,主要梳理MQTT-SN 1.2协议中定义的消息格式. 通用消息格式 消息头 其它可变部分 2/4字节表示 N字节组成 消息头部 长度 消息类型 1或3个字节 1 ...

  9. SIP消息类型和消息格式

    转自:http://blog.chinaunix.net/uid-1797566-id-2840904.html sip消息类型和消息格式 SIP是一个基于文本的协议,使用的是UTF-8字符集. SI ...

随机推荐

  1. js,html,css注释大集合

    1.js注释: 单行注释,在注释内容前加符号 “//” <script type="text/javascript"> document.write("单行注 ...

  2. Android --#字XO小游戏

    Layout <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro ...

  3. HDU 5876 关于补图的bfs

    1.HDU 5876  Sparse Graph 2.总结:好题,把STL都过了一遍 题意:n个点组成的完全图,删去m条边,求点s到其余n-1个点的最短距离. 思路:把点分为两个集合,A为所有没有到达 ...

  4. window下 配置gitlab ssh非端口22端口

    git config --global user.name "jack" git config --global user.email "jackluo@xxx.com& ...

  5. Python中的socket 模块

    Python 提供了两个基本的 socket 模块.第一个是 Socket,它提供了标准的 BSD Sockets API.第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务 ...

  6. Windows Phone Foreground Toast

    Basically ToastPrompt is an UI component that derives from the Coding4Fun toolkit's abstract PopUp&l ...

  7. Max Sum Plus Plus——A

    A. Max Sum Plus Plus Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To ...

  8. TCP和UDP的聊天

    TCP聊天 TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议. 1.一个TCP连接必须要经过三次"对话"才能建立起来,其中的过程非 ...

  9. 无法删除DLL文件解决方法(转)

    手动解决dll文件无法删除的终极方法 手动解决dll文件无法删除的终极方法 相信大家都遇见过:在删除一些软件的时候弹出某某文件正在运行或磁盘写保护不能删除这样的报错提示吧.而常常删除不掉的都一些后缀为 ...

  10. Maven下载安装

    1.maven下载地址 https://maven.apache.org/配置:M2_HOME D:\tool\mvn\apache-maven-3.3.9 PATH %M2_HOME%/bin3.命 ...