最近学习了下DNS的格式,发现很多内容都是转载自同一个而且说的不是很清楚,特再整理下具体可以查看RFC/rfc/rfc.txt有详细的解释对于英语理解不是很好和懒得看这么长的可以看下本文
ID请求客户端设置的16位标示,服务器给出应答的时候会带相同的标示字段回来,这样请求客户端就可以区分不同的请求应答了。
AA授权应答(AuthoritativeAnswer)-这个比特位在应答的时候才有意义,指出给出应答的服务器是查询域名的授权解析服务器。
注意因为别名的存在,应答可能存在多个主域名,这个AA位对应请求名,或者应答中的第一个主域名。
RD期望递归(RecursionDesired)-这个比特位被请求设置,应答的时候使用的相同的值返回。如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的。
RA支持递归(RecursionAvailable)-这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询。
RCODE应答码(Responsecode)-这4个比特位在应答报文中设置,代表的含义如下:
3名字错误(NameError)-只有对授权域名解析服务器有意义,指出解析的域名不存在。
5拒绝(Refused)-服务器由于设置的策略拒绝给出应答。比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作(比如区域传送ransfer)。
QNAME域名被编码为一些labels序列,每个labels包含一个字节表示后续字符串长度,以及这个字符串,以0长度和空字符串来表示域名结束。注意这个字段可能为奇数字节,不需要进行边界填充对齐。比如表示为
QTYPE2个字节表示查询类型,取值可以为任何可用的类型值,以及通配码来表示所有的资源记录。
查询类型出现在问题字段中,查询类型是类型的一个超集,所有的类型都是可用的查询类型,其他查询类型如下:
MAILB253Arequestformailbox-relatedrecords(MB,MGorMR)
MAILA254ArequestformailagentRRs(Obsolete-seeMX)
CS2theCSNETclass(Obsolete-usedonlyforexamplesinsomeobsoleteRFCs)
RDATA不定长字符串来表示记录,格式根TYPE和CLASS有关。比如,TYPE是
A,CLASS是IN,那么RDATA就是一个4个字节的ARPA网络地址。
为了减小报文,域名系统使用一种压缩方法来消除报文中域名的重复。使用这种方法,后面重复出现的域名或者labels被替换为指向之前出现位置的指针。
前两个比特位都为
1。因为lablels限制为不多于63个字节,所以label的前两位一定为
0,这样就可以让指针与label进行区分。(10和01组合保留,以便日后使用)。偏移值(OFFSET)表示从报文开始的字节指针。偏移量为0表示ID字段的第一个字节。
指针只能在域名不是特殊格式的时候使用,否则域名服务器或解析器需要知道资源记录的格式。目前还没有这种情况,但是以后可能会出现。
如果报文中的域名需要计算长度,并且使用了压缩算法,那么应该使用压缩后的长度,而不是压缩前的长度。
程序可以自由选择是否使用指针,虽然这回降低报文的容量,而且很容易产生截断。不过所有的程序都应该能够理解收到的报文中包含的指针。
比如,一个报文需要使用域名
F.ISI.ARPA,FOO.F.ISI.ARPA,ARPA,以及根。忽略报文中的其他字段,应该编码为:
偏移20的是域名
F.ISI.ARPA。域名FOO.F.ISI.ARPA偏移40;这样表示FOO的label后面跟着一个指向之前
F.ISI.ARPA的指针。域名ARPA偏移64,使用一个指针指向
F.ISI.ARPA的ARPA。注意可以用这个指针是因为ARPA是从偏移位置20开始的labels序列中的最后一个label。根域名在位置92定义为一个
0,没有labels。
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。