IPv6: Unicast 单播地址的组成与分类
一、Unicast地址的组成
Unicast地址译为“单播地址”,可以理解为“点对点”的网络通信,Wikipedia中是这样解释的“每次只有两个实体相互通信,发送端和接收端都是唯一确定的”。一个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地址)。
二、自动获取Interface ID的方法
1.根据网卡的MAC地址生成Interface ID
Windows XP, Windows Server 2003及大多数Linux发行版都采用这种方式生成Interface ID。Lesca将详细介绍这种方法。
大家知道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 |
容易发现,和原MAC地址相比,中间两字节是0xFF, 0xFE。
2.随机生成Interface ID
出于安全考虑,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地址:
三、Unicast地址(单播地址)的分类
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组:
- fc00::/8 – 尚未定义
- fd00::/8
- 地址格式 fd00::/8
- 特点:随机生成40位随机二进制,与fd00::/8组合成fd??:????:????::/48
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 | |
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
另外,还有一些特殊地址是不在Unicast范围中的,如:
- 多播地址(Multicast address)
- 地址格式 ff00::/8
- 特点:一个地址代表多个网络接口
在此指出这些地址,希望读者能够事先区分,以免混淆!
6.兼容地址(Compatibility Address)
为了从IPv4时代向IPv6时代过渡,产生了很多IPv6向IPv4网络兼容的过渡地址。这些地址也符合Unicast的特性,即可以确定唯一网卡或主机。这会在Lesca博客中的另一篇探讨:请参看《IPv6兼容地址》一文。
References:
[1] 戴友炜,Windows Server 2008 R2安装于管理,清华大学出版社
[2] Link-local address
[3] IPv6(English Version)
[4] IPv6(中文版)
[5] Unicast
[6] Unique local address