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