IPV6地址分类
主要分为三类: Unicast、Multicast、Anycast
1、Multicast和Anycast都将一个IP地址分配给多个接口,Multicast中所有接口都能收到发往这个IP的包,Anycast只有路由算法计算最近的接口可以收到。
2、Anycast和Unicast共用一个地址空间,从地址表现上一样。
一、Unicast地址
Unicast地址译为"单播地址",可以理解为"点对点"的网络通信,维基中的解释为"每次只有两个实体相互通信,发送端和接收端都是唯一确定的"。一个Unicast地址通常代表一个网络接口(网卡)。
1、自动获取Interface ID的方法
1.1 根据网卡的MAC地址生成Interface ID
Windows XP, Windows Server 2003及大多数Linux发行版都采用这种方式生成Interface ID。
MAC地址共48位,前24位表示厂商代号,后24位为网卡编号。要转成IPv6 Interface ID,首先将这两个24位断开,插入0xFF, 0xFE两个字节,这样也就转成EUI-64地址,然后将EUI-64地址的第7bit换成1(具体步骤请参看下图)。这是因为由于在标准的IEEE 802网卡中,如果该位为0,则表示该地址受IEEE管辖。
EUI-64 Interface ID from MAC address |
---|
| 24 bits | 24 bits | +----------------------------+----------------------------+ Mac | Organization Unique ID | NIC Specific | +----------------------------+----------------------------+ Mac | xxxxxx00 xxxxxxxx xxxxxxxx | xxxxxxxx xxxxxxxx xxxxxxxx | +----------------------------+----------------------------+ / /\ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ | | 0xFF 0xFE | | +----------------------------+-----------------+----------------------------+ | 24 bits | 16 bits | 24 bits | +----------------------------+-----------------+----------------------------+ | xxxxxx00 xxxxxxxx xxxxxxxx |11111111 11111110| xxxxxxxx xxxxxxxx xxxxxxxx | +-------|--------------------+-----------------+----------------------------+ ↓ (bit7 to 1) | xxxxxx10 xxxxxxxx xxxxxxxx |11111111 11111110| xxxxxxxx xxxxxxxx xxxxxxxx | +----------------------------+-----------------+----------------------------+ |
例如,假设有一网卡MAC地址为00-15-C5-52-CA-9E,现将其转换成Interface ID:
Example: EUI-64 Interface ID from MAC address |
---|
| 24 bits | 24 bits | +----------------------------+----------------------------+ Mac | Organization Unique ID | NIC Specific | +----------------------------+----------------------------+ Mac | 00000000 00010101 11000101 | 01010010 11001010 10011110 | +----------------------------+----------------------------+ / /\ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ / / \ \ | | 0xFF 0xFE | | +----------------------------+-----------------+----------------------------+ | 24 bits | 16 bits | 24 bits | +----------------------------+-----------------+----------------------------+ | 00000000 00010101 11000101 |11111111 11111110| 01010010 11001010 10011110 | +-------|--------------------+-----------------+----------------------------+ ↓ (bit7 to 1) | 00000010 00010101 11000101 |11111111 11111110| 01010010 11001010 10011110 | +----------------------------+-----------------+----------------------------+ IPv6 Interface ID Hex String: 0215:C5FF:FE52:CA9E |
1.2 随机生成Interface ID(temporary address)
出于安全考虑,Windows Vista及之后的Windows系统都默认采用随机生成方式产生Interface ID,而不是用EUI-64,可以通过以下命令禁用随机数生成Interface ID:
netsh interface ipv6 set global randomizeidentifiers=disabled
你还可以通过以下命令查看当前系统是以何方式生成的:
netsh interface ipv6 show global
由于Global unicast地址、Link-local地址、Site-local地址以及Unique-local地址这四种类型的IPv6地址由Interface ID决定地址的唯一性,首先讨论这三类IPv6地址
2、Unicast地址(单播地址)的分类
单播地址由前缀(Prefix)和Interface ID组成,如下图:
Unicast address |
---|
| 64 bits | 64 bits | +-------------------------------+--------------------------------+ | Prefix | Interface ID | +-------------------------------+--------------------------------+ |
前缀决定了不同类型的单播地址,主要有五种类型:
- Global unicast地址(全局单点广播地址)
- Link-local地址(FE80::/64)
- Site-local地址(FEC0::/10)【已弃用】
- Unique-local地址(FC00::/7)
- 特殊地址(Special IPv6 Address)
- 兼容地址(Compatibility Address)
这些类型的地址在Interface ID确定的情况下就被唯一确定,对应地,它们唯一确定一个网络接口或者主机(但是有时候可以让几块网卡得到相同的IPv6地址)。
2.1 Global unicast地址(全局单点广播地址)
Global unicast address |
---|
| 48 bits | 16 bits | 64 bits | +---+-------------------+-----------+----------------------------+ | 3 | 45 bits | 16 bits | 64 bits | +---+-------------------+-----------+----------------------------+ |001| Global Routing ID | Subnet ID | Interface ID | +---+-------------------+-----------+----------------------------+ |
- Global unicast地址相当于IPv4的Public IP
- Global unicast地址可以接入Internet,并可以被路由
- Global unicast地址具有4个字段:
- 001:Global unicast地址的前缀(2000::/3)
- Global Routing ID:站点(Site)路由前缀(相当于IPv4的Network ID),站点可以是一个网络公司
- Subnet ID:表示站点内的子网,最多可以有2^16=65536个子网
- Interface ID:表示子网内的网络接口(相当于IPv4的Host ID)
2.Link-local地址(FE80::/64)
Link local address |
---|
| 10 bits | 54 bits | 64 bits | +------------+------------------+--------------------------------+ |1111 1110 10| 000 ... 000 | Interface ID | +------------+------------------+--------------------------------+ |
- 拥有Link-local地址的节点可以与同一链路(link)上的相邻节点通信
- Link-local地址以FE80开头,前缀为FE80::/64
- Link-local地址只能在本地链路使用,不能在子网间路由
- IPv6协议下,每个网络接口都需要分配一个Link-local地址,即使该接口已经分配了可路由的IPv6地址
3.Site-local地址(FEC0::/10)【已弃用】
2004年9月的RFC 3879已经不建议在新建的IPv6网络中使用Site-local地址,但是现有的IPv6环境仍可继续使用。Site-local由Unique-local地址取代,见下一节。
Site local address |
---|
| 10 bits | 38 bits | 16 bits | 64 bits | +------------+----------+-----------+----------------------------+ |1111 1110 11| 00 .. 00 | Subnet ID | Interface ID | +------------+----------+-----------+----------------------------+ |
- Link-local地址以FEC0开头,前缀为FEC0::/10
- Site-local地址(相当于IPv4的Private IP)
- Site-local地址用于与同一站点内的其他节点进行通信
- IPv6路由器根据Subnet ID判断如何处理数据包
- 含有Site-local地址的数据包不能在站点间路由,仅能在子网间路由
- Site-local地址必须由DHCPv6服务器进行配置
4. Unique-local地址(FC00::/7)
2005年10月,RFC 4193发布,保留地址块fc00::/7用作IPv6专用网络(Private Network),并定义其为unique local addresses(唯一区域地址, ULA)。fc00::/7被划分为两个/8组:
Unique local address: fd00::/8 group |
---|
| 8 bits | 40 bits | 16 bits | 64 bits | +-----------+-------------+-----------+--------------------------+ | 1111 1101 | Random bits | Subnet ID | Interface ID | +-----------+-------------+-----------+--------------------------+ | 48-bit routing prefix | 65536 | |
- fc00::/8 – 尚未定义
- fd00::/8
- 地址格式 fd00::/8
- 特点:随机生成40位随机二进制,与fd00::/8组合成fd??:????:????::/48
5.特殊地址(Special IPv6 Address)
在Unicast单播框架下,有以下两个特殊地址:
- 未分配地址(Unspecified address)
- 地址格式 ::或者0:0:0:0:0:0:0:0
- 特点:Interface ID全为0
- 环回地址(Loopback Address)
- 地址格式 ::1或者0:0:0:0:0:0:0:1
- 特点:Interface ID为1
6.兼容地址(Compatibility Address)
为了从IPv4时代向IPv6时代过渡,产生了很多IPv6向IPv4网络兼容的过渡地址。这些地址也符合Unicast的特性,即可以确定唯一网卡或主机。
为使现有网络能从IPv4平滑过渡到IPv6,需要用到一些IPv6转换机制。如下是一些较为流行的一些IPv6兼容地址,这些地址能够在特定转化机制下,在IPv4网络中使用:
a) IPv4-mapped IPv6 addresses
-
地址格式 ::ffff:w.x.y.z
b) ISATAP(Intra-Site Automatic Tunnel Addressing Protocal)地址
-
地址格式 ::0:5EFE:w.x.y.z
-
任何一个可以用在unicast地址的64位前缀,都可以用作ISATAP地址的前缀
-
例如Link-local地址(FE80::/64),则有Link-local ISATAP地址FE80::5EFE:w.x.y.z
-
实现:Windows XP, Windows Vista, Windows 7, Windows Mobile, Linux
c) 6over4地址
-
地址格式 ::wwxx:yyzz 其中ww,xx,yy,zz都是十六进制
-
任何一个可以用在unicast地址的64位前缀,都可以用作6over4地址的前缀
-
例如Link-local地址(FE80::/64),则有Link-local 6over4地址FE80::wwxx.yyzz
-
局限:6over4需要IPv4多播支持
d)Teredo地址
-
地址格式 2001::/32
-
Teredo地址属于Global Unicast地址
-
Teredo协议将IPv6数据包封装成IPv4 UDP包,这些数据包被转发到Teredo中继上
-
Teredo中继(连接到IPv6网络的Teredo节点)接收、解封这些数据包,并发送到IPv6网络上
-
局限:Teredo对NAT支持不佳
e)6to4地址
-
地址格式 2002:wwxx:yyzz::/48 其中ww,xx,yy,zz都是十六进制
-
6to4地址属于Global Unicast地址
-
IPv4地址包含在IPv6地址前缀中
-
和Teredo类似,6to4需要中继服务器
地址转换示例:
IPv4 dec: 192 . 0 . 2 . 4
IPv4 hex: C0 . 0 . 2 . 4
IPv4 hex: C000 0204
IPv6 pre:2002:C000:0204::/48
f) IPv4-compatible地址【已弃用】
-
地址格式 ::w.x.y.z
二、Multicast地址(多播/组播地址)
Multicast address |
---|
| 8 bits | 4 bits | 4 bits | 112 bits | +---------+---------+---------+----------------------------------+ |1111 1111| Flags | Scope | Group ID | +---------+---------+---------+----------------------------------+ |
Multicast地址的具有以下特征:
- 多个节点可以加入到同一Multicast组内
- 这些节点可以通过共同的Multicast地址监听Multicast请求
- 一个节点也可以加入多个Multicast组
- 一个节点可以同时通过多个Multicast地址监听Multicast请求
Multicast地址的结构:
- Multicast地址前缀为FF00::/8
- Flags目前有以下两个值:
- 0000:表示该Multicast地址由IANA组织固定分配,是Well-known Multicast地址(见下节)
- 0001:表示该Multicast地址尚未被IANA固定分配,是临时Multicast地址
- Scope表示路由范围:
- 1 – Interface-local Scope
- 2 – Link-local Scope
- 5 – Site-local Scope
- Group ID用来标识此组的唯一标识
1.Well-known Multicast地址
Address | Description |
---|---|
ff01::1 | Interface-local scope all-nodes multicast address |
ff01::2 | Interface-local scope all-routers multicast address |
ff02::1 | All nodes on the local network segment |
ff02::2 | All routers on the local network segment |
ff02::5 | OSPFv3 AllSPF routers |
ff02::6 | OSPFv3 AllDR routers |
ff02::9 | RIP routers |
ff02::a | EIGRP routers |
ff02::d | PIM routers |
ff02::16 | MLDv2 reports (defined in RFC 3810) |
ff02::1:2 | All DHCP servers and relay agents on the local network site (defined in RFC3315) |
ff05::1:3 | All DHCP servers on the local network site (defined in RFC 3315) |
ff05::2 | Site-local scope all-routers multicast address |
ff0x::fb | Multicast DNS |
ff0x::101 | Network Time Protocol |
ff0x::108 | Network Information Service |
ff0x::114 | Used for experiments |
2.Solicited-node multicast地址
IPv4通过ARP广播询问目标主机的MAC地址,但是在IPv6网络中,通过将Solicited-node multicast地址与IPv6 Neighbor Discovery协议相结合,能够有效减少广播范围。Solicited-Node multicast address由前缀FF02:0:0:0:0:1:FF00::/104及Unicast地址或Anycast地址的最后24位产生:
Unicast Address to Solicited-Node multicast address |
---|
| 64 bits | 64 bits | +-------------------------------+--------------------------------+ | Unicast Prefix | Interface ID | +-------------------------------+----------------------+---------+ ↓ 24 bits ↓ +------------------------------------------------------+---------+ | FF02:0:0:0:0:1:FF | | +------------------------------------------------------+---------+ |
下面介绍一下IPv6主机获得目标IPv6主机MAC地址的大致过程,以供参考。
在IPv6中,首先构造和对方IPv6地址相关的Solicited-node Multicast地址,以下是一个典型的转换过程:
Example: Unicast Address to Solicited-Node multicast address |
---|
fe80::2aa:ff:fe28:9c5a Target address (compressed notation) fe80:0000:0000:0000:02aa:00ff:fe28:9c5a Target address (uncompressed notation) -- ---- the last 24-bits ff02::1:ff00:0000/104 Solicited-node Multicast Address prefix ff02:0000:0000:0000:0000:0001:ff00:0000/104 (uncompressed) ---- ---- ---- ---- ---- ---- -- The first 104 bits ff02:0000:0000:0000:0000:0001:ff28:9c5a Result ff02::1:ff28:9c5a Result (compressed notation) |
然后,再将“Neighbor Solicitation packet”发送给这个地址,具有目标IPv6单播地址的主机一直监听自己所在的Solicited-Node multicast组,以回应自己的物理地址。
注意事项:
- Solicited-Node multicast address仅在本地链路有效
- 每个网络接口至少有一个Solicited-Node multicast地址
- 具有IPv6单播地址的主机一直监听自己所在的Solicited-Node multicast组
- 主机试图获得Unicast或者Anycast地址的物理地址时,才需要加入Solicited-Node multicast组
- Solicited-Node multicast地址被用于"邻居发现协议"中,以获得其他Solicited-node的链路层地址
三.Anycast地址(任播地址)
IPv6中,Anycast指一个发送方同最近的一组接收方之间的通信。Anycast地址具有以下特点:
- Anycast地址语义上与Unicast地址没有差别, 只是Anycast强调一组接口。
- 发到Anycast地址的数据包仅发送到(路由距离)最近的Anycast节点(不是所有节点)
- Anycast地址只能用于数据包的目的地址,不能作为主动发起的源地址
预定义的任播地址: Subnet-Router anycast address: 当移动主机需要与网段中的一个agent工作时使用
| n bits | 128-n bits | +------------------------------------------------+----------------+ | subnet prefix | 00000000000000 | +------------------------------------------------+----------------+