IPV6
地
址
表
示
法
读者一定已经了解32位的IPv4地址的表示方式了,IPv4地 址被分割为4个 8位段,其中每个8位段的数字大小在0~255之间,并且每个8位段之间使用英文符号句点“.” 来分开,因此有时也使用术语“点分十进制表示法”来专指IPv4地址的这种表示法。
而128位的IPv6地址则被分割成8个16位段来表示,其中每个16位段书写为大小在0x0000~0xFFFF之间的十六进制的数宇表示,并且每个16位段之问使用英文符号冒号“ ∶ ”来分开。例如下面就是一个IPv6地址的书写方式:
3ffe∶1944∶0100∶000a∶0000∶00bc∶ 2500∶0d0b
要想记住更多一些像这样表示的地址实际上是几乎不可能的,当然书写这些地址也不是一件令人愉快的事情。幸运地是有两条规则可以用来简化Pvb地 址书写的大小。
第一条规则是:任何一个16位段中起始的0不必写出来;任何一个16位段如果少于4个十六进制的数字,就认为忽略书写的数字是起始的0。
在前面提到的地址例子中,第 3、4、5、6和 8个分段都包含有起始的0。利用这个地址压缩简化规则,该 地址可以书写为:3ffe∶ 1944∶ 100∶ a∶ 0∶ bc∶ 2500∶ d0b。这里要注意的是,只有起始的0才可以被忽略掉;末 尾的0是不能忽略的,因为这样做会使16位分段变得不确定,你无法确切地判断所省略的0是在所写的数字之前还是在其之后。另外,还有一个值得注意的地方是,上述的地址例子中的第5个分段全部是0,并且被书写为单个0。事实上,有 许多IPv6地 址中具有—长串的0。举例如下:
ff02∶0000∶0000∶0000∶0000∶0000∶0000∶0005
这个地址可以简写为以下形式:
ff02∶0∶ 0∶ 0∶ 0∶ 0∶ 0∶ 5
然而,利用第二个规则可以进一步地简化这个地址的书写格式:任何由全0组成的1个或多个16位段的单个连续的字符串 都可以用一个双冒号“::” 来表示。
利用这条规则,上面例子中的地址可以表示成如下格式:ff02∷5。使用这样的方式书写上面这样的地址显然可以增加很多便利。但是在这里要注意的是,这条规则强调的是仅仅对于单个连续不间断的全 0字符串分段部分能够用一个双冒号 “::”来表示,在一个IPv6地址中使用多于—个以上的双冒号会引起含混不清。 下面举一个这样的
地址例子作为说明:
2001∶0d02∶0000∶0000∶0014∶0000∶0000∶0095
对于上面这个地址,以 下两种地址的缩写方式都被认为是正确的,因 为它们都只使用了 一次双冒号:
2001∶d02∷14∶ 0∶ 0∶ 95
2001∶d02∶ 0∶ 0∶ 14∷95
但是,请读者注意,下 面这个缩写方式是不正确的,因 为它使用了两次双冒号:
2001∶d02∷ 14∷95
之所以认为上面这个缩写方式是错误的,是 因为它中间的两个全0字符串的长度是含混不清的,从而无法确定它们的长度:它可以表示成下面的任何一种可能的IPv6地 址:
2001∶0d02∶0000∶0000∶0014∶0000∶0000∶0095
2001∶0d02∶0000∶0000∶0000∶0014∶0000∶0095
2001∶0d02∶0000∶0014:0000∶ (XXX)∶ 0000∶0095
不像IPv4协议的前缀 (即地址的网络部分)可以通过点分十进制或十六进制地址掩码标识,或可以通过位计数 (bitcount)来标识,IPv6协议的前缀始终通过位计数的方式来标识。更确切地说,通过在IPv6地址后面加—个斜线 “ /” ,随 后再跟一个十进制的数字来标识一个IPv6地址的起始位有多少位是前缀位。举一个例子,下面这个地址的前缀就是起始的64位:3ffe∶1944∶100∶ a∷bc∶ 2500∶d0b/64。当读者需要书写一个IP地址的前缀时,也使用和IP叫地址一样的书写方式将所有的主机位设置为0。例如:
3ffe∶1944∶100∶ a∷/64
—个由全0组 成的IPv6地 址能够被简单地写成—个双冒号。 在本书中,存在两种实例使用了全0的地址。 第—个实例就是缺省地址,这将在第 12章 中讨论,在那里缺省地址表示为全 0的 形式,并且它的前缀长度也是0:
∷/0
第二个使用全0的 IPv6地 址的实例是未指定地址 (unspecified address)。未指定地址使用在某些邻居发现协议过程中,邻居发现协议将在本章后面的章节中讲述。一个未指定地址就像—个填充器,用来标识一个还未确定的实际IPv6地 址。在书写一个未指定地址的时候要注意,它与缺省地址的书写方式是有区别的,它们的前缀长度不同:∷/128。