一,简介

空谈误国,要让一大堆抽象的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. ZOJ 3703 Happy Programming Contest(DP)

    题目链接 输出路径,搞了一个DFS出来,主要是这里,浪费了好长时间. #include <cstdio> #include <string> #include <cstr ...

  2. 【Eclipse】修改 编码格式

    eclipse 默认编码居然是GBK,js文件默认编码是ISO-....怎么可以这样呢? 都修改成UTF8的方法: 1.windows->Preferences...打开"首选项&qu ...

  3. Linux_记录ping命令的日志包括时间戳

    while true; do ping -c 1 www.baidu.com | awk '{print "["strftime("%F %H:%M:%S")& ...

  4. 腾讯 pc端面试(2015.10.26)

    整个面试过程全部围绕着我在前一家公司做过的项目开始提问.因为这个项目是我主要负责的,所以面试官第一个问题是让我讲解了整个项目的框架结构.在对于项目的框架结构的讲解方面,大致条理还算清醒但是因为很少对做 ...

  5. 部署node程序并维持正常运行时间

    12.2部署的基础知识 假定你创建了一个想要展示的Web程序,或者创建了一个商业应用,在把它放到生产环境中之前需要测试一下.你很可能会从一个简单的部署开始,然后再做些工作让它的正常运行时间和性能达到最 ...

  6. poi excel导出,下载

    poi.jar包 public void downExcel(HttpServletResponse response,Page<ShopApply> page) throws Excep ...

  7. [zt] Android中使用List列表

    原文地址:http://www.vogella.com/tutorials/AndroidListView/article.html 1. Android and Lists 1.1. Using l ...

  8. typeof操作符在javascript中运用时时页面上的操作数显示

    typeof可以告诉我们它的操作数是一个字符串(string).数值(number).函数(function).布尔值(boolean)或对象(object). 1.字符串(string) alert ...

  9. JAVA中JDBC连接数据库

    这里列举了JDBC连接Oracle . SQLServer .MySQL 三种 数据库 1.Oracle连接(导入classes12.jar 包) public static Connection g ...

  10. JQuery 遍历子元素+ each函数的跳出+提取字符串中的数字

    最近脑袋迷糊的如同一团浆糊,一直出错. HTML代码如下图,现在想实现的功能是根据Ajax请求,获取到具体的button,以更新其样式.由于Button较多,每个Button都设置id,没有意义,想通 ...