本地资料IP
SCHEDULE LOCAL高优先级24 个小节覆盖真题 20092025
关联考点子网划分8网络号和主机号6子网聚合3最长前缀匹配2IP数据报分片2路由聚合1IPv61做相关真题 · 21 道 →
做相关真题 · 21 道选中文字可高亮或加下划线
选中文字高亮 · 下划线

IP

真题练习

绝对重点,需要掌握 IPv4 协议中各个知识点的细节。IPv6 和 移动IP 简单了解一下基本概念,有小概率会在选择题中考察一题。

在现实生活中,我们通过“国家‑省份‑城市‑街道‑小区‑楼栋‑门号”等层级信息来定位一个具体地点,例如 中国‑北京市‑海淀区‑某街道‑某小区‑某栋‑某户。

在计算机网络里,定位一台主机同样需要使用唯一的地址,这个地址就是 IP 地址。IP(Internet Protocol)直译为“互联网协议”,它既提供了主机的标识,又规定了数据在网络中的传输方式。

仅有地址并不能保证数据能够顺利从源端到达目的端。互联网是一张由无数路由器、交换机等网络设备相互连接而成的全球性网络。从 一个机器另一个机器 的通信,往往要经过多级转发。如何在众多可能的路径中找到一条通向正确目的地的路线,就需要 IP 协议 与路由协议共同配合完成。后续章节我们会逐步剖析这一过程的细节。

目前 IP 协议有两个版本:

  1. IPv4(Internet Protocol Version 4)
  2. IPv6(Internet Protocol Version 6)

本文的重点在于深入理解 IPv4 的工作原理和细节。

IPv4 地址格式

IPv4 地址由 4 个字节(即 32 位)构成,例如:11000000.10101000.00000100.00000010 就是一个典型的 IPv4 地址的二进制形式。

点分十进制

由于二进制表示不便于人类阅读,IPv4 通常采用 点分十进制 的方式进行表示。

在点分十进制中,每个字节用十进制数表示,并以点号分隔 4 个字节。例如,上述二进制地址对应的点分十进制形式为 192.168.4.2

IPv4 的 32 位地址按四个 8 位组转换为点分十进制

网络号与主机号

IP 地址的设计本质上是为了在互联网中唯一标识一台设备,因此通常被划分为两个部分:

  • 网络号(Network ID):用于标识设备所在的网络。
  • 主机号(Host ID):用于标识该网络中的具体主机。
IPv4 前缀表示网络部分,剩余位表示该网络内的接口地址

网络号负责确定目标网络,主机号用于在该网络中定位到具体设备。

特殊地址

在 IP 地址的划分中,有些 主机号 是保留的,不能被用于分配给普通设备:

  • 主机号全为 0:表示网络本身,不能用于主机。
  • 主机号全为 1:表示该网络中的广播地址,用于向网络内所有主机发送信息。

此外,还有以下两个特殊的全局地址:

  • 0.0.0.0:未指定地址,常在主机尚未获得地址时作为源地址,或在监听套接字中表示所有本地接口;不能作为普通单播目的地址。
  • 255.255.255.255:称为“本地广播地址”,用于向本地网络中的所有设备广播数据。
  • 127.0.0.0/8:环回地址范围,典型地址为 127.0.0.1,报文不离开本机。
  • 169.254.0.0/16:IPv4 链路本地地址范围,无法通过普通路由跨越链路。

IPv4 首部

IP 协议位于 OSI 7 层模型的网络层,其承载上层(传输层)的数据,对其进行 封装,然后传递给下层(数据链路层)进行进一步的处理。

封装的具体过程就是为 传输层的数据 加上 IP 协议的首部的二进制表示,IPv4 的首部的 逻辑格式 如下图所示,其中包含多个字段,长度通常为 20 个字节

IPv4 基本首部字段及版本、IHL、总长度、分片、TTL 和地址位置

这一小节简单介绍各个字段,帮助大家建立一个粗略的了解,部分字段的细节我会在后面几个小节详解说明。

  1. 版本(Version):
    • 4 位字段,用于指定 IP 协议版本,IPv4 的版本为 4。
  2. 头部长度(Header Length):
    • 4 位 IHL 字段,以 4 B(32 位字)为单位。无选项时 IHL=5,首部为 5×4=205\times4=20 B;最大 IHL=15,首部最长 60 B。
  3. 服务类型(Type of Service):
    • 现代定义把这 8 位解释为 6 位 DSCP 与 2 位 ECN,用于区分服务和显式拥塞通知;旧教材可能仍称为服务类型 ToS。
  4. 总长度(Total Length):
    • 16 位字段,指定整个 IPv4 数据报(包括首部和数据部分)的总长度,以字节为单位。最大值为 65535 字节
  5. 标识(Identification):
    • 16 位字段,用于让接收端把同一原始数据报的分片归组。它不保证在整个互联网永久全局唯一,而是在源、目的、协议和分片存活时间等上下文中避免混淆。
  6. 标志(Flags):3 位字段,包括以下标志:
    • 最左边位:保留为 0,未使用。
    • DF(Don’t Fragment):
      • 如果设置为 1,表示数据报不允许分片。当路由器发现需要分片才能转发时,则路由器会丢弃该数据报,并发送一个 ICMP 错误消息(“Fragmentation Needed and DF Set”)返回给发送方,告知需要分片但不允许分片。
      • 如果设置为 0,标识允许分片,路由器在传输过程中如果需要,可以将数据报分片,以确保数据报能够通过传输链路。
    • MF(More Fragments):
      • 如果设置为 1,还有更多的分片;
      • 如果设置为 0,表示当前分片是对应数据报的最后一个分片,或者表示当前数据报根本没有分片。
  7. 片偏移(Fragment Offset):
    • 13 位字段,用于指示数据报分片的位置。以 8 字节为单位,表示相对于原始数据报的偏移量。
  8. 生存时间(Time to Live,TTL):
    • 8 位字段。虽然名称含“时间”,现代转发中主要作为跳数上限:每经过一个路由器至少减 1,减到 0 时丢弃并通常返回 ICMP Time Exceeded。
  9. 协议(Protocol):
    • 8 位字段,指定上层协议,表示数据报的载荷是由哪个协议处理。例如,6 表示 TCP,17 表示 UDP。
  10. 首部校验和(Header Checksum):
    • 16 位字段,用于检测 IPv4 首部的错误。
  11. 源 IP 地址(Source IP Address):
    • 32 位字段,指定数据报的发送者的 IP 地址。
  12. 目标 IP 地址(Destination IP Address):
    • 32 位字段,指定数据报的接收者的 IP 地址。
  13. 选项(Options):
    • 可选字段,长度可变,用于包含一些额外的信息。IPv4 首部中的选项字段通常很少被使用。

分片相关字段

简而言之,IP 数据报的最大长度为 65535 字节,这是因为其“总长度”字段占 16 位,所能表示的最大无符号整数为 65535。然而,数据链路层(如以太网)的 MTU(最大传输单元)往往远小于该值,例如以太网的 MTU 通常为 1500 字节

因此,当 IPv4 数据报长度超过输出链路 MTU、且 DF=0 时,源主机或中间路由器可把它拆成更小分片;DF=1 时路由器必须丢弃并返回 ICMP“需要分片”。详细计算见 IP 数据报分片。IPv6 路由器不执行分片,只能由源主机根据路径 MTU 使用分片扩展首部。

同一 IPv4 数据报的分片共享标识并用片偏移和 MF 重组

在进行分片时,会引出两个关键问题:

  1. 如何区分不同数据报的分片?

比如,假设 packet A 被分片为 A1、A2、A3,而 packet B 被分片为 B1、B2,我们如何知道 A1 属于 packet A 而不是 packet B?

  1. 如何将同一数据报的多个分片重新组合为原始数据?

为了解决这些问题,IP 协议在首部中设计了以下两个重要字段:

  • Identification(标识符):为每一个 IP 数据报分配一个唯一的标识值,使接收方能够识别属于同一个数据报的所有分片。
  • Fragment Offset(分片偏移量):指明当前分片在原始数据报中的位置,单位为 8 字节(即偏移值乘以 8 即为实际字节偏移量),用于在接收端正确地重组数据报。

通过这两个字段,接收方可以准确地将来自不同数据报的分片加以区分,并将同一数据报的所有分片按照正确顺序重新组装起来,恢复出原始的 IP 数据报。

首部校验和

IP 首部的 checksum 为 IP 协议的差错校验字段,用于检验 IP 首部在传输的过程中是否发生错误,接下来我会告诉你如何通过该字段进行校验。

当一个 IP 数据报被创建时,发送端设备会计算 IP 头部的校验和,并填充 IP 数据报中的 checksum 字段

路由器目标机器 在收到数据报时会重新计算首部校验和,并将计算得到的校验和和接收到的 IP 数据报中的 checksum 进行比较。如果 不一致 的话,则说明 IP 数据报中的某些数据在传输的过程中出现变动,就需要 丢弃 该 IP 数据报。

IPv4 把首部按 16 位反码相加并取反得到首部校验和

需要注意的是,当 IP 数据报 经过某个路由器时,路由器需要 重新计算 并填充 checksum 字段,因为 IP 数据报中的某些字段在经过路由器时会被改变(比如 TTL 会减 1 等)。

IPv4 首部校验和采用 16 位反码和,只覆盖首部,不覆盖载荷。接收端也可把包含校验和字段的所有 16 位字相加,结果为全 1 表示未检测到差错。IPv6 取消了基本首部校验和,依赖链路层与传输层校验。

TTL

TTL(Time To Live)用于控制 IP 分组的 生命周期,发送方在发送 IP 分组时会设定一个 TTL 值,这个值是不固定的,但是一般是 32、64、128 或 255 这四个值中的一个。

IP 分组经过路由器时,路由器把 TTL 减 1;若结果为 0,就丢弃分组,并通常向源主机返回 ICMP Time Exceeded 消息。Traceroute 正是通过逐次增大 TTL 来观察各跳回复。

TTL 每经过一跳减一并在归零时触发 ICMP 超时报文

IPv4 分类寻址

在互联网早期,IP 地址采用了 分类寻址(Classful Addressing)。具体而言,就是根据 IP 地址的 网络号的前几位 将地址分为 A、B、C、D、E 五类。

A 到 E 类 IPv4 地址由最高位模式决定类别和传统用途

在分类寻址中,如果给定一个 IP 地址,我们可以马上判断出该 IP 地址属于哪一类网络(根据前几位的值),以及该 IP 地址的 网络编号主机编号 是多少。

类别 最高位模式 传统地址范围 默认掩码 网络号长度 主机号长度 传统用途
A 类 0xxxxxxx 1.0.0.0~126.255.255.255 255.0.0.0 8 位 24 位 大型单播网络
B 类 10xxxxxx 128.0.0.0~191.255.255.255 255.255.0.0 16 位 16 位 中型单播网络
C 类 110xxxxx 192.0.0.0~223.255.255.255 255.255.255.0 24 位 8 位 小型单播网络
D 类 1110xxxx 224.0.0.0~239.255.255.255 多播
E 类 1111xxxx 240.0.0.0~255.255.255.255 保留/实验

A 类表从 1 开始,是因为 0.0.0.0/8 有特殊用途;127.0.0.0/8 保留作环回。分类寻址已经被 CIDR 取代,这张表主要用于理解历史题目与最高位模式。

分类寻址 曾是 IPv4 设计时的核心思路。它通过把全部 32 位地址空间划分为五大类,既简化了路由器的实现,也方便了地址的分配。 在互联网的萌芽阶段,这种“一刀切”的方案效率极高,完全能够满足当时少量主机的需求。

然而,设计者没有预见到随后出现的 设备爆炸式增长:每台联网设备都需要一个唯一的 IP 地址。IPv4 的 32 位地址空间(约 43 亿 个地址)在全球范围内迅速被耗尽,原本简单的分类方式反而成为制约网络扩展的瓶颈。

具体表现为:

  1. 地址空间浪费
    • 一个传统 B 类网络有 216=655362^{16}=65,536 个地址,按传统网络地址与广播地址规则可分配给普通主机的通常为 65 534 个。若组织只有几千台主机,其余地址就被闲置。
    • C 类地址只能容纳 254 台主机。当组织的需求超过这一规模,却又不想使用一个庞大的 B 类地址块时,就会陷入分配困难。
  2. 分配不灵活
    • 分类寻址的层次结构固定,无法根据实际需求进行细粒度的划分,导致大块地址被“硬切”,小块需求又常常得不到满足。

为突破这些局限,业界相继提出了几项关键技术:

  • CIDR(无类域间路由):通过可变长度子网掩码(VLSM)取代固定的 A/B/C 类划分,使得地址块可以按需灵活划分,大幅提升了地址利用率,并简化了路由表的汇总。
  • NAT(网络地址转换):在内部网络使用私有地址,通过在出入口的路由器上进行地址映射,多个终端共享同一个公网 IP,从而在一定程度上缓解了 IPv4 地址匮乏的问题。
  • IPv6:直接扩展地址长度至 128 位,提供几乎无限的地址空间(约 3.4 × 10³⁸ 个地址),从根本上解决了地址枯竭的危机,并为未来的网络功能(如更高效的路由、安全机制等)奠定基础。

CIDR

无类别域间路由(CIDR,classless inter-domain routing)的主要目标是克服传统的基于类别的 IP 地址划分方法,使网络资源的分配更加灵活和高效。

分类寻址 中,每一类网络的网络编号的长度是固定的,在 CIDR 中,网络编号的长度是动态的,可以根据需求定制。其中网络编号的长度叫做 前缀长度(Prefix Length),前缀长度通常以 IP 地址 斜杠后跟一个数字表示,例如,192.168.1.13/24 表示前 24 位 是网络部分,剩下的位数用于主机部分。

子网掩码

若 CIDR 前缀长度为 nn,子网掩码的二进制表示就是前 nn 位全 1、后 32n32-n 位全 0。网络地址可由

network=IPANDmask\mathrm{network}=\mathrm{IP}\mathbin{\mathrm{AND}}\mathrm{mask}

得到。

子网掩码的作用是用来 区分网络号和主机号

  • 网络号部分:与子网掩码中 1 对应的比特位
  • 主机号部分:与子网掩码中 0 对应的比特位

下表给出了 CIDR 中不同前缀长度对应的子网掩码:

CIDR 前缀长度从 0 到 32 对应的连续 1 子网掩码

子网划分

子网划分(Subnetting) 是将一个较大的 IP 网络进一步划分为多个更小的网络(子网)的过程。这样做的目的包括:

  • 更高效地利用 IP 地址资源
  • 减少广播范围,降低网络拥塞
  • 优化路由效率

那么子网划分如何实现呢?在 CIDR 中,IP 地址由 网络部分 + 主机部分 组成。子网划分的 关键思想 是:从主机部分 “借用” 若干位,加入到网络部分,用来表示新的子网:

从主机部分借位后网络前缀变长并产生更多更小的子网

在子网划分过程中,子网掩码(Subnet Mask)用于区分 IP 地址的网络部分和主机部分。常见的做法是通过调整子网掩码的长度,将更多位分配给网络部分,减少主机部分的位数。

子网划分包含 变长子网划分(Variable Length Subnet Masking, VLSM) 和 固定长度子网划分(Fixed Length Subnet Mask, FLSM) 两种方式。

变长子网划分

VLSM(Variable Length Subnet Masking)使用不同长度的掩码来划分 IP 地址空间,从而根据实际需求为各个子网分配不同数量的地址。

若按传统 IPv4 子网规则为 HH 台主机留出网络地址和广播地址,先选择满足 2h2H2^h-2\ge H 的最小主机位数 hh,再用 h=32ph=32-p 求出前缀长度 pp。因此应先处理主机数最多的子网,既能避免地址块无法对齐,也便于保留连续的剩余空间。

假设你有一个 C 类 网络192.168.1.0/24,需要划分给四个部门,其中 A 部门需要 100 个 IP 地址,B 部门需要 50 个 IP 地址,C 部门只需要 25 个 IP 地址,D 部门需要 14 个 IP。

使用 VLSM,你可能会这样划分:

部门 子网地址 子网掩码 地址总数 传统可用主机范围
A(需 100) 192.168.1.0/25 255.255.255.128 128 192.168.1.1192.168.1.126
B(需 50) 192.168.1.128/26 255.255.255.192 64 192.168.1.129192.168.1.190
C(需 25) 192.168.1.192/27 255.255.255.224 32 192.168.1.193192.168.1.222
D(需 14) 192.168.1.224/28 255.255.255.240 16 192.168.1.225192.168.1.238

原表把 D 写成 /27,却配了 /28 的掩码,且把地址总数写成 32;三者互相矛盾。按“需要 14 个普通主机地址”计算,应选择 /28,共 16 个地址,传统规则下恰有 14 个可用主机地址。192.168.1.240/28 仍可留作后续分配。

可以用二叉树结构来处理上述 VLSM 问题:

VLSM 从最大需求开始把 24 位前缀二分为 25、26、27、28 位子网
  • 每向 下一层表示子网掩码加 1 位,即 地址空间减半
  • 每个节点的 “0” 代表当前块的前半段,“1” 代表后半段。
  • 从根节点 /24 开始,依次为 A、B、C、D 部门分配子网。
  • 每个子网 最终落在一个叶子节点,子网大小正好满足其所需地址数。

VLSM 与前缀树:VLSM 可用前缀编码思想理解。每个已分配子网占据前缀树中的一个节点;不能再把其后代分给其他子网,否则地址范围会重叠。

这种二叉树划分与前缀编码、扩展操作码的思想相似:选中某个前缀后,它覆盖的后代地址就不能再独立分配。

下面的交互按 A→B→C→D 的需求从大到小推进前缀树分配,并实时显示剩余块;静态表格保留作最终答案底稿。

过程流

VLSM 按需求从大到小分配

在 192.168.1.0/24 中依次满足 100、50、25、14 台主机,逐步确定 /25、/26、/27、/28,检查网络地址、广播地址和剩余块。

需求降序分配 A分配 A分配 B分配 B分配 C分配 C分配 D分配 D检查剩余块

当前查看:需求降序先按主机需求排序为 A=100、B=50、C=25、D=14,防止小块先占位后让大块无法对齐。

定长子网划分

FLSM(Fixed Length Subnet Masking)使用相同长度的子网掩码来划分网络。这种方法在划分时更为简单和直接,但通常不如 VLSM 灵活高效,FLSM 具备如下特点:

  • 每个子网使用相同的子网掩码
  • 每个子网拥有相同数量的 IP 地址

假设你有一个 C 类 网络192.168.1.0/24,需要划分给 A、B、C、D 四个部门,可以这样划分:

部门 子网地址 子网掩码 地址总数 传统可用主机范围
A 192.168.1.0/26 255.255.255.192 64 192.168.1.1192.168.1.62
B 192.168.1.64/26 255.255.255.192 64 192.168.1.65192.168.1.126
C 192.168.1.128/26 255.255.255.192 64 192.168.1.129192.168.1.190
D 192.168.1.192/26 255.255.255.192 64 192.168.1.193192.168.1.254

VLSM 类似,FLSM(Fixed Length Subnet Masking)也可以通过二叉树结构进行子网划分:

FLSM 把 24 位前缀等分为四个相同大小的 26 位子网

不同之处在于,FLSM 中所有子网大小相同,因此划分过程会持续到每个子网达到相同掩码长度为止。最终,每个子网都对应于二叉树的 最底层叶子结点

子网聚合

子网聚合(Route Aggregation 或 Supernetting)是将多个相邻的子网 合并为一个更大的网络 的过程。这一技术通常用于 路由汇总,以减少路由表项数量,提高路由器的处理效率。

例如,当一个路由器连接了多个相邻子网:

  • 192.168.0.0/23
  • 192.168.2.0/24
  • 192.168.3.0/24

它可以将这些子网聚合成一个更大的网络:192.168.0.0/22

进行子网聚合需要满足以下的 聚合条件

  • 地址对齐:聚合后的网络地址必须是其新掩码下的网络起始地址(低位必须为 0);
  • 掩码缩短:聚合的结果一定是更短的前缀,比如从 /24 聚合成 /22。

子网聚合的过程也可以根据二叉树来理解:子网划分是将一个中间结点(的网络)拆分为若干个叶子结点(的网络),子网聚合就是将若干个叶子结点合并为一个中间结点。

相邻且对齐的子网在前缀树上合并为更短的汇总前缀

子网聚合可以覆盖暂未使用的地址,只要汇总前缀对齐并且网络管理员确实有权代表整个地址块通告。但若汇总覆盖了实际由其他方向到达的地址,可能产生黑洞或错误转发,因此不能只看二进制能否对齐,还要检查路由所有权与连通性。

IP 数据报分片

IPv4 数据报分片允许较大的数据报被拆成多个片段,以适应输出链路的 最大传输单元(MTU)。IPv4 源主机和中间路由器都可能分片,但只有最终目的主机负责重组;若 DF=1,则需要分片的路由器不能拆分,只能丢弃并返回 ICMP。

MTU 是指网络链路能够传输的最大数据报大小,不同网络链路的 MTU 大小可能不同。当一个 IP 数据报的大小超过了某个链路的 MTU 时,它就需要被分片,以确保可以顺利传输。

MTU 指链路层帧可承载的最大网络层数据报长度,不包括链路层帧头和帧尾;对于以太网,常说的 1500 B MTU 包含整个 IP 数据报,即 IP 首部加 IP 载荷。

数据链路中的负载(Payload)包含 IP 数据报的首部(20B)和数据部分。

以下是 IP 数据报分片的基本过程:

  1. 发送端分片
    • 发送端的主机首先创建一个 IP 数据报,并将它发送到目标主机。这个数据报的大小可能大于某些链路的 MTU
  2. 路由器检查 MTU
    • 当数据报经过 路由器 时,路由器 会检查下一个链路的 MTU 大小。它会比较数据报的大小和链路 MTU
    • 如果数据报的大小 小于或等于 链路 MTU,那么数据报会继续传输,无需分片。
    • 如果 IPv4 数据报大于链路 MTU 且 DF=0,路由器可以分片;若 DF=1,则丢弃并返回 ICMP。IPv6 路由器不分片。
  3. 数据报分片
    • 当数据报需要分片时,路由器 会将数据报拆分成多个片段。每个片段都会包含原始数据报的一部分数据。
    • 每个片段都有自己的 IPv4 首部,并保留相同 Identification;Fragment Offset 指示该片数据在 原始数据报载荷 中的位置,MF 指示原始数据报后面是否还有数据。
    • 路由器 将这些片段分别发送到下一个链路。
  4. 目标端重组
    • 当片段到达目标主机时,目标主机将重新组装这些片段以恢复原始的数据报。
    • 目标主机使用每个片段的标志和偏移量信息来确定如何正确地重组数据报。

分片例子:

10000 字节 IPv4 载荷先按 MTU 4000 分为三个分片

以上图为例,假设原始 IPv4 数据报有 20 B 首部和 10000 B 载荷,总长度为 10020 B,依次经过 MTU 为 4000 B 和 2500 B 的链路。第一个链路每个非末片最多承载

4000208×8=3976 B\left\lfloor\frac{4000-20}{8}\right\rfloor\times8=3976\ \mathrm B

数据,因此得到:

数据报 首部长度/B 数据长度/B 总长度/B 实际数据偏移/B 片偏移字段 MF ID
原始数据报 20 10000 10020 0 0 578
分片 1 20 3976 3996 0 0 1 578
分片 2 20 3976 3996 3976 497 1 578
分片 3 20 2048 2068 7952 994 0 578

分片字段规则

所有分片中的 IP 数据报首部中的标识(ID,Identification)字段保持不变。

如果是最后一个分片,则 MF(More Fragment)标识位为 0,否则 MF 标识位为 1。

片偏移(offset)字段以 8 字节为单位,其值为 分片实际偏移量 / 8

分片后应该满足的条件

  • 总长度 = 当前分片首部长度 + 数据长度 \le MTU
  • 原始数据报的最后一个分片 外,各片数据长度必须是 8 B 的整数倍,因为后续片的起始偏移要能用 8 B 单位表示;
  • 若一个 MF=1 的分片再次被拆分,拆出的最后一个子片 MF 仍为 1,因为原始数据报后面还有其他数据。

第二条链路 MTU=2500 B,每个非末片最多承载

2500208×8=2480 B\left\lfloor\frac{2500-20}{8}\right\rfloor\times8=2480\ \mathrm B

分片 1 会被再次拆为:

数据报 首部长度/B 数据长度/B 总长度/B 实际数据偏移/B 片偏移字段 MF ID
分片 1(进入前) 20 3976 3996 0 0 1 578
分片 1.1 20 2480 2500 0 0 1 578
分片 1.2 20 1496 1516 2480 310 1 578

原表把分片 1.2 的 MF 写成 0,这是错误的:分片 1 在原始数据报中本来就不是末片,因此它拆出的最后一个子片后面仍有分片 2、3,MF 必须保持 1。类似地,分片 2 可拆为偏移 497、807 的两个 MF=1 子片;分片 3 总长 2068 B,不超过 2500 B,保持偏移 994、MF=0。

下面的交互按两个 MTU 逐步拆分并同步更新数据长度、总长度、实际偏移、片偏移字段、MF 和 ID;静态表格保留作手算底稿。

过程流

IPv4 分片经过两个 MTU 的字段推进

让 20 B 首部加 10000 B 载荷的数据报依次经过 MTU 4000 和 2500,逐步计算每片数据长度、总长度、8 B 片偏移、MF 与相同 ID。

原始数据报计算首链路容量计算首链路容量第一次分片第一次分片计算次链路容量计算次链路容量再次拆分片 1计算次链路容量处理其余分片再次拆分片 1目的端重组处理其余分片目的端重组

当前查看:原始数据报IPv4 首部 20 B、载荷 10000 B、总长度 10020 B,Identification=578。

IP 组播

IP 组播(IP Multicast)允许发送方把一个数据报交给一个组播组,由网络只在需要的分支复制并送往多个成员。一个组可有一个或多个发送者,因此既可形成一对多,也可形成多对多通信;它不同于把报文无差别发给所有主机的广播。

组播路由树只在通往组成员的分支复制数据报

以下是 IP 组播的一些关键特点和概念:

  1. 组播组:IP 组播通信由一个或多个组播组组成,每个组都有一个唯一的组播组地址。组播组地址属于 IPv4 地址范围的特殊区域,通常以 224.0.0.0 到 239.255.255.255(D 类地址) 为范围。多个接收器可以订阅同一个组播组。
  2. 发送器:发送器是将数据报发送到组播组的设备。发送器只需发送一次数据报,然后由网络基础设施复制并传送给订阅了该组播组的接收器。
  3. 接收器:接收器是订阅了特定组播组的设备。它们希望接收组播组中的数据。接收器可以是单个主机、路由器或多个主机。
  4. IGMP(Internet Group Management Protocol):用于 IPv4 主机与本地组播路由器之间管理成员关系;IPv6 使用 MLD。IGMP 不负责在多台路由器之间计算完整组播路径。
  5. 组播路由:路由器间还需 PIM 等组播路由机制建立分发树,再结合各接口上的成员信息把数据报送往需要的分支。
  6. 组播范围:IP 组播地址可以分为不同的范围,如永久组播地址、临时组播地址和本地链路组播地址,以满足不同的需求和使用情况。

IPv6

IPv4 地址由不同层级机构分配。2011 年 IANA 的未分配地址池耗尽,随后多个区域互联网注册管理机构的常规可分配池也陆续枯竭;这不等于所有 IPv4 地址在同一天全部停止使用。为缓解地址紧张,主要采用 CIDR、NAT 并逐步部署 IPv6。

  • 采用 CIDR:通过更灵活的地址分配方式,提高 IPv4 地址的使用效率。
  • 使用 NAT:通过允许多个设备共享同一公网 IP 地址,有效节省全球 IP 地址资源。
  • 推广新一代 IPv6 协议:IPv6 拥有更大的地址空间,从根本上解决 IP 地址短缺问题。

前两种方法仅能延缓 IPv4 地址耗尽的进程,而只有 IPv6 的广泛应用才能彻底解决这一问题。

特点

  1. 扩展的地址空间:IPv6 使用 128 位地址,共约 3.4×10383.4\times10^{38} 种可能值,远大于 IPv4 的 32 位空间。
  2. 简化的报头:IPv6 报头相对于 IPv4 报头更简化,减少了路由器处理数据报的开销,提高了路由性能。
  3. 自动地址配置:IPv6 支持自动地址配置,其中设备可以通过 Router Advertisement 消息获取自己的 IPv6 地址,减少了手动配置的需要。
  4. 移动性扩展:Mobile IPv6 可在 IPv6 之上提供移动性支持,但“使用 IPv6”本身不自动保证无缝切换。
  5. IPsec 支持:IPv6 协议族支持 IPsec,但通信不会因为采用 IPv6 就自动获得加密和认证,仍需实际配置与密钥管理。
  6. 多播和任播:IPv6 对多播和任播提供了更强大的支持,使网络更加高效。
  7. 简化的头部处理:IPv6 取消了 IPv4 中的首部校验和,减少了路由器在处理数据报时的负担。
  8. 更好的 QoS 支持:IPv6 提供了更多的选项和字段来支持服务质量(Quality of Service)

基本首部

IPv6 固定 40 字节基本首部包含版本、流量类别、流标签、长度、下一首部、跳数与地址

IPv6 首部包含 8 个字段,总长度固定为 40 字节。字段如下:

  1. 版本(Version):表示协议版本,对于 IPv6,该字段值为 6。用于标识数据包的协议类型,确保接收端正确解析。
  2. 流量类别(Traffic Class):用于服务质量(QoS)管理,标记数据包的优先级或服务类型(如实时流量或低优先级流量)。
  3. 流标签(Flow Label):标识属于同一数据流的数据包,便于路由器进行特殊处理(如保持数据包顺序或优先级)。
  4. 有效载荷长度(Payload Length):表示基本首部之后的字节数,包括扩展首部和上层数据;普通取值不含 40 B 基本首部。
  5. 下一首部(Next Header):指明紧跟 IPv6 首部之后的首部类型(如 TCP、UDP 或扩展首部),类似于 IPv4 的“协议”字段。
  6. 跳数限制(Hop Limit):表示数据包在网络中可经过的最大跳数,每经过一个路由器减 1,若减至 0 则丢弃。
  7. 源地址(Source Address):标识数据包的发送方地址。
  8. 目标地址(Destination Address):标识数据包的目标接收方地址。

地址表示

IPv6 地址使用 128 位,通常写成由冒号分隔的 8 组 16 位十六进制数,例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334

IPv6 地址在表示时支持 缩写规则 以简化书写,具体如下:

  • 省略前导零:每个 16 位组可省略开头的零,但至少保留一个数字。例如 4BF5:0000:0000:0000:BA5F:039A:000A:2176 可先写为 4BF5:0:0:0:BA5F:39A:A:2176
  • 压缩连续全零组:一段连续的全零组可用 :: 代替;一个地址中只能使用一次 ::,否则无法确定各处省略了几组。上例可进一步写成 4BF5::BA5F:39A:A:2176

通过这些规则,IPv6 地址的表示更加简洁紧凑。

IPv6 数据报按照目的地址可以分为如下类型:

  • 单播地址(Unicast Address):用于将数据报从一个源节点传输到一个目标节点。
  • 多播地址(Multicast Address):用于将数据报传输到一组目标节点,而不是单个节点。
  • 任播地址(Anycast Address):用于将数据报传输到一组目标节点中的最近者(最接近的一个)。

IPv6 没有广播地址;需要“一对多”时使用多播。任播地址在格式上使用单播地址,由路由系统把报文送往拓扑意义上较近的一个实例。

过渡方案

IPv4 到 IPv6 的过渡是一个复杂的过程,因为两种协议不直接兼容。以下是两种主要的过渡方法:

  • 双栈技术:网络设备同时实现 IPv4 和 IPv6 两个协议栈,分别配置一个 IPv4 地址和一个 IPv6 地址,这样这台设备既能和 IPv4 网络通信,也能和 IPv6 网络通信。
    • 双协议栈主机使用 DNS 来获取目标主机使用的 IP 地址,根据其类型使用 IPv4 或 IPv6 进行通信。
  • 隧道技术:是指在 IPv6 数据报要进入 IPv4 网络时,把整个 IPv6 数据报封装成 IPv4 数据报的数据部分,使原来的 IPv6 数据报就好像在 IPv4 网络的隧道中传输。当 IPv4 数据报离开 IPv4 网络时,再将其数据部分交给主机的 IPv6 协议。

移动 IP

移动 IP(Mobile IP) 是一种网络协议,用于实现移动设备在不同网络之间切换时,仍能够保持连接并无缝通信。移动 IP 的主要目标是支持移动性,允许移动设备在移动时保持与互联网或企业网络的连接。

核心实体与地址如下:

  • 移动节点(MN):始终保留家庭地址(home address),上层连接可继续以它标识节点;
  • 归属代理(HA):位于家庭网络,维护“家庭地址 → 转交地址”的绑定,并替离网节点截获报文;
  • 转交地址(CoA):移动节点到达外地网络后获得的当前位置地址;Mobile IPv4 还可能使用外地代理提供的 CoA;
  • 通信对端(CN):与移动节点通信的普通主机。

典型通信过程:

  1. 移动节点在家庭网络使用永久家庭地址;
  2. 移动到外地网络后发现并获得 CoA;
  3. 移动节点向归属代理注册“家庭地址 → CoA”绑定;
  4. 通信对端仍把数据报发往移动节点的 家庭地址
  5. 归属代理在家庭网络截获这些数据报,并通过隧道封装转发到 CoA;
  6. 移动节点在外地网络解封装并接收数据。回程可直接发给通信对端形成三角路由,也可反向隧道回归属代理,取决于协议与网络策略;
  7. 移动节点返回家庭网络后取消注册,归属代理停止隧道转发,节点继续直接使用家庭地址。

原文把“通信对端直接把报文发到临时地址”作为基本流程,这会失去家庭地址对上层连接的稳定标识,不是 Mobile IP 的核心转发方式。

过程流

移动 IP 怎样保留家庭地址

逐步查看移动节点获得转交地址、向归属代理注册、通信对端仍发送到家庭地址、归属代理隧道转发,以及返回家庭网络后注销绑定。

位于家庭网络进入外地网络进入外地网络注册位置绑定注册位置绑定截获家庭地址报文截获家庭地址报文隧道到转交地址隧道到转交地址选择回程路径选择回程路径返回家庭网络

当前查看:位于家庭网络移动节点 MN 使用稳定的家庭地址 HoA,通信对端 CN 以 HoA 标识该节点。