网络层
4.1 网络层的功能
网络层是互联网的核心层次,负责将数据报从源主机传输到目的主机。
三大核心功能
- 路由选择:在网络中确定从源到目的的最佳路径(类似于GPS规划行车路线)
- 分组转发:将输入的分组从合适的端口输出(类似于每个路口的指示牌)
- 拥塞控制:当网络中流量过大时进行控制
网络层 vs 传输层
- 网络层提供主机到主机的通信(IP地址标识主机)
- 传输层提供进程到进程的通信(端口号标识进程)
4.2 路由算法
| 分类方式 | 类型 | 说明 |
|---|---|---|
| 静态 vs 动态 | 静态路由 | 手动配置,简单但无法应对拓扑变化 |
| 动态路由 | 自动计算,适应网络变化 | |
| 全局 vs 分布式 | 全局(链路状态LS) | 每个路由器知道全网拓扑(OSPF) |
| 分布式(距离向量DV) | 每个路由器只知道相邻路由器的信息(RIP) |
距离向量算法(RIP使用)
- 每个路由器维护一张路由表,记录到各目的网络的"距离"(跳数)
- 定期(每30秒)向邻居发送自己的路由表
- 收到邻居的路由表后,更新自己的路由表
- 更新原则:若邻居有新路径且距离更短,则采用;若走邻居能减少距离,则更新
- 好消息传播快,坏消息传播慢(慢收敛问题)
链路状态算法(OSPF使用)
- 路由器收集邻居信息,构建LS分组,泛洪给所有其他路由器
- 每个路由器都知道全网的拓扑结构
- 使用Dijkstra算法计算最短路径树
OSPF vs RIP
| 特性 | RIP | OSPF |
|---|---|---|
| 算法 | 距离向量 | 链路状态 |
| 度量 | 跳数(最多15跳) | 代价(带宽等) |
| 更新 | 定期(30s)广播 | 变化时触发更新 |
| 收敛 | 慢 | 快 |
| 适用范围 | 小型网络 | 大型网络 |
| 传输层 | UDP(端口520) | 直接基于IP(协议号89) |
4.3 IPv4分组格式
IP数据报首部格式(固定20B + 可选字段)
| 偏移(bit) | 字段 | 长度(bit) | 说明 |
|---|---|---|---|
| 0 | 版本 | 4 | IPv4为4 |
| 4 | 首部长度 | 4 | 单位4字节,最小5(20B),最大15(60B) |
| 8 | 区分服务 | 8 | 以前叫服务类型TOS |
| 16 | 总长度 | 16 | 首部+数据的总长度(字节),最大65535B |
| 32 | 标识 | 16 | 同一个分片的IP数据报有相同标识 |
| 48 | 标志 | 3 | DF(1=不能分片),MF(1=后面还有分片) |
| 51 | 片偏移 | 13 | 分片在原数据报中的相对位置,单位8字节 |
| 64 | 生存时间(TTL) | 8 | 每经过一个路由器减1,减到0丢弃 |
| 72 | 协议 | 8 | 上层协议(6=TCP,17=UDP,1=ICMP,89=OSPF) |
| 80 | 首部校验和 | 16 | 只校验首部,每跳重新计算 |
| 96 | 源IP地址 | 32 | 发送方IP |
| 128 | 目的IP地址 | 32 | 接收方IP |
| 160+ | 可选项 | 可变 | 很少使用 |
IP分片(重点!)
为什么需要分片?因为不同网络有不同MTU(最大传输单元),例如以太网MTU=1500B。
- 标识:同一个原始数据报的所有分片有相同标识
- 标志:DF=1不分片;MF=1表示后面还有分片,MF=0表示最后一个分片
- 片偏移:分片在原始数据报中的位置(除以8),单位是8字节
分片规则
- 片偏移的值为 8 的整数倍
- 每个分片的数据长度必须是 8 的倍数(除了最后一个)
- 分片后数据长度 = 原始数据报总长度 - 首部长度
- 分片后总长度 = 分片数据长度 + 首部长度
典型例题
例1:一个IP数据报总长度为4000B(首部20B),要经过一个MTU=1500B的以太网,求分片情况。
解:
- 数据部分 = 4000 - 20 = 3980B
- 每个分片最大数据 = (1500 - 20) 且为8的倍数 = 1480B(因为1480/8=185是整数)
- 分片数 = ceil(3980/1480) = 3
| 分片 | 总长度 | 标识 | MF | 片偏移 |
|---|---|---|---|---|
| 1 | 1500 | 12345 | 1 | 0 |
| 2 | 1500 | 12345 | 1 | 185(1480/8) |
| 3 | 1020 | 12345 | 0 | 370(2960/8) |
4.4 IPv4地址(重中之重!)
IP地址 = 网络号 + 主机号
网络号标识网络,主机号标识该网络中的特定主机。
分类地址
| 类别 | 前缀 | 网络号范围 | 网络数 | 每个网络主机数 | 最大地址 |
|---|---|---|---|---|---|
| A类 | 0 | 1~126 | 126 | 2²⁴-2 = 16777214 | 127.255.255.255 |
| B类 | 10 | 128.0~191.255 | 16384 | 2¹⁶-2 = 65534 | 191.255.255.255 |
| C类 | 110 | 192.0.0~223.255.255 | 2097152 | 2⁸-2 = 254 | 223.255.255.255 |
| D类 | 1110 | 224.0.0.0~239.255.255.255 | 组播地址 | - | - |
| E类 | 11110 | 240.0.0.0~255.255.255.254 | 保留 | - | - |
⚠️ 易错点:
- A类地址0.0.0.0和127.0.0.0保留(127.x.x.x是回环地址)
- 主机号全0表示本网络本身,全1表示广播地址——所以要减2
子网划分
通过从主机号中借出若干位作为子网号,将一个大网络划分为多个子网。
子网掩码:1表示网络位+子网位,0表示主机位。
| 子网掩码 | 斜杠表示 |
|---|---|
| 255.0.0.0 | /8(A类默认) |
| 255.255.0.0 | /16(B类默认) |
| 255.255.255.0 | /24(C类默认) |
典型例题
例2:某主机IP地址为192.168.5.121,子网掩码为255.255.255.248,求: (1)该主机所在子网的网络地址(2)该子网的广播地址(3)该子网可用IP地址范围
解:
- 255.255.255.248 = 11111111.11111111.11111111.11111000
- 借了5位子网号(原有C类24位网络号+5位子网号=29位),3位主机号
- 网络地址 = IP & 子网掩码 = 192.168.5.121 & 255.255.255.248
- 121 = 01111001,248 = 11111000
- 121 & 248 = 01111000 = 120
- 网络地址 = 192.168.5.120
- 广播地址 = 主机号全1(3位全1→7),120+7=127 → 192.168.5.127
- 可用IP范围 = 192.168.5.121 ~ 192.168.5.126(共6个)
CIDR(无分类域间路由选择——重点!)
CIDR消除了传统的A/B/C类地址的概念,使用斜杠记法:IP地址/网络前缀长度。
格式:a.b.c.d / n,其中n表示网络前缀的位数。
例如:128.14.32.0/20 表示前20位是网络前缀。
CIDR地址块
- 128.14.32.0/20 表示一个地址块
- 地址范围:128.14.32.0 ~ 128.14.47.255(2¹²=4096个地址)
- 最小地址:128.14.32.0(主机号全0)
- 最大地址:128.14.47.255(主机号全1)
CIDR的路由聚合(路由汇总) 将多个路由条目合并为一个,减少路由表大小。
例如:
- 172.18.128.0/24
- 172.18.129.0/24
- 172.18.130.0/24
- 172.18.131.0/24
聚合后:172.18.128.0/22(前22位相同:172.18.10 000000)
典型例题
例3:某单位有4个部门,需要IP地址数量分别为:A部门50个,B部门25个,C部门10个,D部门10个。现有一个C类网络192.168.1.0/24,请用子网划分(变长子网掩码VLSM)进行分配。
解:
- 先给大的分配:A需要50个 → 需要6位主机号(2⁶-2=62≥50)
- 子网掩码:/26(255.255.255.192)
- 地址范围:192.168.1.0/26(可用:1.1~1.62)
- B需要25个 → 需要5位主机号(2⁵-2=30≥25)
- 子网掩码:/27(255.255.255.224)
- 地址范围:192.168.1.64/27(可用:1.65~1.94)
- C需要10个 → 需要4位主机号(2⁴-2=14≥10)
- 子网掩码:/28(255.255.255.240)
- 地址范围:192.168.1.96/28(可用:1.97~1.110)
- D需要10个 → 同C
- 子网掩码:/28
- 地址范围:192.168.1.112/28(可用:1.113~1.126)
📌 408考点提示:子网划分和CIDR是必考大题!练习要点:
- 快速计算网络地址(IP & 子网掩码)
- 确定地址块的范围(网络地址 ~ 广播地址)
- 路由聚合(找共同前缀)
- VLSM从大到小分配
4.5 NAT(网络地址转换)
为什么需要NAT? IPv4地址不够用。私有IP地址可以在内部网络使用,通过NAT转换为公有IP访问互联网。
私有IP地址范围
- 10.0.0.0/8(1个A类网)
- 172.16.0.0/12(16个B类网)
- 192.168.0.0/16(256个C类网)
NAT的工作原理
- NAT路由器将内部主机的私有IP+端口映射为公有IP+新端口
- 建立NAT转换表,记录映射关系
- 收到的应答包根据转换表还原成私有IP+端口
NAPT(网络地址端口转换):多个私有IP共享一个公网IP,通过端口号区分。
4.6 ARP协议(地址解析协议)
功能:已知IP地址,解析出MAC地址。
工作原理(同一网络内)
- 主机A广播ARP请求:"谁的IP是x.x.x.x?请告诉我你的MAC地址"
- 目标主机B收到后,单播回复ARP响应:"我就是,我的MAC是xx:xx:xx:xx:xx:xx"
- 主机A将映射写入ARP高速缓存(有生命周期)
ARP跨网络:如果目的IP不在同一网络,则查路由表,得到下一跳路由器的IP地址,然后ARP解析下一跳路由器的MAC地址。
4.7 DHCP协议(动态主机配置协议)
功能:自动为主机分配IP地址、子网掩码、默认网关、DNS服务器等。
工作过程(DORA)
- Discover:客户端广播DHCP发现报文(寻找DHCP服务器)
- Offer:DHCP服务器广播提供报文(提供IP地址)
- Request:客户端广播DHCP请求报文(确认使用该IP)
- Ack:DHCP服务器广播确认报文(分配完成)
- 基于UDP,客户端端口68,服务器端口67
- 分配的IP地址有租用期,到期要续租
4.8 ICMP协议(网际控制报文协议)
功能:报告差错和提供询问信息。
ICMP报文类型
| 类型 | 报文 | 说明 |
|---|---|---|
| 差错报告 | 终点不可达 | 路由器找不到目的网络/主机 |
| 时间超过 | TTL减到0 | |
| 参数问题 | IP首部字段错误 | |
| 源点抑制 | 已废弃,用于拥塞控制 | |
| 询问 | 回送请求/应答 | ping命令使用 |
| 时间戳请求/应答 | 用于时钟同步 |
常用命令
- ping:发送ICMP回送请求,测试连通性
- traceroute(Windows: tracert):利用ICMP时间超过报文,跟踪路由路径
4.9 IPv6
IPv6 vs IPv4主要区别
| IPv4 | IPv6 | |
|---|---|---|
| 地址长度 | 32位(约43亿) | 128位(约3.4×10³⁸) |
| 地址表示 | 点分十进制 | 冒号十六进制(如:2001:0db8::1) |
| 首部长度 | 可变(20~60B) | 固定40B |
| 校验和 | 有 | 无(依赖上层) |
| 分片 | 路由器可做 | 只有源主机能做 |
| IPsec | 可选 | 原生支持 |
| 广播 | 有 | 无(用组播代替) |
IPv6地址简化写法
- 前导0可省略:2001:0db8:0000:0000:0000:8a2e:0370:7334 → 2001:db8:0:0:0:8a2e:370:7334
- 连续0可用双冒号替换(只能用一次):→ 2001:db8::8a2e:370:7334
IPv4到IPv6过渡技术
- 双协议栈:设备同时运行IPv4和IPv6
- 隧道技术:将IPv6数据报封装在IPv4数据报中传输
4.10 路由协议
RIP(路由信息协议)
- 基于距离向量算法
- 度量:跳数(最大15跳,16表示不可达)
- 每30秒广播一次路由表
- 使用UDP端口520
- 缺陷:收敛慢,度量单一,不适合大型网络
RIP路由表更新规则
- 如果新路由的目的网络不在表中 → 添加
- 如果下一跳相同 → 更新(即使距离变长也更新)
- 如果下一跳不同但距离更短 → 更新
典型例题
例4:路由器R1的路由表如下,现在收到R2的路由信息(下一跳都标记为R2),更新R1的路由表。
R1当前表:
| 目的网络 | 距离 | 下一跳 |
|---|---|---|
| 10.0.0.0 | 4 | R3 |
| 20.0.0.0 | 2 | R2 |
| 30.0.0.0 | 5 | R3 |
R2发来的信息:
| 目的网络 | 距离 |
|---|---|
| 10.0.0.0 | 3 |
| 20.0.0.0 | 3 |
| 40.0.0.0 | 2 |
解:
- 10.0.0.0:R2的距离为3,加1得4,与R1当前距离相等。但下一跳不同(R2 vs R3),距离相等不更新
- 20.0.0.0:R2的距离为3,加1得4 > 当前2。且下一跳就是R2(同一跳),所以强制更新为距离4
- 30.0.0.0:R2表中没有,不更新
- 40.0.0.0:新网络,添加(距离=2+1=3,下一跳=R2)
更新后:
| 目的网络 | 距离 | 下一跳 |
|---|---|---|
| 10.0.0.0 | 4 | R3 |
| 20.0.0.0 | 4 | R2 |
| 30.0.0.0 | 5 | R3 |
| 40.0.0.0 | 3 | R2 |
OSPF(开放最短路径优先)
- 基于链路状态算法
- 度量:代价(cost = 参考带宽/接口带宽)
- 直接基于IP(协议号89)
- 使用Dijkstra算法计算最短路径
- 支持分层路由(区域)
- 收敛快,适合大型网络
BGP(边界网关协议)
- 基于路径向量算法
- 用于AS(自治系统)之间的路由
- 基于TCP(端口179)
- 不是找最短路径,而是找"最好的可达路径"
- 交换的是路径信息(经过的AS序列)
RIP/OSPF/BGP对比总结
| RIP | OSPF | BGP | |
|---|---|---|---|
| 类型 | IGP(内部) | IGP(内部) | EGP(外部) |
| 算法 | 距离向量 | 链路状态 | 路径向量 |
| 度量 | 跳数 | 代价(带宽) | 路径属性 |
| 更新 | 定期30s | 变化触发 | 变化触发 |
| 传输 | UDP 520 | IP 89 | TCP 179 |
| 收敛 | 慢 | 快 | 较慢 |
| 适用范围 | 小型网络 | 大型网络 | 互联网核心 |
💡 记忆技巧:RIP像骑自行车(简单、慢、只适合短距离);OSPF像私家车(快、灵活、适合长途);BGP像国际航班(负责不同国家/AS之间的连接)。
4.11 网络层设备——路由器
路由器工作原理
- 从输入端口收到帧 → 剥去数据链路层帧头
- 提取IP数据报 → 检查首部(TTL减1,更新校验和)
- 查找路由表 → 确定输出端口
- 封装成帧 → 从输出端口发送
路由器 vs 交换机
| 特性 | 路由器 | 交换机 |
|---|---|---|
| 工作层 | 网络层 | 数据链路层 |
| 寻址依据 | IP地址 | MAC地址 |
| 隔离冲突域 | ✅ | ✅ |
| 隔离广播域 | ✅ | ❌ |
| 转发速度 | 较慢(软件查表) | 快(硬件转发) |
| 主要功能 | 路由选择、网络互联 | 帧转发 |
4.12 网络层核心总结
| 知识点 | 关键内容 |
|---|---|
| 网络层功能 | 路由选择、分组转发、拥塞控制 |
| IP地址 | 分类地址、子网划分、CIDR、VLSM |
| 路由算法 | 距离向量(RIP)、链路状态(OSPF)、路径向量(BGP) |
| 辅助协议 | ARP(IP→MAC)、DHCP(自动配置)、ICMP(差错报告) |
| IPv6 | 128位、无校验和、无广播、无路由器分片 |
| 分片 | 标识、MF标志、片偏移(×8) |
| 设备 | 路由器 |
📌 408考点提示:网络层是考试中最难的部分,分值占比很高。
- 子网划分/CIDR综合计算(几乎每年一个大题)
- IP分片计算
- RIP路由表更新
- VPN/ARP/DHCP/ICMP概念选择题