4.3 IPv6

2027 · OCR 辅助 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照

## 4.3 IPv6

### 4.3.1 IPv6的特点

目前广泛使用的IPv4是在20世纪70年代设计的,互联网经过几十年的飞速发展,到2011年2月,IPv4地址已经耗尽,为解决“IP地址耗尽”问题,采取了以下三种措施。

1)无类别编址CIDR:使IP地址分配更加合理。
2)网络地址转换(NAT):节省全球唯一的公网IP地址。
3)IPv6:采用更大地址空间的新版本IP协议。

前两种方法只是延缓了IPv4使用寿命,只有第三种方法能从根本上解决IP地址耗尽问题。

**特点组长:** IPv6 的特点(2023)

IPv6的主要特点如下:

1)更大的地址空间。这是最重要的。IPv6将地址长度从IPv4的32位增大到128位,地址空间是IPv4的 $2^{128} / 2^{32} = 2^{96}$ 倍。从长远来看,这些地址是绝对够用的。
2)扩展的地址层次结构。由于IPv6地址空间很大,因此可以划分出更多的层次。

<!-- page: 194 -->

2027年计算机网络考研复习指导

3)灵活的首部格式。IPv6 定义了许多可选的扩展首部,不仅可提供比 IPv4 更多的功能,还能提高路由器的处理效率,这是因为路由器通常不对扩展首部进行处理。
4)改进的选项。IPv6 首部长度是固定的,其选项放在有效载荷中,可根据需要灵活配置。而 IPv4 预先定义好了一套标准的选项,其选项放在首部的可变部分。
5)允许协议继续扩充。IPv6 允许不断扩充功能,而 IPv4 的功能是固定不变的。
6)支持即插即用(自动配置 IPv6 地址)。因此通常不需要使用 DHCP,简化了网络管理。
7)支持资源的预分配。IPv6 支持实时音频/视频等要求保证一定带宽和时延的应用。
8)IPv6 只有源主机才能分片,只支持端到端的分片,不允许中间路由器进行分片。
9)IPv6 首部长度是固定的 40B,而 IPv4 的首部长度是可变的(必须是 4B 的整数倍)。
10)增大了安全性。身份鉴别和保密功能由 IPv6 的扩展首部提供。

虽然 IPv6 与 IPv4 不兼容,但它与所有其他互联网协议(如 TCP、UDP、ICMP、IGMP 和 DNS 等)总体上是兼容的,仅在少数地方做了必要的修改,主要是为了处理更长的地址。

## 4.3.2 IPv6 数据报的基本首部

IPv6 数据报由两部分组成:基本首部和有效载荷(也称净负荷)。有效载荷由零个或多个扩展首部(扩展首部不属于基本首部)及其后面的数据部分构成,如图 4.12 所示。

原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。

图 4.12 具有多个可选扩展首部的 IPv6 数据报的一般形式

与 IPv4 相比,IPv6 对首部中的某些字段进行了如下调整:

- 取消了首部长度字段,因为基本首部长度固定为 40B。
- 取消了服务类型字段,其功能由优先级和流标号字段实现。
- 取消了总长度字段,改用有效载荷长度字段。
- 取消了标识、标志和片偏移字段,相关功能已移至分片扩展首部。
- 把 TTL 字段更名为跳数限制字段,作用不变,但名称更贴合实际含义。
- 取消了协议字段,改用下一个首部字段。
- 取消了首部检验和字段,因传输层已提供差错检测,此举可加快路由器处理速度。
- 取消了选项字段,其功能由灵活的扩展首部实现。

尽管取消了 IPv4 首部中多项冗余功能,使 IPv6 基本首部的字段数减少至仅 8 个,但由于地址长度从 32 位扩展到 128 位,其基本首部长度反而增至 40B。

IPv6 数据报的基本首部格式如图 4.13 所示。

原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。

图 4.13 IPv6 数据报的基本首部的格式

<!-- page: 195 -->

第4章 网络层
183

## 要点追查 &gt; IPv6首部格式及字段含义(2023)

下面简要介绍 IPv6 基本首部中各字段的含义:

1)版本。占 4 位,指明 IP 协议的版本。对于 IPv6,该字段的值为 6。
2)通信量类。占 8 位,用于区分不同 IPv6 数据报的类别或优先级。
3)流标号。占 20 位,IPv6 提出了流的抽象概念。流是指互联网上从特定源点到特定终点(单播或多播)的一系列数据报(如实时音频/视频传输),路径上的路由器可据此提供特定的服务质量保证。所有属于同一个流的数据报都具有相同的流标号。
4)有效载荷长度。占 16 位,表示 IPv6 数据报中基本首部之后的字节数,包括所有扩展首部和上层数据。最大值为 65535(单位为字节)。
5)下一个首部。占 8 位,功能类似于 IPv4 的协议字段。若无扩展首部,则标识上层协议类型;若存在扩展首部,则标识紧随其后的第一个扩展首部的类型。
6)疏散限制。占 8 位,作用等同于 IPv4 的 TTL 字段。源主机在发送数据报时设定初始值(最大为 255),每经过一个路由器,其值减 1,减至 0 时丢弃该数据报。
7)源地址和目的地址。占 128 位,分别表示数据报的发送方/接收方的 IPv6 地址。

## 4.3.3 IPv6 地址

IPv6 数据报的目的地址有以下三种基本类型:

1)单播。即传统的点对点通信,数据报发送给唯一指定的接收方。
2)多播。一点对多点的通信,数据报发送给所有加入该多播组的接口。
3)任播。是 IPv6 新增的一种地址类型,其特点可概括为“一址多用、就近交付”。任播地址标识一组接口,但网络会将数据报仅交付给其中路由距离最近的一个。

IPv4 地址通常采用点分十进制表示法。若 IPv6 也沿用此方式,其 128 位地址将显得冗长。因此,IPv6 标准采用冒号十六进制记法;将地址划分为 8 组,每组 16 位(4 个十六进制数),各组之间用冒号分隔。例如,4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170。

为了书写简便,还规定了如下两种缩写规则。

省略前导零。每组中前面连续的十六进制零可以省略,但至少要保留一个数字。例如,可以把地址 4BF5:0000:0000:0000:BA5F:039A:000A:2176 缩写为 4BF5:0:0:0:BA5F:39A:A:2176。

双冒号替换连续全零组。当地址中出现一个或多个连续的全零组时,可用双冒号(::)替代。但“::”在一个地址中只能使用一次,否则无法确定省略了多少个全零组(因总组数需恢复为 8)。因此,上述地址可被更紧凑地缩写为 4BF5::BA5F:39A:A:2176。

IPv6 地址的分类如表 4.3 所示。

表 4.3 IPv6 地址的分类

|  地址类型 | 二进制前缀 | CIDR 记法  |
| --- | --- | --- |
|  未指明地址 | 00...0(128 位) | ::/128  |
|  环回地址 | 00...01 (128 位) | ::1/128  |
|  多播地址 | 11111111(8 位) | FF00::/8  |
|  本地链路单播地址 | 1111111010 (10 位) | FE80::/10  |
|  全球单播地址 | 见图 4.14  |   |

对表 4.3 给出的五类地址简单解释如下:

1)未指明地址:不能用作目的地址,仅用于尚未配置 IPv6 地址的主机作为源地址。
2)环回地址:作用与 IPv4 的环回地址相同,但 IPv6 中仅定义这一个环回地址。

<!-- page: 196 -->

2027年计算机网络考研复习指导

3)多播地址:作用与IPv4多播类似。这类地址占IPv6地址空间的1/256。
4)本地链路单播地址:仅用于本地链路内的通信,不能被路由器转发。
5)全球单播地址:使用得最多的地址。IPv6单播地址的划分方法非常灵活,如图4.14所示。可以把整个128位都作为一个节点的地址。也可用 $n$ 位作为子网前缀,剩下的 $(128 - n)$ 位作为接口标识符(相当于IPv4的主机号)。还可以划分为三级:用 $n$ 位作为全球路由选择前缀,用 $m$ 位作为子网前缀,而剩下的 $128 - n - m$ 位则作为接口标识符。

|  节点地址(128位)  |   |   |
| --- | --- | --- |
|  子网前缀(n位) | 接口标识符(128-n位)  |   |
|  全球路由选择前缀(n位) | 子网标识符(m位) | 接口标识符(128-n-m位)  |

图4.14 IPv6全球单播地址的几种划分方法

## 4.3.4 从IPv4向IPv6过渡

IPv4向IPv6的过渡只能采用逐步演进的办法,并确保新部署的IPv6系统具备向后兼容的能力:能够接收、转发IPv4数据报,并为其选择路由。

**节点地址** $\triangleright$ IPv4向IPv6过渡的策略(2023)

目前主要采用以下两种过渡策略:

1)双协议栈,是指在一台主机上同时安装IPv4和IPv6两个协议栈,分别配置一个IPv4地址和一个IPv6地址,因此既能与IPv4网络通信,也能与IPv6网络通信。双协议栈主机通过应用层的域名系统(DNS)获知目的主机使用的地址类型:若DNS返回的是IPv4地址,则使用IPv4;若返回的是IPv6地址,则使用IPv6。
2)隧道技术,是指当IPv6数据报需要进入IPv4网络时,将其整个封装为IPv4数据报的数据部分,使原IPv6数据报如同在IPv4网络的隧道中传输;当该IPv4数据报离开IPv4网络后,再将其数据部分交由主机的IPv6协议处理。

## 4.3.5 本节习题精选

### 单项选择题

01. 下一代互联网核心协议IPv6的地址长度是( )。

A. 32比特

B. 48比特

C. 64比特

D. 128比特

02. 与IPv4相比,IPv6( )。

A. 采用32位IP地址

B. 增加了首部字段数量

C. 不提供 QoS 保障

D. 没有提供检验和字段

03. 下列关于IPv6地址1A22:120D:0000:0000:72A2:0000:0000:00C0的表示中,错误的是( )。

A. 1A22:120D::72A2:0000:0000:00C0

B. 1A22:120D::72A2:0:0:C0

C. 1A22::120D::72A2::00C0

D. 1A22:120D:0:0:72A2::C0

04. 一个IPv6地址的简化写法为8::D0:123:CDEF:89A,则其完整地址应该是( )。

A. 8000:0000:0000:0000:00D0:1230:CDEF:89A0
B. 0008:0000:0000:0000:00D0:0123:CDEF:89A0
C. 8000:0000:0000:0000:D000:1230:CDEF:89A0

<!-- page: 197 -->

第4章 网络层
185

D. 0008:0000:0000:0000:00D0:0123:CDEF:089A

05. 下列关于 IPv6 的描述中,错误的是( )。

A. IPv6 的首部长度是不可变的
B. IPv6 不允许在中间路由器进行分片
C. IPv6 采用了 16B 的地址,在可预见的将来不会用完
D. IPv6 使用了首部检验和来保证传输的正确性

06. 若一个路由器收到的 IPv6 数据报因太大而不能转发到链路上,则路由器将把该数据报( )。

A. 丢弃
B. 智存
C. 分片
D. 转发至能支持该数据报的链路上

07. 【2023 统考真题】下列关于 IPv4 和 IPv6 的叙述中,正确的是( )。

I. IPv6 地址空间是 IPv4 地址空间的 96 倍
II. IPv4 首部和 IPv6 基本首部的长度均可变
III. IPv4 向 IPv6 过渡可以采用双协议线和隧道技术
IV. IPv6 首部的 Hop Limit 字段等价于 IPv4 首部的 TTL 字段

A. 仅 I、II
B. 仅 I、IV
C. 仅 II、III
D. 仅 III、IV

## 4.3.6 答案与解析

### 单项选择题

01. D

IPv6 的地址用 16B(128 比特)表示,比 IPv4 长得多,地址空间是 IPv4 的 $2^{96}$ 倍。

02. D

IPv6 采用 128 位地址。IPv6 减少了首部字段数量,仅包含 8 个字段。IPv6 支持 QoS(指在有限的带宽资源下,为业务提供端到端的服务质量保证),以满足实时、多媒体通信的需要。因为目前网络传输介质的可靠性较高,所以出现比特错误的可能性很低,且数据链路层和传输层有自己的检验,为了效率,IPv6 没有检验和字段。

03. C

使用零压缩法时,双冒号“::”(表示零压缩)在一个地址中只能出现一次。也就是说,当有多处不相邻的 0 时,只能用“::”代表其中的一处。

04. D

冒号十六进制记法表示 IPv6 地址的规则:① 多个连续区域为 0,可进行零压缩,但一个地址仅可出现一次零压缩。② 每个区域开头的 0 可省略,结尾的 0 不可省略。按照规则先将题中零压缩的部分展开,得到 8:0000:0000:0000:D0:123:CDEF:89A;每个区域应该有 4 位十六进制数,不足 4 位则表示开头的 0 被省略,补充后得到 0008:0000:0000:0000:00D0:0123:CDEF:089A。

05. D

IPv6 的首部长度是固定的,因此不需要首部长度字段。IPv6 取消了检验和字段,这样就加快了路由器处理数据报的速度。我们知道,数据链路层会丢弃检测出差错的帧,传输层也有相应的差错处理机制,因此网络层的差错检测可以精简掉。

06. A

IPv6 中不允许在中间路由器进行分片。因此,若路由器发现到来的数据报太大而不能转发到

<!-- page: 198 -->

2027年计算机网络考研复习指导

链路上,则丢弃该数据报,并向发送方发送一个指示分组太大的 ICMP 报文。

07. D

IPv4 地址占 32 位,地址空间为 $2^{32}$;IPv6 地址占 128 位,地址空间为 $2^{128}$,IPv6 地址空间是 IPv4 地址空间的 $2^{96}$ 倍,说法 I 错误。IPv4 首部长度是 4B 的倍数,长度可变;IPv6 基本首部长度是 40B,不可变,说法 II 错误。IPv4 向 IPv6 过渡可以采用双协议栈(设备同时支持 IPv4 和 IPv6)和隧道技术(IPv6 数据报封装 IPv4 的数据部分),说法 III 正确。IPv6 首部的 Hop Limit 字段和 IPv4 首部的 TTL 字段都用于限制数据报在网络中经过的路由器数量,说法 IV 正确。

## 4.4 路由算法与路由协议

### 4.4.1 路由算法

路由选择协议的核心是路由算法,即用于生成路由表中各项条目的计算方法。其目的很明确:给定一组路由器及其互连链路,路由算法要找到一条从源路由器到目的路由器的最佳路径。通常,“最佳”路径是指费用最低的路径,该费用可根据跳数、带宽、延迟等因素定义。

#### 1. 静态路由与动态路由

路由器转发分组是通过路由表进行的,而路由表是通过各种算法生成的。从能否随网络状态自适应调整的角度,路由算法可分为如下两大类。

1)静态路由算法。由网络管理员手工配置每一条路由。
2)动态路由算法。根据网络状态的变化(如链路故障或新增)来动态调整自身的路由表。

静态路由算法的特点是实现简单、开销小,但不能及时适应网络状态的变化,适用于简单的小型网络。动态路由算法能较好地适应网络状态的变化,但实现复杂、开销也大,适用于较复杂的大型网络。常用的动态路由算法可分为两类:距离-向量算法和链路状态算法。

#### 2. 距离-向量算法

距离-向量(Distance-Vector,DV)算法基于 Bellman-Ford 算法,它不要求每个节点掌握完整的网络拓扑,而只需知道:与相邻节点之间的距离:各邻居节点到目的节点的最短距离。每个节点以自身为源点,独立运行 Bellman-Ford 算法,通过迭代交换信息,最终可收敛到全网一致的最短路径解。下面讨论 Bellman-Ford 算法的基本思想。

假设 $d_{x}(y)$ 表示从节点 $x$ 到节点 $y$ 的最短路径费用,则有

$$
d _ {x} (y) = \min  \left\{c \left(x, v\right) + d _ {x} (y) \right\}, \quad v \text { 是 } x \text { 的所有邻居}
$$

式中,$c(x,v)$ 是从 $x$ 到其邻居 $v$ 的链路费用。已知 $x$ 的所有邻居到 $y$ 的最短路径费用后,$x$ 到 $y$ 的最短路径费用即为所有 $c(x,v) + d_x(y)$ 中的最小值,如图 4.15 所示。所有最短路径算法都依赖于一个基本性质:“两点之间的最短路径,必然包含路径上任意子路径的最短路径”。

原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。

图 4.15 Bellman-Ford 算法的基本思想

<!-- page: 199 -->

第4章 网络层
187

在距离-向量算法中,每个节点 $x$ 维护以下路由信息:

1)从 $x$ 到每个直接相连邻居 $\nu$ 的链路费用 $c(x, \nu)$ 。
2)节点 $x$ 的距离向量,即 $x$ 到网络中其他节点的费用。这是一组距离,因此称为距离向量。
3)从每个邻居接收到的距离向量副本,即 $x$ 的各邻居到所有其他节点的费用。

算法运行时,每个节点定期向所有邻居发送自己的距离向量。当节点 $x$ 从邻居 $\nu$ 接收到新的距离向量后,会更新本地保存的 $\nu$ 的距离向量副本,并利用上述公式重新计算自身的距离向量。若计算结果导致自身的距离向量发生变化,则立即向所有邻居发送更新后的距离向量。

下面以图4.16顶部所示的三节点简单网络为例,说明距离-向量算法的实现过程。

原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。

一个简单的网络

原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。

(a)初始状态

原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。

(b)第一次发送更新后

原转写引用的配图未随 Markdown 保存,请回到原 PDF 核验。

(c)第二次发送更新后
图4.16 距离-向量算法实现的举例

## 特点信息
距离-向量算法的实现原理(2021)

图4.16(a)中的各列依次是三个节点的初始化距离向量,此时各节点之间尚未交换过任何路由信息,因此每个节点的距离向量仅包含到每个直连邻居的链路费用。

初始化完成后,各节点首次向邻居发送自己的距离向量。收到更新后,每个节点重新计算自己的距离向量。例如,节点 $x$ 计算的过程为:$d_{x}(x) = 0$;$d_{x}(y) = \min \{c(x,y) + d_{y}(y), c(x,z) + d_{z}(y)\} = \min \{2 + 0, 7 + 1\} = 2$;$d_{y}(z) = \min \{c(x,y) + d_{y}(z), c(x,z) + d_{z}(z)\} = \min \{2 + 1, 7 + 0\} = 3$。可见,$x$ 到 $z$ 的最低费用由7变成了3,$z$ 到 $x$ 的最低费用也由7变成了3,如图4.16(b)所示。由于距离向量发生变化,$x$ 和 $z$ 要再次向邻居发送更新报文,而未变化的 $y$ 则无须发送。这一轮交换后,各节点又重新计算,发现距离向量不再变化,算法收敛并进入静止状态,如图4.16(c)所示。

显然,更新报文的大小与网络节点数成正比,大型网络中可能产生较大的通信开销。

最常见的距离-向量路由协议是RIP,它采用疏数作为路径费用的度量标准。

## 3. 链路状态算法

链路状态(Link State,LS)指的是:本路由器与哪些邻居相连,以及对应链路的代价。链路状态算法要求每个节点都掌握完整的全网拓扑结构图。为此,每个节点执行以下两项任务:

- 主动探测所有相邻节点的状态;
- 定期将自身的链路状态信息,通过洪泛法传播给全网所有节点。

因此,每个节点都知道全网拓扑、连接关系及各链路代价,并可基于此使用Dijkstra最短路径算法,独立计算到其他所有节点的最短路径;每当收到链路状态报文时,节点会更新本地的拓扑视图,并在链路状态发生变化时,立即重新运行Dijkstra算法以更新最短路径。

链路状态算法的主要优点是:① 所有节点基于相同的链路状态数据库独立计算最优路径,不依赖邻居的路由决策,避免了距离-向量算法中的无穷计数等问题;② 每个节点获得完整拓扑

<!-- page: 200 -->

2027年计算机网络考研复习指导

后,可本地计算全局最优路径,收敛过程通常较快且无环;③ 链路状态报文仅包含本节点的直连链路信息,单个报文大小与网络总规模无关,因此在大型网络中具有更好的可扩展性。

两种路由算法的比较:① 在距离-向量算法中,每个节点仅与直接邻居交换信息,发送的是完整的距离向量(大小与节点数成正比),通信开销较大;② 在链路状态算法中,每个节点通过洪泛方式向全网广播自身直连链路的状态,但每条报文仅包含局部信息,总体扩展性更好。

典型的链路状态算法是OSPF算法。