目录
1. IPV6地址简介
- 地址长度:128bit(V4地址只有32bit)
- IP标识方法:IPV6地址以16bit为分界,将每个16bit转换成4个16进制数字,并用冒号分割。
16bit中如果开头为0,则可以压缩掉,但至少保留一个数字0 ;
多个相邻的16bit零,则可以压缩使用双冒号(::)表示,但仅能使用一次::
示例1:
21DA:00D3:0000:2F3B:02AA:00FF:FE28:9C5A
压缩头部0得到: 21DA:D3:0:2F3B:2AA:FF:FE28:9C5A
示例2:
FE80:0:0:0:2AA:FF:FE9A:4CA2
压缩相邻16bit 0得到:FE80::2AA:FF:FE9A:4CA2
- IP:Port标识方法:使用中括号括住V6地址,中括号外冒号跟port号。例如:监听[::]:10086,标识监听全部V6设备地址的10086端口
- CIDR前缀标识法(无类别域间路由选择):IP/prefix,例如:2001:db8:130f::870:0:140b/64,/64标识网络前缀64bit。
需要注意的是,IPV6地址中十六进制数字不区分大小写,RFC 5952建议使用小写,但大写也很常见
2. IPV6地址与分类
- 地址结构
- 网络前缀:128比特中的前n个比特,相当于V4地址的网络ID部分
- 接口地址:128 - n比特,相当于V4地址中的主机ID部分
- 地址分类
- 单播地址
- 组播地址
- 任意播地址
2.1 单播地址
单播地址唯一标识一个网络接口,类似V4地址的单播地址,IPV6要求所有的单播地址的网络前缀必须是64bit,如下图:
单播地址分类如下表格:
地址类型 | 前缀 | 前缀标识 |
全球单播 | 其他 | - |
唯一本地 | 1111110 | fc00::/7 |
链路本地 (Link Local地址) | 1111111010 | fe80::/10 |
此外,环回地址和全零(又称未指定地址)地址也被认作是单播地址。
环回地址:000...1(127bit 0+1bit 1),或表示为:::1/128;
未指定地址:0000..0(128bit 0),或表示为:::/128。
单播地址关系图
- 全球单播地址(Global Unicast):等同于V4的公网地址,跨互联网可达。前64bit中的48bit的运营商路由前缀和本地站点的16bit的子网ID前缀,最后64位是接口ID。全球单播地址真包含本地唯一地址,真包含link local地址。
- 全球路由前缀(global routing prefix)由提供商指定给一个组织机构,通常至少48bit,目前已经分配的全球路由前缀的前3bit都是001。因此地址块为:2000::/3
- 子网ID是组织结构内用子网ID构建本地网络,通常最多分配到64bit
- 接口标识符,用来标识一个网络接口设备
- 唯一本地地址(Unique Local):站点内的地址,用于内部网络的私有网络连接,类比V4的私网地址,例如打印机,内部服务器等,不担心地址冲突问题(地址范围足够大,128 - 48bit)。只在特定的域内有意义,不用于整个互联网路由。与V4私网地址不同的是,即使唯一本地地址只在站点内路由使用,但也是全局范围内地址唯一的。
唯一本地地址可以按照fc00::/7地址块被识别,L位设置为1,该地址时本地分配。RFC 4193保留0,以供未来使用。因此,L位实际将fc00::/7地址块分成两个地址块:
- fc00::/8: 保留未来使用
- fd00::/8: 本地分配的唯一本地地址
Global ID(全局ID)是一个40bit的标识符,确保了地址的全局唯一性,它是伪随机产生的,不必是序列化的(因为ULA不应被全局路由,因而不必汇聚,所以序列化的全局ID是不必要的)。RFC 4193规定了分配40位全局ID的方法。RFC中定义了一种半随机算法,提供 了非常高的全局ID唯一性概率。
子网ID为管理者提供了一个资源,使得在站内可以定义层次化的寻址方案。
接口标识符,对所有单播地址的定义是相同的,符合EUI-64格式。
- 链路本地地址(Link Local地址): link local作为源和目的地址的包不会被路由转发,仅用作同物理链路中的节点通信。“同一物理链路”指同一个广播域下的设备。
关于link local地址:
- 所有使能IPV6的网络接口都会自动配置一个link local单播地址,不同于IPV4,这是强制的;IPV4的链路本地地址时169.254.0.0/16地址块,不会自动配置,也不是强制的
- 同时配置link local和可路由地址时,优先使用可路由地址
- Link local地址可以被软件自动配置,格式为前缀FE80::/10(1111 1110 10)加上网络接口标识符(网卡mac地址),其中网络接口标识符采用EUI-64格式。
- 由于link local地址具有自动配置功能,因而被用作自动地址配置和邻居节点发现协议。在同一物理链路中,系统启动就可以自动通信,不需要全球唯一IP地址。由于link local地址的特殊生成规则,它是唯一的不会产生冲突。
- 使用link local地址的自动配置,IPV6的Neighbor Discovery协议代替了IPV4里面ARP协议,因而避免了ARP攻击。
- 路由器不会转发link local地址的数据包。
将link local地址视为一种便利的工具,让你能够为召开会议而组建临时LAN,或创建小型LAN,这些LAN不与因特网相连,但可以在本地共享文件和服务。
IEEE扩展唯一标识符(EUI-64)格式:
例如:48bit的MAC地址为 1c:34: da :4e:73:b4,将MAC地址划分成两个24bit的部分,然后中间插入16bit的十六进制0xfffe,就产生了EUI-64格式的网络接口ID部分。
MAC地址: 1c:34: da :4e:73:b4
自动配置产生的Link local地址:fe80::1e34:daff:fe4e:73b4
注意:对于接口ID的网络部分,EUI64格式的高位第7位(u位)当设置为0时,定义了一个本地范围,当设置为1时,就定义了一个全局单播地址。
2.2 组播(Multicast)地址
标识属于不同节点的一组接口,类似IPv4的组播地址。发送到组播地址的数据包被传输给此地址所标识的所有接口。IPv6没有广播地址,广播地址的功能均由组播地址来提供(广播流量被证明是太耗费资源)。
2.3 任意播(Anycast)地址
定义为标识一组接口(通常这组接口属于不同的节点),发送给任播地址的数据包被传输给所标识的一组接口中距离源节点最近的一个接口。
- 任播地址不局限于子网路由器任播地址,全球单播地址也可以配置为任播地址
任意播通信模式为一对接收者 中最近的一个(one-to-the-nearest-of-many)。这意味着,在任意播通信模 式中,一个主机可与多个潜在节点中最近的一个节点进行通信。最近是一个相对概念,通常取决于一个路由协议及其相关指标,根据所选标准来决定哪个任意播 地址最近或最佳。
- IPv6任播地址格式和IPv6单播地址相同
- 任播应用
(1) IPv6任播地址的用途之一是用来标识属于同一提供因特网服务的组织的一组路由器。这些地址可在IPv6路由头中作为中间地址,以使报文能够通过特定聚合或聚合顺序发送。另一个用途就是标识特定子网的一组路由器。
(2) 任意播通信的另一个典型示例为DNS查询,需要了解www.xyz. com地址是什么的主机并不关心哪个DNS服务器响应。发出查询的主机被导向拓扑结构上最近的服务器。如果进行响应的DNS服务器离线,则下一个最近的服务器会接受此请求。任意播地址与单播地址无法进行辨别(例如,没有构成任意播地址的确定位)。
3. 总结
地址类型 | 用途 | IPV6地址块 | 类比IPV4地址块 |
单播地址 | 特殊地址-未指定地址 | ::/128 | 0.0.0.0/32 |
特殊地址-环回地址 | ::1/128 | 127.0.0.1/8 | |
全球单播地址 | 2000::/3 | 公网地址 | |
链路本地地址 | fe80::/10 | 169.254.0.0/16 | |
唯一本地地址 | fc00::/7,其中 fc00::/8保留未定义 fd00::/8可以使用 | 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 | |
站点本地地址(已弃用) | fec0::/10 | ||
过渡-IPV4兼容地址(IPV4 Mapped)(已弃用) | ::192.168.1.1 | ||
过渡-IPV4映射地址 | ::ffff:192.168.1.1 | ||
多播地址 | 地址范围 | ff00::/8 | 224.0.0.0/ |