DNS协议报文(RFC1035)DNS报文解析DNS协议详解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

DNS协议报文(RFC1035)DNS报文解析DNS协议详解一、域名和资源记录的定义1、Namespacedefinitions2、资源记录定义(RRdefinitions)2.1格式后面分析报文的时候详细解释。2.2类型值(TYPEvalues)类型主要用在资源记录中,注意下面的值是QTYPE的一个子集。类型值和含义A1ahostaddressNS2anauthoritativenameserverMD3amaildestination(Obsolete-useMX)MF4amailforwarder(Obsolete-useMX)CNAME5thecanonicalnameforanaliasSOA6marksthestartofazoneofauthorityMB7amailboxdomainname(EXPERIMENTAL)MG8amailgroupmember(EXPERIMENTAL)MR9amailrenamedomainname(EXPERIMENTAL)NULL10anullRR(EXPERIMENTAL)WKS11awellknownservicedescriptionPTR12adomainnamepointerHINFO13hostinformationMINFO14mailboxormaillistinformationMX15mailexchangeTXT16textstrings2.3查询类型(QTYPEvalues)查询类型出现在问题字段中,查询类型是类型的一个超集,所有的类型都是可用的查询类型,其他查询类型如下:AXFR252ArequestforatransferofanentirezoneMAILB253Arequestformailbox-relatedrecords(MB,MGorMR)MAILA254ArequestformailagentRRs(Obsolete-seeMX)*255Arequestforallrecords2.4类(CLASSvalues)IN1theInternetCS2theCSNETclass(Obsolete-usedonlyforexamplesinsomeobsoleteRFCs)CH3theCHAOSclassHS4Hesiod[Dyer87]2.5查询类(QCLASSvalues)查询类是类的一个超集*255anyclass3、StandardRRs3.1CNAMERDATAformat3.2HINFORDATAformat3.3MBRDATAformat(EXPERIMENTAL)3.4MDRDATAformat(Obsolete)3.5MFRDATAformat(Obsolete)3.6MGRDATAformat(EXPERIMENTAL)3.7MINFORDATAformat(EXPERIMENTAL)3.8MRRDATAformat(EXPERIMENTAL)3.9MXRDATAformat3.10NULLRDATAformat(EXPERIMENTAL)3.11NSRDATAformat3.12PTRRDATAformat3.13SOARDATAformat3.14TXTRDATAformat4、ARPAInternetspecificRRs4.1ARDATAformat4.2WKSRDATAformat5、IN-ADDR.ARPAdomain6、Definingnewtypes,classes,andspecialnamespaces二、报文1、报文格式(Format)dns请求和应答都是用相同的报文格式,分成5个段(有的报文段在不同的情况下可能为空),如下:+---------------------+|Header|报文头+---------------------+|Question|查询的问题+---------------------+|Answer|应答+---------------------+|Authority|授权应答+---------------------+|Additional|附加信息+---------------------+Header段是必须存在的,它定义了报文是请求还是应答,也定义了其他段是否需要存在,以及是标准查询还是其他。Question段描述了查询的问题,包括查询类型(QTYPE),查询类(QCLASS),以及查询的域名(QNAME)。剩下的3个段包含相同的格式:一系列可能为空的资源记录(RRs)。Answer段包含回答问题的RRs;授权段包含授权域名服务器的RRs;附加段包含和请求相关的,但是不是必须回答的RRs。1.1Header的格式报文头包含如下字段:1111110123456789012345+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|ID|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|QR|Opcode|AA|TC|RD|RA|Z|RCODE|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|QDCOUNT|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|ANCOUNT|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|NSCOUNT|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|ARCOUNT|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+各字段分别解释如下:ID请求客户端设置的16位标示,服务器给出应答的时候会带相同的标示字段回来,这样请求客户端就可以区分不同的请求应答了。QR1个比特位用来区分是请求(0)还是应答(1)。OPCODE4个比特位用来设置查询的种类,应答的时候会带相同值,可用的值如下:0标准查询(QUERY)1反向查询(IQUERY)2服务器状态查询(STATUS)3-15保留值,暂时未使用AA授权应答(AuthoritativeAnswer)-这个比特位在应答的时候才有意义,指出给出应答的服务器是查询域名的授权解析服务器。注意因为别名的存在,应答可能存在多个主域名,这个AA位对应请求名,或者应答中的第一个主域名。TC截断(TrunCation)-用来指出报文比允许的长度还要长,导致被截断。RD期望递归(RecursionDesired)-这个比特位被请求设置,应答的时候使用的相同的值返回。如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的。RA支持递归(RecursionAvailable)-这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询。Z保留值,暂时未使用。在所有的请求和应答报文中必须置为0。RCODE应答码(Responsecode)-这4个比特位在应答报文中设置,代表的含义如下:0没有错误。1报文格式错误(Formaterror)-服务器不能理解请求的报文。2服务器失败(Serverfailure)-因为服务器的原因导致没办法处理这个请求。3名字错误(NameError)-只有对授权域名解析服务器有意义,指出解析的域名不存在。4没有实现(NotImplemented)-域名服务器不支持查询类型。5拒绝(Refused)-服务器由于设置的策略拒绝给出应答。比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作(比如区域传送zonetransfer)。6-15保留值,暂时未使用。QDCOUNT无符号16位整数表示报文请求段中的问题记录数。ANCOUNT无符号16位整数表示报文回答段中的回答记录数。NSCOUNT无符号16位整数表示报文授权段中的授权记录数。ARCOUNT无符号16位整数表示报文附加段中的附加记录数。1.2Question的格式在大多数查询中,Question段包含着问题(question),比如,指定问什么。这个段包含QDCOUNT(usually1)个问题,每个问题为下面的格式:1111110123456789012345+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+||/QNAME///+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|QTYPE|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|QCLASS|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+字段含义如下QNAME域名被编码为一些labels序列,每个labels包含一个字节表示后续字符串长度,以及这个字符串,以0长度和空字符串来表示域名结束。注意这个字段可能为奇数字节,不需要进行边界填充对齐。QTYPE2个字节表示查询类型,.取值可以为任何可用的类型值,以及通配码来表示所有的资源记录。QCLASS2个字节表示查询的协议类,比如,IN代表Internet。1.3资源记录格式(Resourcerecord)应答,授权,附加段都共用相同的格式:多个资源记录,资源记录的个数由报文头段中对应的几个数值确定,每个资源记录格式如下:1111110123456789012345+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+||///NAME/||+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|TYPE|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|CLASS|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|TTL|||+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|RDLENGTH|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|/RDATA///+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+各字段含义如下:NAME资源记录包含的域名TYPE2个字节表示资源记录的类型,指出RDATA数据的含义CLASS2个字节表示RDATA的类TTL4字节无符号整数表示资源记录可以缓存的时间。0代表只能被传输,但是不能被缓存。RDLENGTH2个字节无符号整数表示RDATA的长度RDATA不定长字符串来表示记录,格式根TYPE和CLASS有关。比如,TYPE是A,CLASS是IN,那么RDATA就是一个4个字节的ARPA网络地址。1.4报文压缩为了减小报文,域名系统使用一种压缩方法来消除报文中域名的重复。使用这种方法,后面重复出现的域名或者labels被替换为指向之前出现位置的指针。指针占用2个字节,格式如下:0123456789012345+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+|11|OFFSET|+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+前两个比特位都为1。因为lablels限制为不多于63个字节,所以label的前两位一定为0,这样就可以让指针与label进行区分。(10和01组合保留,以便日后使用)。偏移值(OFFSET)表示从报文开始的字节指针。偏移量为0表示ID字段的第一个字节。压缩方法让报文中的域名成为:-以0结尾的labels序列-一个指针-指针结尾的labels序列指针只能在域名不是特殊

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功