4计算机网络:自顶向下方法(原书第8版)

网络层

数据平面和控制平面

IP协议IPv4/IPv6路由算法BGPOSPFSDN

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第4章:网络层——数据平面(The Network Layer: Data Plane)

一、导读

4.1 本章学习目标

网络层负责将分组从源主机路由到目的主机。本章分为两部分:数据平面(转发)和控制平面(路由)。本章聚焦数据平面,讲解 IP 协议、IPv4/IPv6、NAT、以及路由器的工作原理。

本章的核心学习目标包括:

  • 理解网络层的功能:路由和转发
  • 掌握 IP 协议:IPv4 数据报格式、分片、TTL
  • 理解 IPv4 编址:分类编址、CIDR、子网划分
  • 掌握 NAT 的工作原理:地址转换的利与弊
  • 理解 IPv6:为什么需要 IPv6、IPv6 数据报格式
  • 掌握路由器的工作原理:输入端口、交换结构、输出端口

4.2 为什么网络层如此重要

网络层是互联网的核心。IP 协议使得全球数十亿设备能够互联互通。理解网络层的工作原理,对于开发网络应用、配置网络设备、调试网络问题至关重要。

网络层的核心挑战是:如何在数以百万计的网络中,找到一条从源到目的的路径?这个问题可以分解为两个子问题:路由(routing)——确定路径;转发(forwarding)——执行路径。本章主要关注转发,下一章将讨论路由。

4.3 核心问题引导

在阅读本章时,请带着以下问题思考:

IP 数据报在传输过程中如何避免无限循环?

为什么 IPv4 地址会耗尽?NAT 是如何缓解这个问题的?

子网划分的目的是什么?如何计算子网掩码?

IPv6 相比 IPv4 有哪些根本性的改进?

路由器内部是如何工作的?


二、核心概念详解

2.1 数据平面 vs 控制平面

网络层有两个核心功能:

  • 数据平面(Data Plane):转发(forwarding)——将分组从输入端口移动到输出端口
  • 控制平面(Control Plane):路由(routing)——确定分组从源到目的的路径
控制平面:决定路由路径
数据平面:执行分组转发

传统路由器中,数据平面和控制平面是紧密耦合的。在 SDN(软件定义网络)架构中,两者被分离:控制平面由远程控制器实现,数据平面由交换机执行。

2.2 IP 数据报格式

IPv4 数据报的关键字段:

字段长度功能
版本4 bitIP 版本(4 或 6)
首部长度4 bit首部长度(以 4 字节为单位)
服务类型8 bit区分服务(DSCP + ECN)
总长度16 bit数据报总长度(字节)
标识16 bit用于分片
标志3 bitDF(不分片)、MF(更多分片)
片偏移13 bit分片偏移量
生存时间8 bitTTL,防止无限循环
协议8 bit上层协议(TCP=6, UDP=17)
首部校验和16 bit首部完整性校验
源 IP 地址32 bit发送方 IP
目的 IP 地址32 bit接收方 IP

TTL(Time To Live)字段是防止分组无限循环的关键机制。每经过一个路由器,TTL 减 1;当 TTL 为 0 时,分组被丢弃并返回 ICMP Time Exceeded 消息。traceroute 工具正是利用了这一机制。

IP 分片发生在当数据报大小超过链路的 MTU(最大传输单元)时。以太网 MTU 为 1500 字节。分片在目的地重组,这增加了目的主机的负担。IPv6 取消了中间路由器的分片功能,只允许源主机分片。

2.3 IPv4 编址

2.3.1 分类编址

早期 IPv4 采用分类编址:

类别范围网络位主机位
A1.0.0.0 - 126.255.255.255824
B128.0.0.0 - 191.255.255.2551616
C192.0.0.0 - 223.255.255.255248

分类编址的问题在于灵活性差:一个需要 300 个 IP 地址的组织只能申请 B 类地址(65534 个),造成大量浪费。

2.3.2 CIDR(无类别域间路由)

CIDR 使用 /n 表示前缀长度,如 192.168.1.0/24 表示前 24 位是网络前缀。CIDR 允许任意长度的前缀,大大提高了地址分配的灵活性。CIDR 还支持路由汇聚(route aggregation),将多个路由表项合并为一个,减少路由表大小。

2.3.3 子网划分

子网划分将一个大网络分成多个小网络:

原始网络:192.168.0.0/16(65534 个主机)
子网划分:192.168.1.0/24(254 个主机)
         192.168.2.0/24(254 个主机)
         ...

子网划分的关键是子网掩码(subnet mask)。例如 /24 的子网掩码是 255.255.255.0。将 IP 地址与子网掩码做按位与运算,即可得到网络地址。

2.4 NAT(网络地址转换)

NAT 将内部私有 IP 地址转换为外部公有 IP 地址:

内部网络                    NAT 路由器                    互联网
192.168.1.100 ──→ 203.0.113.1:5001 ──→ 服务器
192.168.1.101 ──→ 203.0.113.1:5002 ──→ 服务器

NAT 使用端口号来区分不同的内部连接。NAT 路由器维护一个转换表,记录内部 IP:端口 到外部 IP:端口 的映射。NAT 的优点是节省公有 IP 地址,隐藏内部网络结构;缺点是违反端到端原则,P2P 应用难以穿透 NAT。

2.5 IPv6

IPv4 地址空间(43 亿)已经耗尽,IPv6 提供 128 位地址空间(3.4×10^38)。

IPv6 的改进:

  • 更大的地址空间(128 位 vs 32 位)
  • 更简单的首部(固定 40 字节,去掉了校验和、分片字段)
  • 更好的扩展性(扩展首部)
  • 内置安全性(IPsec)
  • 取消了分片(只允许源主机分片)
  • 取消了校验和(每跳重新计算,改为由传输层和链路层负责)

三、深入分析

3.1 DHCP(动态主机配置协议)

DHCP 自动为设备分配 IP 地址:

设备发送 DHCP Discover(广播)

DHCP 服务器回复 DHCP Offer

设备发送 DHCP Request

DHCP 服务器发送 DHCP ACK

DHCP 不仅分配 IP 地址,还提供子网掩码、默认网关、DNS 服务器等配置信息。DHCP 分配的地址是有租期的,租期到期后需要续约。

3.2 ICMP(互联网控制报文协议)

ICMP 用于网络诊断和错误报告:

  • ping:使用 ICMP Echo Request/Reply
  • traceroute:使用 ICMP Time Exceeded
  • 目的不可达:当分组无法交付时返回

ICMP 本质上是 IP 的辅助协议,但它工作在网络层之上(使用 IP 传输)。

3.3 路由器的工作原理

路由器由三部分组成:

  • 输入端口:接收分组、查表转发、执行数据平面功能
  • 交换结构:将分组从输入端口移动到输出端口(可通过内存、总线或交叉开关实现)
  • 输出端口:缓存分组、发送到链路

当交换结构的速率不足以同时处理多个输入到输出的转发时,就会在输入端口或输出端口产生排队。输入端口排队可能导致队头阻塞(HOL blocking)问题。


四、实践案例

4.1 案例一:子网划分实战

假设某组织获得了 200.10.56.0/22 的地址块,需要将其划分为 4 个子网,每个子网至少支持 200 台主机。

原始地址块:200.10.56.0/22(1022 个可用主机地址)
子网掩码:255.255.252.0

划分为 4 个 /24 子网:
子网1:200.10.56.0/24(254 个主机)
子网2:200.10.57.0/24(254 个主机)
子网3:200.10.58.0/24(254 个主机)
子网4:200.10.59.0/24(254 个主机)

4.2 案例二:使用网络工具诊断 IP 层问题

bash
# 查看本机 IP 配置
ip addr show
ip route show

# 测试连通性
ping www.google.com

# 查看路由路径
traceroute www.google.com

# 查询 DNS
nslookup www.google.com
dig www.google.com

五、常见误区

5.1 误区一:"IP 保证可靠传输"

IP 是不可靠的,不保证交付、不保证顺序、不重传。可靠传输由 TCP 提供。IP 只提供"尽最大努力"的传输服务。

5.2 误区二:"NAT 是安全的"

NAT 隐藏内部地址只是"隐蔽性安全"(security through obscurity),不是真正的安全。防火墙才是安全的第一道防线。NAT 的设计初衷是解决 IP 地址短缺问题,而非安全。

5.3 误区三:"IPv6 已经全面替代 IPv4"

虽然 IPv6 的部署在持续增长,但 IPv4 仍然占据主导地位。目前互联网上两种协议共存,通过隧道和翻译技术(如 NAT64)实现互操作。

5.4 难点:理解子网划分

子网划分需要理解二进制运算和位掩码。关键操作是:将 IP 地址与子网掩码做按位与运算,得到网络地址。判断两个 IP 是否在同一子网,就是比较它们的网络地址是否相同。


六、本章小结

第4章讲解了网络层的数据平面:

IP 协议 是互联网的核心协议,负责分组的路由和转发

IPv4 编址 采用分类编址和 CIDR

NAT 解决 IP 地址短缺问题

IPv6 提供更大的地址空间

路由器 通过查表和转发实现分组传输

后续章节将讲解网络层的控制平面——路由算法。理解数据平面是理解控制平面的前提:只有知道了路由器如何转发分组,才能理解路由算法如何决定分组的路径。


七、思考题

假设一个 IP 数据报的总长度为 4000 字节,首部长度为 20 字节。它需要经过一条 MTU 为 1500 字节的链路。请问会被分成几个分片?每个分片的长度、标识、标志和偏移量分别是多少?

一个组织获得了 192.168.1.0/24 的地址块。需要将其划分为三个子网,分别支持 100、50 和 25 台主机。请给出每个子网的地址范围和子网掩码。

NAT 为什么被认为违反了互联网的端到端原则?NAT 穿透(NAT traversal)有哪些常见的解决方案?

IPv6 为什么要取消首部校验和?这样做有什么优缺点?

比较路由器的三种交换结构(内存、总线、交叉开关)的优缺点。什么是队头阻塞(HOL blocking)问题?


4/9网络层
0%