巨大的IPv6地址空间保证阿猫阿狗都有唯一地址
IPv6的最主要动机就是满足全球唯一地址的需求。IPv6网络地址位数是IPv4的四倍,一个是32位,一个是128位。IPv6可以提供这颗行星上面每一个网络设备唯一的地址。因为是全球唯一,IPv6地址使得网络设备的全球可达性和端到端安全变得可能,该功能对某些应用和服务很关键。此外,IPv6地址空间的灵活性减少了对私有地址和NAT的需求;因此,IPv6使得新的应用协议不需要边缘路由器进行特殊处理。
IPv6地址格式
IPv6地址使用一系列16位十六进制字段,并用冒号分开的格式:x:x:x:x:x:x:x:x。下面是两个IPv6地址的例子:
2001:DB8:7654:3210:FEDC:BA98:7654:3210
2001:DB8:0:0:8:800:200C:417A
在IPv6地址中包含连续为零的十六进制字段是很常见的。为了使IPv6地址看起来不那么闹心,两个冒号(::)可以用来在一个IPv6地址的开头,中间和结尾压缩连续为零的十六进制字段。两个冒号可以用来作为IPv6地址变量的一部分,当连续的十六进制字段表示为零时。你可以在每个端口配置多个IPv6地址,但是只能有一个本地链接地址。注意:两个冒号(::)只能在IPv6地址中使用一次,且表示最长的连续为零十六进制字段。IPv6地址的十六进制字母无大小写区分。
IPv6 地址类型 | 首选格式 | 压缩格式 |
单播 | 2001:0:0:0:DB8:800:200C:417A | 2001::DB8:800:200C:417A |
多播 | FF01:0:0:0:0:0:0:101 | FF01::101 |
本地环路 | 0:0:0:0:0:0:0:1 | ::1 |
未定 | 0:0:0:0:0:0:0:0 | :: |
本地环路地址用来让一个节点发送IPv6数据包给自己,且和IPv4的本地环路地址127.0.0.0功能相当,无论什么时候都不要忘记自己。未定地址表示IPv6地址的缺失。比如一个IPv6网络的新初始化节点可以使用未定地址作为源地址发送数据包直到它收到IPv6地址为止。
一个IPv6地址前缀,格式IPv6前缀/前缀长度,用来表示整个地址空间。2001:DB8:8086:6502::/32。
IPv6地址类型:单播
一个IPv6单播地址就是一个节点单一接口的标识符。一个数据包发送到一个单播地址就是发送到有那个地址标识的端口。IPv6单播地址类型有四类:
1. 聚合全球地址
聚合全球地址是一个具有聚合全球单播前缀的IPv6地址。聚合全球单播地址采用了严格的路由前缀聚合结合,限制了全球路由表里面的路由条数。聚合全球地址用在通过组织聚合到ISP的连接上。
聚合全球IPv6地址通过一个全球路由前缀,子网ID和接口(主机部分)ID定义。除了由000开头的地址,所有的全球单播地址都有64位接口ID。IPv6全球单播地址分配使用了以001开头范围的地址(2000::/3)
带有2000::/3(001)和E000::/3(111)前缀的地址需要在扩展通用标识符(EUI)-64格式中有64位接口标识符。IANA在2000::/16范围中分配IPv6地址给地区注册机构。
聚合全球地址一般包括48位全球路由前缀和16位子网ID或者站级聚合器(SLA)。在IPv6聚合全球单播地址格式文件(RFC 2374)中,全球路由前缀包括另外两个等级结构字段叫做顶级聚合器(TLA)和次级聚合器(NLA)。因为这两个东西过时了,不再重复。
16位的子网字段叫做子网ID,可以让个人组织创建它们自己的本地地址等级和识别子网。子网ID和IPv4里面的子网ID类似,除了一个带IPv6子网ID的组织可以支持多达65535个人子网外.
接口ID用来识别链路中的端口。端口相对链路来说必须是唯一的。在许多情况下,接口ID可能会跟一个接口链路层地址一样或则基于它。聚合全球单播地址和其他IPv6地址类型中的的接口ID必须是64位。
IEEE EUI-64 地址代表网络接口寻址的新标准。公司 ID 仍然是 24 位长度,但扩展 ID 是 40 位,从而为网络适配器制造商创建了更大的地址空间。EUI-64 地址使用 U/L 和 I/G 位的方式与 IEEE 802 地址相同。
接口ID在修改后的EUI-64格式中,用下列方式之一建造:
1. 在所有的IEEE 802接口类型中(比如因特网和FDDI接口),前三位字节(24位)从采用MAC地址里面的OUI部分,第四五位采用固定值FFFE,最后三位字节使用MAC地址后半部分。设置U/L比特值(第一个字节第七比特)为0或者1.0表示本地管理标识符,1表示全球唯一IPv6接口标识符。
2. 其他接口类型(比如,串口,本地环路,ATM,帧中继和隧道接口类型---除了IPv6 overlay隧道外),接口ID和IEEE 802形成方式一样。
3. 隧道接口类型,接口ID是使用隧道接口IPv4地址,所有的高32位全部为0。
如果非IEEE接口类型在路由器中使用,本地链路IPv6地址在路由器接口生产顺序如下:
1. 路由器咨询MAC地址。
2. 如果路由器中没有MAC地址可用,路由器序列号用来形成本地链路地址。
3. 如果路由器序列号不能用来形成本地链路地址,路由器会用消息文摘算法5(MD5)来通过路由器主机名来决定路由器MAC地址。
2. 本地链路地址
本地链路地址是一个IPv6单播地址,可以通过本地链路前缀FE80::/10和EUI-64格式的接口标识符在任何端口上自动配置。本地链路地址用在邻居发现协议和无状态自动配置过程中。在一个本地链路上的节点可以使用本地链路地址来通信,不需要使用全球唯一地址通信。
3. IPv4兼容IPv6地址
兼容IPv4的IPv6地址是一个IPv6单播地址,高96位为0,低32位为IPv4地址。兼容IPv4地址的IPv6地址格式如::A.B.C.D。
4. 唯一本地地址
唯一本地地址是一个IPv6单播地址,全球唯一,用来本地通信。不能在广域网上面路由,只能在一个限定区域路由。