任务三 下一代IP协议——IPv6
知识点
1.为什么需要IPv6?
IPv6 是互联网工程任务组(IETF)设计的、用于替代 IPv4 的下一代 IP 协议。
背景:随着全球互联网快速增长,新的子网和 IP 节点以惊人的增长率接入 Internet,32 位的 IP 地址空间即将用完。IPv4 网络地址严重不足,已经对互联网的快速发展和应用造成极大制约。
IPv6 的意义:
- 具有巨大的地址空间,解决网络地址资源数量不足的困境
- 扫除多场景下设备接入互联网的障碍,为多种设备接入互联网创造条件
2.IPv6有哪些主要特点?
| 特点 | 说明 |
|---|---|
| 更大的地址空间 | IPv6 的地址长度是 128 位,是 IPv4 地址长度的 4 倍。128 位地址空间允许 2 的 128 次方(约 3.4×10 的 38 次方)个不同的地址 |
| 简化的头部格式 | IPv6 的头部格式比 IPv4 简单。如 IPv4 中的检验和、标识、标志和偏移字段在 IPv6 中将不再出现 |
| 流标签 | 为了更好地适应网络传输多媒体信息的需要,IPv6 增加了"流标签" |
| 安全性 | IPv6 支持内置的认证和机密处理,从而有效提高安全性 |
| 更大的分组 | IPv6 通过扩展包头,支持长度超过 64KB 的 IP 分组 |
3.IPv6数据包的格式是怎样的?
IPv6 的数据包格式和 IPv4 有较大不同。IPv6 数据包的基本格式为:IPv6 数据包头(基本头部)+ 扩展数据包头 + 数据部分(上层协议数据)。
设计思路:IPv6 数据包头将原 IPv4 数据包头中所有可选字段移出 IPv6 数据包头,置于扩展数据包头中,并将扩展包头放置在 IP 负载部分。这样处理就简化了 IPv6 数据包头,从而提高路由器的转发效率。
扩展包头的特点:
- 根据数据的实际情况,IPv6 扩展数据包头可以没有,也可以有一个或多个
- 扩展数据包头长度不固定,这种灵活性为将来协议数据的扩充提供了预留空间
4.IPv6基本头部各字段的含义是什么?
| 字段 | 说明 |
|---|---|
| 版本 | 规定了协议的版本号,值为 6,占用的位数和 IPv4 相同(4 位) |
| 业务流类别 | 规定了数据包作为流处理时的优先级别,用来支持一些新的 Internet 服务,如音频和视频流的传输 |
| 流标签 | 用来标记一个数据包的流的特性 |
| 净负载长度 | 说明数据包中数据部分的长度(不包括头部),长度限制为 65 535B;如果数据部分超过 65 535B,则在扩展包头中设置 |
| 下一个头标识 | 紧跟 IPv6 头后的包头类型,如扩展包头(有的话)或某个传输层协议包头(如 TCP、UDP 或 ICMPv6 等) |
| 跳数限制 | 规定了数据包在被路由器丢弃之前可以经过的跳数(作用类似 IPv4 的 TTL) |
| 源 IPv6 地址、目的 IPv6 地址 | 这两个地址均为 128 位 |
注意:IPv6 头部中没有检验和字段,校验工作交由上层协议(TCP、UDP)完成,这也是简化头部、提高转发效率的重要体现。
5.IPv6地址的一般表示方法是什么?
(1)冒号十六进制表示法
128 位的 IPv6 地址的书写格式是按每 16 位用 1 个分界符(英文冒号 :)来分隔,每个 16 位用 4 个二进制数(即 4 位十六进制数)表示,这种表示形式被称为冒号十六进制表示形式。
转换示例:
0011111111111110 0010100100000000 1101000000000101 0000000000000000
0000001010101010 0000000011111111 1111111000101000 1001110001011010
按每 16 位用 1 个分界符分割:
0011111111111110:0010100100000000:1101000000000101:0000000000000000:
0000001010101010:0000000011111111:1111111000101000:1001110001011010
将每个 16 位块转换成十六进制(按每 4 位一个单元转换),相邻的块用英文冒号隔开,结果为:
3FFE:2900:D005:0000:02AA:00FF:FE28:9C5A
6.IPv6地址还有哪些简化表示方法?
(1)删除前导零
可以通过删除每个 16 位块的前导部分的零,对 IPv6 地址的表示形式进行简化;简化时要求每个块必须至少有一个数字。
例如上述地址删除前导零后变成:
3FFE:2900:D005:0:2AA:FF:FE28:9C5A
(2)双冒号法
如果在一个以冒号十六进制数表示的 IPv6 地址中,几个连续 16 位块的值都是 0,那么这些 0 可以简记为 ::,每个地址中只能使用一次 ::。
例如:
2A00::1:B3C5:6E8F:3CD8
(3)内嵌 IPv4 地址表示法
为了实现 IPv4 与 IPv6 互通,有时会将 IPv4 地址嵌入到 IPv6 地址中。此时地址常表示为 X:X:X:X:X:X:d.d.d.d,前边 96 位采用冒号十六进制表示,而最后边的 32 位则使用 IPv4 的点分十进制表示。
例如:::192.168.0.1 与 ::FFFF:192.168.0.1 就是两个典型的例子。
注意:在前边 96 位中,前导零压缩的方法依旧适用。
7.IPv6地址的结构是怎样的?
IPv6 地址由两个部分组成:子网标识(前缀)和接口标识符(接口 ID)。
| 情形 | 结构 | 说明 |
|---|---|---|
| 一般情况(IPv6 网络) | 64 位子网标识 + 64 位接口 ID | 子网标识用来说明一个网络的地址;接口标识符就是节点的 MAC 地址 |
| 与 IPv4 兼容的网络 | 96 位子网标识 + 32 位接口 ID | 接口标识符就是节点的 IPv4 地址 |
重要变化:在 IPv6 中已经没有了子网掩码、网络地址与主机地址的概念,取而代之的是"子网标识"和"接口 ID"。
- 子网标识相当于 IPv4 中子网掩码的概念
- 接口 ID 相当于 IPv4 中的主机地址
前缀长度表示法:例如 2001:1A3B:2234:C8F7::1/64 表示该地址中子网标识长度为 64 位,余下的为接口 ID。
8.IPv6地址分为哪三类?
IPv6 的地址分为三种类型:单播地址、组播地址、任意播地址。
| 类型 | 含义 | 数据包投递方式 |
|---|---|---|
| 单播(Unicast) | 一个单一的接口标识符 | 发送到单播地址的 IPv6 数据包,被传递到由该地址指示的一个接口 |
| 组播(MultiCast) | 一组标识符,组播地址的接口可能属于不同的节点集合 | 发送到组播地址的 IPv6 数据包被传递到多个接口 |
| 任意播(AnyCast) | 一组接口(一般属于不同节点)的标识符 | 发送到任意播地址的数据包,只被最近的接口收到 |
其中单播地址是使用最为广泛的一类地址。
9.单播地址有哪几种类型?
单播地址中包含了多种地址类型:
| 类别 | 名称 | 前缀 | 用途 |
|---|---|---|---|
| 第 1 类 | 全球单播地址(Global Unicast Address) | 前 3 位为 001(首字段十六进制为 2~3) | 在全球的路由器间可以路由 |
| 第 2 类 | 链路本地地址(Link-local Address) | FE80::/10 | 同一链路上的节点间通信,用于自动配置地址和邻居节点发现 |
| 第 3 类 | 本地站点地址(Site-local Address) | FEC0::/10(前缀范围 FEC~FEF) | 同一网络内节点通信,相当于 IPv4 私网地址 |
| 第 4 类 | 唯一本地地址(Unique-local Address) | FC00::/7,常用 FD00::/8 | IPv6 专用网络(私网) |
| 第 5 类 | 其他单播地址 | — | 未指定地址、回送地址、兼容 IPv4 的地址、IPv4 映射地址 |
(1)全球单播地址
单播地址的前 3 位必须为二进制的 001;二进制转换为十六进制需要 4 bit,所以 IPv6 全球单播地址从左到右第一个字段的变化范围为 0010 到 0011,转换为十六进制范围就为 2 到 3。
| 3 位 | 45 位 | 16 位 | 64 位 |
|---|---|---|---|
| 001 | 全球路由 ID | 子网 ID | 接口 ID(MAC 地址) |
(前 3 位 + 45 位 = 48 位全球路由前缀)
例如 2FFE:2900:D005:0:2AA:FF:FE28:9C5A 就是一个单播地址,因为地址首部的十六进制数"2"的二进制编码为 0010,其前三位为 001。
(2)链路本地地址
这种地址的前 10 位固定是 1111 1110 10,即前缀约定为 FE80::/10。此类地址用于同一链路上的节点间通信,主要用于自动配置地址和邻居节点发现过程,路由器不会转发链路本地地址的数据包。
| 10 位 | 54 位 | 64 位 |
|---|---|---|
| 1111 1110 10 | 000…000 | 接口 ID(MAC 地址) |
要点:
- Windows 和 Linux 开启 IPv6 后,默认会给网卡接口自动配置一个链路本地地址
- 一个接口一定有一个链路本地地址;每个接口必须至少有一个链路本地地址
- 每个接口可以配置 1 个以上的单播地址,例如同时配置一个链路本地地址和一个全球单播地址
- 例如
FE80::1就是一个链路本地地址
(3)本地站点地址
这类地址的前 10 位为 1111 1110 11,相当于 IPv4 的私网地址(A 类的 10.0.0.0、B 类的 172.16.0.0、C 类的 192.168.0.0),是 IPv6 定义的、用于解决私网需求的单播地址类型。在安全性和私密性的要求下,IPv6 同样支持私有网络,并且也支持 NAT。
| 10 位 | 38 位 | 16 位 | 64 位 |
|---|---|---|---|
| 1111 1110 11 | 000…000 | 子网号 | 接口 ID(MAC 地址) |
- 前缀范围为 FEC~FEF
- 用于与同一网络内的其他节点进行通信,IPv6 路由器根据子网号判断如何处理数据包
- 这类地址信息可以跨越路由器,但不能在互联网上直接使用
(4)唯一本地地址
前缀为 FC00::/7,用作 IPv6 专用网络。FC00::/7 被划分为两个 /8 组:
FC00::/8— 保留,尚未定义FD00::/8— 特点:随机生成 40 位随机二进制,与FD00::/8组合成FD??:????:????::/48
| 8 位 | 40 位 | 16 位 | 64 位 |
|---|---|---|---|
| 1111 1101 | 随机位 | 子网号 | 接口 ID(MAC 地址) |
(8 位 + 40 位 = 48 位路由前缀)
(5)其他单播地址
| 地址 | 表示 | 说明 |
|---|---|---|
| 未指定地址 | ::(即 0:0:0:0:0:0:0:0) | 当一个主机的有效地址还不能确定时,用它标记该主机。一般发生在向 DHCP 服务器申请地址期间 |
| 回送地址 | ::1 | 用于标识一个回送接口,使一个节点可以给自己发送数据包。相当于 IPv4 的回送地址 127.0.0.1 |
| 兼容 IPv4 的地址 | ::w.x.y.z | w.x.y.z 是 IPv4 地址的点分十进制表示法,用于同时支持 IPv6/IPv4 的节点在使用仅支持 IPv4 的网络上用 IPv6 协议通信 |
| IPv4 映射地址 | ::FFFF:w.x.y.z | 用于将一个仅支持 IPv4 的节点表现为一个 IPv6 的节点 |
10.组播地址的结构和特点是什么?
组播地址也称为"多播地址",是一组标识符,组播地址的接口可能属于不同的节点集合。发送到组播地址的 IPv6 数据包被传递到多个接口。
前缀:组播地址以 FF00::/8(二进制 1111 1111)开始,其中部分地址段为保留的专用地址。
| 8 位 | 4 位 | 4 位 | 112 位 |
|---|---|---|---|
| 1111 1111 | 标志 | 范围 | 组 ID |
组播地址的特征:
- 多个节点可以加入同一组播组内
- 这些节点可以通过共同的组播地址监听组播请求
- 一个节点也可以加入多个组播组
- 一个节点可以同时通过多个组播地址监听组播请求
(1)"标志"字段(4 位)
| 值 | 含义 |
|---|---|
0000 | 表示该组播地址由 IANA(互联网数字分配机构)固定分配,是预定义的组播地址 |
0001 | 表示该组播地址尚未被 IANA 分配,是临时的组播地址 |
(2)"范围"字段(4 位)表示路由范围
| 值 | 范围 |
|---|---|
| 1 | 本地接口范围 |
| 2 | 本地链路范围 |
| 5 | 本地专用范围 |
(3)"组 ID"字段(112 位)是标识此组的唯一标识。
11.任意播地址的特点是什么?
任意播(AnyCast)地址也可简称为"任播地址",是一组接口(一般属于不同节点)的标识符。发送到任意播地址的数据包,只被最近的接口收到。
结构:n 位子网前缀 + (128 − n)位(其余位全 0)
| n 位 | 128 − n 位 |
|---|---|
| 子网前缀 | 0…0 |
任意播地址的特点:
- 这个地址是由路由协议定义的,不能手工配置,所以即便是网络管理员也无法区分出这个地址是单播地址还是任意播地址,因为任意播地址的表示格式和单播地址是一样的
- 任意播地址在组成上与单播地址没有差别,只是任意播强调一组接口
- 发到任意播地址的数据包仅发送到路由距离最近的任意播节点(不是所有节点)
- 任意播地址只能用于数据包的目的地址,不能作为主动发起的源地址
任意播通信的含义:发送节点与最近的一组接收方之间的通信。
12.从IPv4向IPv6迁移有哪些技术?
目前 IPv4 技术广泛应用于 Internet 上,如何迁移到 IPv6 是一个非常值得关注的问题。
迁移的难点:IPv6 系统是向后兼容的,即在基于 IPv6 的互联网中,能够发送、路由和接收 IPv4 数据包;但现有的 IPv4 系统却无法直接处理 IPv6 数据包。要确保 IPv4 尽可能平滑地过渡到 IPv6,必须解决迁移问题。
| 技术 | 原理 |
|---|---|
| 双栈技术 | 主机或路由器同时安装 IPv4 和 IPv6 两个协议栈,因此既能和 IPv4 通信,也能和 IPv6 通信。例如路由器独立运行 IPv4 和 IPv6 两种路由协议,并能转发两种类型的数据包;根据数据包头中的版本字段确认数据包类型,转发到正确的处理模块,从而使 IPv4 与 IPv6 互通 |
| 隧道技术 | 在 IPv6 分组进入 IPv4 网络时,将 IPv6 分组封装成 IPv4 分组;当封装成 IPv4 的数据分组离开 IPv4 网络时,再将数据部分(IPv6 部分)转发给目标节点 |
| 协议翻译技术 | 将 IPv6 和 IPv4 报头进行相互翻译,主要完成 IPv4/IPv6 协议和地址的转换,使数据分组可以在两种网络环境下相互传输 |
记忆要点:双栈——两台协议栈并存;隧道——把 IPv6 装进 IPv4 里穿过 IPv4 网络;翻译——在报头层面互相转换。
13.IPv4与IPv6主要区别对照表
| 比较项 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位(4 字节) | 128 位(16 字节) |
| 地址数量 | 约 40 亿个 | 约 3.4×10 的 38 次方个 |
| 地址表示 | 点分十进制 w.x.y.z | 冒号十六进制,可用 :: 简化,可内嵌 IPv4 |
| 地址结构 | 网络 ID + 主机 ID | 子网标识(前缀)+ 接口 ID |
| 子网掩码 | 必需 | 不再使用,改用前缀长度(如 /64) |
| 首部长度 | 固定 20B(含选项可更长) | 基本头部固定 40B,可选字段移入扩展头部 |
| 检验和 | 首部有检验和 | 取消首部检验和 |
| 分片 | 路由器可分片 | 分片由源节点完成,路由器不再分片 |
| 地址配置 | 手工或 DHCP | 支持无状态自动配置(链路本地地址自动生成) |
| 安全性 | 需额外协议(如 IPsec) | 内置认证和机密处理 |
| 广播 | 有广播地址 | 取消广播,用组播代替 |
| 地址类型 | 单播、广播、组播 | 单播、组播、任意播 |