DNS消息格式
一,简介
空谈误国,要让一大堆抽象的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消息格式的更多相关文章
- Lind.DDD.LindMQ~关于持久化到Redis的消息格式
回到目录 关于持久化到Redis的消息格式,主要是说在Broker上把消息持久化的过程中,需要存储哪些类型的消息,因为我们的消息是分topic的,而每个topic又有若干个queue组成,而我们的to ...
- CORBA GIOP消息格式学习
想要深入理解ORB的工作过程与原理,学习与了解GIOP消息格式必不可少.我们知道GIOP是独立于具体通信的更高级别的抽象,因此这里针对GIOP在TCP/IP上的实现IIOP协议进行学习与分析(IIOP ...
- DNS报文格式
原文链接地址:http://blog.chinaunix.net/uid-24875436-id-3088461.html DNS报文格式(借个图贴过来): 说明一下:并不是所有DNS报文都有 ...
- Kafka的消息格式
Commit Log Kafka储存消息的文件被它叫做log,按照Kafka文档的说法是: Each partition is an ordered, immutable sequence of me ...
- 【转】[WCF REST] 帮助页面与自动消息格式(JSON/XML)选择
可以说WebHttpBinding和WebHttpBehavior是整个Web HTTP编程模型最为核心的两个类型,前者主要解决消息编码问题,而余下的工作基本上落在了终结点行为WebHttpBehav ...
- Web Service 消息格式
当客户端和Web Service服务器进行通信时,他们交换消息.客户端发送请求消息到Web Service服务器. Web Service服务器响应并返回消息.这就像普通的HTTP,浏览器发送一个HT ...
- Kafka-Record(消息格式)
注:本文依赖于kafka-0.10.0.1-src kafka消息格式是经过多个版本的演变的,本文只说0.10.0.1版本的消息格式. 消息格式如图1所示: 图1 CRC:用于校验消息内容.占4个字节 ...
- MQTT-SN协议乱翻之消息格式
前言 紧接着上篇初步介绍,本文为第二篇,主要梳理MQTT-SN 1.2协议中定义的消息格式. 通用消息格式 消息头 其它可变部分 2/4字节表示 N字节组成 消息头部 长度 消息类型 1或3个字节 1 ...
- SIP消息类型和消息格式
转自:http://blog.chinaunix.net/uid-1797566-id-2840904.html sip消息类型和消息格式 SIP是一个基于文本的协议,使用的是UTF-8字符集. SI ...
随机推荐
- 【CodeVS】 p1696 奇怪的函数
题目描述 Description 自从得到上次的教训后,John的上课态度认真多了,也变得更爱动脑筋了.今天他又学习了一个新的知识:关于 xk 的位数. 如果x大于0小于l,那么位数=1+小数部分×k ...
- IOS本地通知
发送通知: UILocalNotification *newNotification = [[UILocalNotification alloc] init]; if (newNotifica ...
- osg中使用MatrixTransform来实现模型的平移/旋转/缩放
osg中使用MatrixTransform来实现模型的平移/旋转/缩放 转自:http://www.cnblogs.com/kekec/archive/2011/08/15/2139893.html# ...
- Linux_文件及文件夹[创建][复制][移动][删除][重命名]
一.文件/文件夹创建 1.文件的创建 touch , vi/vim/nano , ... 语 法: touch [-acfm][-d <日期时间>][-r <参考文件或目 录&g ...
- JavaScript:词法结构
1.字符集JavaScript程序是用Unicode字符集编写的. 1.1 区分大小写 JavaScript是区分大小写的语言.也就是说,关键字.变量.函数名和所有标识符(identifier)都必须 ...
- 读《深入php面向对象、模式与实践》有感(三)
命令模式: 第一次接触到这个命令模式的时候,感觉它很像一个简化的mvc框架.从不同的路径访问,再由控制器来判断所要调用的具体php文件. <?php class CommandContext{ ...
- POJ1154
LETTERS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8119 Accepted: 3661 Descripti ...
- ie上 CSS3114: @font-face 未能完成 OpenType 嵌入权限检查。(包括图标无法显示)
转自:http://blog.csdn.net/shore_w/article/details/8976188 @font-face是CSS3中的一个模块, 它主要是把自己定义的Web字体嵌入到网页中 ...
- 讨论一下hibernate如何动态注册一个动态生成的实体类
如何动态生成实体类请参考这篇博文:http://www.cnblogs.com/anai/p/4269858.html 下面说说得到实体类后,如何能使用hibernate的接口来进行数据访问. 我们都 ...
- Chrome开发,debug的使用方法。
怎样打开Chrome的开发者工具? 你可以直接在页面上点击右键,然后选择审查元素: 或者在Chrome的工具中找到: 或者,你直接记住这个快捷方式: Ctrl+Shift+I (或者Ctrl+Shif ...