Next Previous Contents

3. 地址的类型

3.1 没有前缀的地址

Localhost 地址

这是一个特别为loopback interface(回送界面或环绕)定义的地址, 就像IPv4的 "127.0.0.1" 对于IPv6 localhost address 是:


0000:0000:0000:0000:0000:0000:0000:0001  

或缩减成


::1

这个地址的数据包将它当作host(主机)发送的来源和目标.

未指明的地址

这是一个在IPv4当中表示 "所有" 或"0.0.0.0". 对于IPv6为:


0000:0000:0000:0000:0000:0000:0000:0000 

或者是:


::

这些地址大多 用在/显示 socket 捆绑(到所有IPv6地址)或路由表当中.

注意:未说明的地址不能当成目标地址来使用.

植入了IPv4地址的IPv6地址

它包含了两个地址其中一个为IPv4地址.

IPv4映射IPv6地址

IPv4-only IPv6-compatible 是由IPv6后台产生的有时 用于或显示 sockets . 它只捆绑IPv4地址.

这些地址被定义为拥有长度为96的前缀特殊地址(a.b.c.d 是IPv4地址):


0:0:0:0:0:ffff:a.b.c.d/96

或者使用缩写形式


::ffff:a.b.c.d/96

这些地址也用于自动遂道, 已经被6to4tunneling取代.

3.2 网路部分,也叫做前缀

设计者定义并预留了一部份空间以便于将来遇到像现在这样的需求. RFC 2373 [July 1998] / IP Version 6 Addressing Architecture (http://rfc.net/rfc2373.html) 定义了现在的地址设计, 但已经有了新的草案 (ftp://ftp.ietf.org/internet-drafts/)draft-ietf-ipngwg-addr-arch-*.txt

让我们来看一下不同的前缀定义(和地址类型):

连结本地地址的类型

这些地址不对外界(Internet)连接有效. 以这些地址为目标的数据包不会通过路由器. 这种连结用于以下情形:

它们的地址由以下这些开头("x"是任意的十六进制字符,一般是"0")


fe8x:  <- 目前只有这个在用.
fe9x:
feax:
febx:

一个开头为以上这些前缀的地址, 由IPv6没有在界面指定IP地址的时候创立.

目前只有fe80在使用.

本地站点的地址定义

这些地址和IPv4相似(http://rfc.net/rfc1918.html RFC 1918 / Address Allocation for Private Internets) 它的优势: 只用16bits 就可以定义65536个子网.同IPv4的10.0.0.0/8相似.

另一个优势:在IPv6的界面上可以定义多个IP地址, 在已有本地站点地址的基础上还可以加上一个global(全局)地址.

它们的地址由以下这些开头("x"是任意的十六进制字符,一般是"0")


fecx:  <- 大多数使用这个
fedx:
feex:
fefx:

Global(全局)地址类型 "(Aggregatable) global unicast"可聚合的全局唯一地址.

今天,只有一个全局地址类型的定义(第一个设计,也是多年以来一直使用的叫做 "provider based," RFC 1884 / IP Version 6 Addressing Architecture [obsolete]) 您能在早期的核心源代码中找到一些.

它们的地址由以下这些开头("x"是任意的十六进制字符,一般是"0")


2xxx: 
3xxx:

注意: 前缀"aggregatable" 被当前的草案抛弃了. 下面有一些更有意义的子类型定义:

6bone test addresses

这些是最初定义和使用的全局地址. 它们的开头是


3ffe:

例子


3ffe:ffff:100:f102::1

一个无唯一全局化的特别6bone例子


3ffe:ffff:100:f102::1

这些主要都是例子, 因为如果使用真实的地址,可能会有些人将它拷贝&贴上 到他们自己的配置中去. 从而不注意地复制了全局唯一地址, 这样会导致原来拥有这个地址的主机产生一些问题(比如,请求的回应包不会被发送.) 您可以从这些前缀当中申请一个, 看这里: "如何加入6bone" 也有一些在 tunnel brokers 他们发布用于测试6bone 的地址前缀.

6to4 地址

这些地址是为特别tunneling机制设计的. [RFC 3056 / Connection of IPv6 Domains via IPv4 CloudsRFC 2893 / Transition Mechanisms for IPv6 Hosts and Routers], 给IPv4地址和可能的子网编码并以类似下面的形式开头:


2002:

例子,重新对192.168.1.1/5编码:


2002:c0a8:0101:5::1

这个shell命令将帮助您用一个IPv4地址产生这样的地址:


ipv4="1.2.3.4"; sla="5"; printf "2002:%02x%02x:%02x%02x:%04x::1" `echo $ipv4 | tr "." " "` $sla

参照tunneling using 6to4 and information about 6to4 relay routers.

从分级路由分配到的地址

这些地址分配给Internet服务供商(ISP)并且有类似如下的开头:


2001:

主ISP(拥有骨干网路)的前缀是由local registries分配的, 并且现在他们分配的前缀长度为35.

主ISPs通常分配给下级ISPs的前缀长度为48.

Multicast addresses(多点传送的地址)

Multicast addresses 应用于服务当中.

它们总是有同下面相类似的开头(xx是范围值)


ffxy:

它们有著不同的范围和类型:

Multicast scopes(多点传达送范围)

Multicast scope 是用来定义发送实体的multicast 数据包有效最远传输值的参数.

通常,下面的范围已经被定义:

Multicast(多点传送)类型

许多类型都已经定义/保留(细节请参照 RFC 2373 / IP Version 6 Addressing Architecture). 这里有一些例子:

Solicited node link-local multicast address(本地多播请求的节点地址)

在neighborhood discovery(多播发现)中当成目标地址使用的特别多播地址. 与IPv4不同,ARP(地址解析协议)将不在IPv6中使用.

例子:


ff02::1:ff00:1234

使用前缀表示它是一个本地多播地址, 后缀由目标地址产生. 这个例子当中将有一个数据包发往"fe80::1234", 但是网路堆栈并不知道第二层的MAC(多媒体通路). 它将上部份的104 bits 更改为 "ff02:0:0:0:0:1:ff00::/104" 下部分24 bits 不变. 现在这个地址以on-link(在线)的形式寻找相应的节点(这个节点应当发送了包含有第二层 MAC 地址的回应包)

Anycast addresses(随播地址)

Anycast addresses是一个特别的地址, 它用于邻近的DNS或DHCP服务, 或用于相似的dynamic groups(动态组群). 地址从 unicast address (单播地址aggregatable global or site-local at the moment)空间中取得. 随播地址的机制(从客户端的观点来看)由动态路由协议控制.

注意:随播地址不能成为作为来源地址, 它必须以目标地址的身份出现.

Subnet-router Anycast addresses(子网路随播路由器)

一个Subnet-router Anycast addresses的例子. 假设一个分配了如下IPv6地址的节点:


3ffe:ffff:100:f101:210:a4ff:fee3:9566/64  <- 节点的地址

Subnet-router将使用没有后缀的地址 (least significant 64 bits):


3ffe:ffff:100:f101::/64  <- subnet-router anycast address

3.3 地址类型(主机)

因为自动的配制/随机分配,在当前的地址类型中主机使用更低的 64 bits地址. 因此每个subnet(子网)可以拥有大量的地址.

主机的地址分配可以有如下几种形式:

自动分配(also known as stateless)

在自动分配当中,主机的地址由界面的MAC地址决定. 使用EUI-64方法,指定一个IPv6 地址. 如果没有可用的MAC(如:虚拟设备), 就用其它的代替(如IPv4地址或物理界面的MAC地址)

再看一下前面的例子:


3ffe:ffff:100:f101:210:a4ff:fee3:9566

这里:


210:a4ff:fee3:9566 

主机地址由NIC的MAC地址决定:


00:10:A4:E3:95:66 

IEEE-Tutorial EUI-64 作为EUI-48 的标识符.

自动分配带来的隐私问题

因为自动分配的是唯一地址,客户端在不通过任何代理的情况下容易被跟踪. 这是个公认的问题,它的解决方法是:privacy extension,定义于 RFC 3041 / Privacy Extensions for Stateless Address Autoconfiguration in IPv6 这里也有一个草案: draft-ietf-ipngwg-temp-addresses-*.txt 使用不同的静态数值, 每次产生一个新的后缀. 注意: 只对client 的连接有效, 对于servers 没有什么用处.

手动设定

对于servers来说, 大概很容易记起简单的地址. 同时也可以向它的界面添加一个IPv6地址:


3ffe:ffff:100:f101::1
 

手动设定的后缀为"::1",例子当中最重要的第6 bits设定为"0", 它为anycast addresses(任意传送地址)保留 (the universal/local bit of the automatically generated identifier).

3.4 路由的前缀长度

在早期设计阶级,使用完全分离的路由分级来最大层度地缩小路由表. 论证的方法是使用当前IPv4的核心路由数目(> 104 thousand in May 2001) 减少硬件内存的需求来控制路由表和速度(较少的个数使查找速度加快).

前缀长度(也叫做子网路遮罩)

同IPv4相似, 网路产生可路由的路径. 因为128 bits标准的netmasks 看起来不怎么样. 设计者借鉴了IPv4的风格: Classless Inter Domain Routing (CIDR RFC 1519 / Classless Inter-Domain Routing) 它们是用于IP地址路由的bits号码. 也叫做"/"

例子:


3ffe:ffff:100:1:2:3:4:5/48

它们可以被扩展成:


网路:
3ffe:ffff:0100:0000:0000:0000:0000:0000


子网路遮罩:
ffff:ffff:ffff:0000:0000:0000:0000:0000

Matching a route(路由匹配)

在一般情况下(no QoS), 在路由表里查找一个重要的地址数值意味著路由前缀的长度必须先匹配.

例子, 如果路由表像下面那样(清单未完全例出):


3ffe:ffff:100::/48     ::            U  1 0 0 sit1 
2000::/3               ::192.88.99.1 UG 1 0 0 tun6to4
 

IPv6的目标地址将被下面的设备路由:



3ffe:ffff:100:1:2:3:4:5/48  ->  routed through device sit1
3ffe:ffff:200:1:2:3:4:5/48  ->  routed through device tun6to4


Next Previous Contents