[转载]DNS中的二进制标记
信息来源:邪恶八进制信息安全团队([url]www.eviloctal.com[/url])1. 介绍
本文定义一个位串标记,它可以出现在域名中,新标记类型代表位标记用于在域名树的二进制名中保存资源记录。
2. 产生动机
当底层名字空间表示为二进制是自然的,那么二进制标记可以地高效解决存储数据和在任意边界确定权限的问题。
3. 标记格式
256个一位标记可以组成一个位串标记,在位串标记中最高位优先,这与DNS的优先级相反,DNS中范围最小的(优先级最优的)在最高位。对于二进制来说,这种表示最为自然。相继的位串标记中,先出现的位串优先级低于后出现的,这与ASCII编码类似。
3.1. 编码
[attach]2510[/attach]
ELT: 000001,指定到位串标记的六位扩展标记类型;
Count: 在标记域中的有意义的位的数目,0代表256个位都有意义,因此空标记代表DNS根不能表示为位串标记;
Label: 位串代表一系列一位标记,最高位优先。也就是说,在上面17位置的的一位标记代表在一位标记6位表示的域的子域,依次类推。标记域最右边不足一个字节的地方以0填充,接收方在接收时忽略。
许多位可以分为多个位串标记,但分点没有意义,不需要保留。智能主机利用分隔对它进行压缩,普通主机可以利用分隔对标记加以归类。
3.2. 文本表示
位串标记以文本表示,例如<bit-spec>由"\["和"]"在前后进行标记。<bit-spec>是一个标记块或一个基标记和与基相应的数字序列,序列后面可以跟长度。基标记是"b","o"和"x"表示2,8和16。长度表示有意义的位数,在标记块后它必须在1到32之间,在其它形式后它必须在1到256之间。
bit-string-label = "\[" bit-spec "]"
bit-spec = bit-data [ "/" length ]
/ dotted-quad [ "/" slength ]
bit-data = "x" 1*64HEXDIG
/ "o" 1*86OCTDIG
/ "b" 1*256BIT
dotted-quad = decbyte "." decbyte "." decbyte "." decbyte
decbyte = 1*3DIGIT
length = NZDIGIT *2DIGIT
slength = NZDIGIT [ DIGIT ]
OCTDIG = %x30-37
NZDIGIT = %x31-39
如果存在<length>,在<bit-data>中的数字数必须足够包括由<length>指定的有效位数。如果在最后的16位或8位中有无意义位,它们必须为0。<dotted-quad>通常有4部分,即使相关的<slength>少于24,但是和其它形式一样,无意义位必须是0。由<decbyte>表示的数必须在0到255之间。由<length>表示的数必须在1到256之间,而<slength>必须在1到32之间。在文本形式的位串标记由机器产生时,长度必须是显式的。
3.2.1. 例子
下面4种形式表示同一个位串标记:
\[b11010000011101]
\[o64072/14]
\[xd074/14]
\[208.116.0.0/14]
下面两个表示相继的位串标记,它们表示在DNS树中相同的相关点。它的意义和上面的几中形式表示的意义相同,请注意,它们是相继的,所以前面的位串标记优先级低,而后面的位串标记优先级高,所以上面几个式子和下面的这个标记是相同的。
\[b11101].\[o640]
3.3. 标记表示与排序顺序
二进制标记有在组成多个位串标记时一定的灵活性。对于产生和检查信号记录,二进制标记必须以一种可预测的形式出现。这种标记形式有最少的位串标记,而且以这种形式产生的相继位串标记长度最小。标记形式的排序方法如下:排序仍然是根据标记的,从最高位开始,任何一位标记排在标记标记前,0排在1前。下面就是一个正确的排列:
foo.example
\[b1].foo.example
\[b100].foo.example
\[b101].foo.example
bravo.\[b10].foo.example
alpha.foo.example
4. 处理规则
一位标记不和其它类型标记匹配。特定的,由文本表示的DNS标记不能和由数表示的一位标记匹配。
页:
[1]