之前在公众号写的文章补档
据称,11 月 26 日,负责英国、欧洲、中东和部分中亚地区互联网资源分配的欧洲网络协调中心宣布,全球所有 43 亿个 IPv4 地址已全部分配完毕。意味着再也没有新接入的互联网设备在也无法分配到新的 IP 地址。在目前的形势下,利益相关的同学们第一反应会想到什么呢?是提高 IP 地址利用率的无类域间路由还是为 IPv4 续命立下汗马功劳的 NAT 技术?
不得不说,靠 IPv4 协议也就图个乐呵,想要彻底解决地址分配问题还得看我 IPv6 协议
今天由于篇幅有限,主要专注于 IPv6 的地址解析
IPv6 的优势#
- 地址空间大,理论上存在 2^128 个地址,几乎不用担心地址短缺问题
- 减少路由表大小,路由器处理报文性能提高
- 安全性得到提高
- 服务质量好,服务类型扩展灵活丰富
- 支持可移动主机和网络
- 兼容性强,可完全向下兼容 IPv4
- ...
IPv6 地址#
IPv6 地址的 128 位地址被分成 8 段,每 16 位一段,分别被转成 4 位十六进制数这种表示方法称之为 “冒号十六进制表示法”。
地址格式:
X:X:X:X:X:X:X
压缩表示
-
地址中包含的连续两个或多个均为 0 的组,可以用双冒号 “::” 来代替。
如
FC00:0:130F:0:0:9C0:876A:130B
可写作FC00:0:130F::9C0:876A:130B
注意:
-
::
代表的 0 位数必须最大化;错误示例:
FC00:0:130F:0:0:9C0:876A:130B
不能写作FC00:0:130F::0:9C0:876A:130B
-
不能只代表一个全 0 段;
错误示例:
FC00:1:130F:0:1:9C0:876A:130B
不能写作FC00:1:130F::1:9C0:876A:130B
-
如果多个连续全 0 段长度相同,必须的代表最前面的那个
错误示例:
FC00:0:130F:0:0:9C0:0:0
不能写作FC00:0:130F:0:0:9C0::
-
-
前导 0 可以省略
如
FC00:0000:130F:0000:0000:09C0:876A:130B
可以写作FC00:0:130F:0:0:9C0:876A:130B
地址结构
一个 IPv6 地址可以分为如下两部分:
- 网络前缀:n 比特,相当于 IPv4 地址中的网络 ID
- 接口标识:128-n 比特,相当于 IPv4 地址中的主机 ID
表示形式如FF00::/8
代表地址/前缀长度
接口标识可通过三种方法生成:手工配置、系统通过软件自动生成或 IEEE EUI-64 规范生成。其中,EUI-64 规范自动生成最为常用
地址分类
-
单播地址
一对一
常见的单播地址
-
未指定地址
::/128
该地址可以表示某个接口或者节点还没有 IP 地址,可以作为某些报文的源 IP 地址
-
环回地址
::1/128
就是本地地址
-
全球单播地址:带有全球单播前缀,目前已经分配的全球路由前缀的前 3bit 均为
001
带有全球单播前缀的 IPv6 地址,其作用类似于 IPv4 中的公网地址
-
链路本地地址 :使用了特定的本地链路前缀
FE80::/10
链路本地地址是 IPv6 中的应用范围受限制的地址类型,只能在连接到同一本地链路的节点之间使用
-
唯一本地地址:前缀固定为・
FC00::/7
也是一种应用范围受限的地址,它仅能在一个站点内使用,类似于 IPv4 中的私网地址
-
-
组播地址
IPv6 的组播与 IPv4 相同,用来标识一组接口,一般这些接口属于不同的节点.
IPv6 组播地址的前缀是
FF00::/8
- 标志用来标识组播地址身份
- scop 用来限制组播数据流在网络中发送的范围
- group ID 标识组播组
-
任播地址
任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。主要用来在给多个主机或者节点提供相同服务时提供冗余功能和负载分担功能。
注:IPv6 任播地址仅可以被分配给路由设备,不能应用于主机。任播地址不能作为 IPv6 报文的源地址
整理了一下一个 IPv6 主机上一个接口可以具备的常见 IPv6 地址