网络层¶
本章回答:数据跨越不同网络时,怎样根据目的地址选择下一站?学习顺序:
- 区分端到端目的与当前下一跳。
- 从二进制前缀计算子网,再做分配和聚合。
- 用最长前缀匹配查表,用 ARP 找本地下一跳。
- 读 IPv4 首部,按 MTU 和 8 B 单位分片。
- 推演 DV/Dijkstra,比较域内与域间路由。
- 把 DHCP、NAT、组播和 IPv6 放回数据路径。
把目的与下一跳分开¶
主机甲访问另一个网络的服务器,帧只负责送到当前链路的下一站,IP 分组则保留跨网络的目的地址。网络层负责寻址和逐跳转发。
路由是形成路径和转发表的过程,转发是每个分组到达后查表选择出口的动作。
IP 提供尽力而为的数据报服务:分组可能丢失、重复或乱序,需要可靠性时由其他机制补足。
数据报各自携带目的地址;虚电路先建立路径、沿途保存状态,再按局部虚电路标识转发,标识可以逐段改变。建立逻辑连接不必等于预留固定带宽。
读懂 IPv4 地址¶
IPv4 地址有 32 bit,通常分四段十进制,每段 8 bit。
192.168.8.142/26 的 /26 表示前 26 bit 是网络前缀,剩余 6 bit 标识该前缀内的地址。
掩码的前 26 bit 为 1,其余为 0,即 255.255.255.192。
8 bit 可表示 \(2^8=256\) 个值,即 0—255。二进制从左到右的位权为 128、64、32、16、8、4、2、1;所以 142 写成 10001110,因为 \(142=128+8+4+2\)。
前缀长度决定哪些位固定,掩码用 1 标出这些位。
网络地址等于 IP 与掩码按位与。最后一段 142 是二进制 10001110,与 11000000 得 10000000,即 128。
主机位全 1 得 191,因此整个块为 128—191,普通广播子网的可用主机为 129—190,共 \(2^6-2=62\) 个。
/31 点对点和 /32 单地址另有用途,不套减 2 规则。
按位与 AND 的规则是“两个位都是 1,结果才是 1”。这个子网保留前三段的 24 位,再保留第四段前 2 位,步骤如下:
网络前缀 10 固定,后六位可取 000000—111111。普通广播子网把全 0 留给网络地址、全 1 留给广播地址,故主机位组合减去两种。
这里的地址通常配置在网络接口上,一台多接口主机或路由器可以拥有多个 IP。
做题也可按块大小求:这一段有 6 个可变位,块长 64,边界为 0、64、128、192。142 落在 128 块。两个地址前三段相同仍可能不同子网,必须结合前缀长度比较。
- VLSM 为不同大小需求分配不同前缀。
- 普通子网要容纳 50 台主机,最少保留 6 主机位,选
/26; - 分配应按块边界对齐并避免重叠。
- CIDR 聚合反过来合并连续、对齐且拥有共同前缀的块:192.168.8.0/24 与 192.168.9.0/24 可精确合成 192.168.8.0/23;
- 9 与 10 虽相邻,却不能精确合为一个
/23,因为两者跨越对齐边界。
VLSM 是可变长子网掩码,CIDR 是无类别域间路由。分配时先对大需求选最小够用的块:50 台需 \(2^h-2\ge50\),取 \(h=6\),所以前缀 \(32-6=26\)。
聚合时看共同二进制前缀:第三段 8=00001000、9=00001001,只差最后 1 位,前面共 \(16+7=23\) 位相同;9 与 10=00001010 差两位,不能精确用 /23 包住且仅包住这两个块。
私有 IPv4 常用 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16;它们不能直接当作全局公网地址。
历史 A/B/C 类地址用于理解旧式默认边界,现代 CIDR 题应采用明确给定的前缀。
练习 1¶
题目
【自编】主机地址192.168.8.142/26,普通IPv4广播子网。求掩码、网络地址、广播地址和可用主机范围。
同学认为192.168.8.200可直接二层送达,在本机没有特殊路由时,这一判断是否正确?
参考解答
解答
- 掩码255.255.255.192;
- 每块64个地址。
- 142落在128—191块:网络192.168.8.128,广播192.168.8.191,主机192.168.8.129—190,可用62个。
- 200属于192—255块,不在本子网。
- 正常应交给可达网关,不能只比较前三段。
判分要点
- 1分:掩码与128—191块边界。
- 1分:主机范围排除网络/广播地址,62个。
- 1分:200异网段,判断用/26而非默认/24。
查表后怎样发出去¶
主机也有路由表。在只有常规直连路由和默认网关的题中,可先判目的是否在本地子网:在本地就直接交给目的主机,异网段交给网关;若题目给特殊路由,要按路由表匹配。
ARP(地址解析协议)在本地链路中查询“某个 IPv4 地址对应什么 MAC”。ARP 请求可广播,收到回答后缓存映射。
去远端时查询的是本地网关 MAC,ARP 广播不会由普通路由器替你找远端 MAC。
路由器采用最长前缀匹配:在所有匹配目的地址的表项中选前缀最长的。
若表中同时有 10.0.0.0/8、10.1.0.0/16、10.1.2.0/24 和默认 0.0.0.0/0,目的 10.1.2.9 匹配四项,选 /24,因为它最具体。
flowchart TD
A["IP包目的:远端服务器"] --> B["路由表选择出口与本地下一跳"]
B --> C{"该下一跳的MAC已缓存?"}
C -->|"否"| D["在本地链路ARP查询下一跳IP"]
C -->|"是"| E["帧目的MAC:本地下一跳"]
D --> E
E --> F["下一台路由器拆帧、查表、重新封装"]
F --> G["持续逐跳转发,IP目的仍为服务器"]
IP 负责跨网络目的,MAC 负责本跳交付;有 NAT 等机制时字段还可能被改写。
首部与分片¶
- IPv4 首部的版本字段为 4;
- IHL 用 4 B 为单位表示首部长,通常 IHL=5 即 20 B;
- 总长度含首部和数据。
- TTL 每经过路由器转发递减,耗尽时丢弃,可触发 ICMP 超时消息。
- 协议字段标识上层,如 TCP、UDP;
- 首部校验和只保护 IPv4 首部。
首字节十六进制 46 表示版本 4、IHL=6,即首部 24 B;若总长度字段为 003C,则总长 60 B,载荷为 36 B。先解释字段单位,再做减法。
MTU 是链路能承载的最大 IP 分组大小。IPv4 分组过大且 DF=0 时可以分片,各片各有首部,使用相同标识归属于原分组;MF=1 表示后面还有片。
片偏移以 8 B 为单位,表示本片数据相对原数据的起点,因此非末片数据长度必须是 8 的倍数。目的端重组,路由器通常不替它完成重组。
先扣首部,再把数据空间向下取整到 8 B 的倍数。若 MTU 为 \(M\) B、各片首部长 \(h\) B,则非末片最大数据量为
\(\lfloor\ \rfloor\) 表示向下取整。例如 MTU=819 B、首部=20 B,虽剩 799 B,非末片最多只能放 \(8\lfloor799/8\rfloor=792\) B。末片可小于这个量且不必为 8 的倍数。
DF 是禁止分片标志,MF 是更多分片标志;两者分别控制“能否拆”与“后面还有没有”。
例子与推演
例如总长 2020 B、首部 20 B,出口 MTU=820 B:原数据 2000 B,每个非末片最多 800 B,分片如下。
| 片 | 数据长度 | 含首部总长 | 偏移 | MF |
|---|---|---|---|---|
| 1 | 800 | 820 | 0 | 1 |
| 2 | 800 | 820 | 100 | 1 |
| 3 | 400 | 420 | 200 | 0 |
- 核对 \(800+800+400=2000\);
- 偏移从原数据起点算,不包含首部。
- 若 DF=1 而出口不能承载,路由器应丢弃并在适用条件下反馈需要分片的 ICMP 信息。
- ICMP 用于错误报告与诊断,如 ping 的回显、traceroute 利用的超时;
- 它不保证错误报告一定送达,也不保证原分组恢复。
练习 2¶
题目
【自编】甲192.168.1.10/24向192.168.2.20发包, 网关192.168.1.1,ARP缓存为空,无NAT。 甲首个承载该IP包的帧应采用什么目的地址?
- A. IP为网关,MAC为远端主机
- B. IP为远端主机,MAC为网关
- C. IP为网关,MAC为广播地址
- D. IP为远端主机,MAC为远端主机
参考解答
答案:B。 甲通过ARP获取本地网关MAC,再将目的IP仍为远端主机的包封装给网关; ARP广播不跨路由器找远端MAC。
练习 3¶
题目
【自编】IPv4总长2020 B,首部20 B,无选项,DF=0。 出口MTU为620 B,各分片首部均20 B。 求每片的数据长度、总长度、偏移字段与MF。 最后核对数据总量;偏移不含首部。
参考解答
解答
- 原数据2020−20=2000 B。
- 非末片最多600 B,600是8的倍数。
- 四片数据长:600、600、600、200 B。
- 总长度:620、620、620、220 B。
- 偏移:0、75、150、225,单位8 B。
- MF依次:1、1、1、0。
- 数据和2000 B;
- 含四份首部共2080 B。
判分要点
- 1分:先扣20 B,非末片数据按8 B对齐。
- 1分:四片长度正确且数据和2000 B。
- 1分:偏移由0/600/1200/1800除8,MF正确。
路由信息怎样更新¶
距离向量 DV 让每个路由器告诉邻居“我到各目的多远”。设 \(c(x,v)\) 是 x 到邻居 v 的代价,\(D_v(y)\) 是邻居报告的到 y 距离,x 重新比较所有当前候选:
例子与推演
例如 A 到 B 为 2、到 C 为 5,B 到 D 报 2、C 报 3,则 A 选经 B,代价 4。
后来 B 改报 10,当前候选变成 12 与 8,A 应改经 C;不能拿失效的历史最小值 4 继续比较。
同步轮次题中,每轮只使用上一轮的表。设链为 A—B—C—D,代价依次 2、1、3,另有 A—D 代价 12:
| A 的表 | 到 A | 到 B | 到 C | 到 D |
|---|---|---|---|---|
| 初始只知直连 | 0 | 2 | 无穷 | 12 |
| 第 1 轮 | 0 | 2 | 3 | 12 |
| 第 2 轮 | 0 | 2 | 3 | 6 |
B 在第 1 轮才学会经 C 到 D 为 4,A 要到第 2 轮才能用它。故障后,邻居可能互相相信一条实际依赖自己的旧路径,形成计数到无穷。
水平分割、毒性逆转和触发更新可缓解问题,但不能随意宣称消除所有动态环路。
链路状态 LS 则把本地链路及代价传播出去,各节点建立拓扑数据库,再独立算最短路。序列号和老化帮助区分新旧信息。Dijkstra 从源点开始,反复选暂定距离最小的未确定点,再经它松弛邻居。
例子与推演
- 例如 AB=2、AC=6、BC=1、BD=5、CD=2。
- 从 A 出发先暂记 B=2、C=6;
- 确定 B 后改 C=3、D=7;
- 确定 C 后改 D=5;
- 最后确定 D。
- 到 D 的路径 A→B→C→D 代价 5,下一跳是 B,不能把最终目的 D 填到下一跳栏。
“松弛”就是比较旧距离与经过新确定节点的候选距离,保留较小值。边权非负时,Dijkstra 可按下表操作:
| 操作后 | 已确定节点 | 到 B 暂定距离 | 到 C 暂定距离 | 到 D 暂定距离 |
|---|---|---|---|---|
| 从 A 初始化 | A | 2 | 6 | 无穷 |
| 选 B,检查 B 的邻边 | A、B | 2 | \(\min(6,2+1)=3\) | \(2+5=7\) |
| 选 C,检查 C 的邻边 | A、B、C | 2 | 3 | \(\min(7,3+2)=5\) |
| 选 D | A、B、C、D | 2 | 3 | 5 |
flowchart LR
A["A"] ---|"2"| B["B"]
A ---|"6"| C["C"]
B ---|"1"| C
B ---|"5"| D["D"]
C ---|"2"| D
DV 与 LS 的记忆差异在“知道什么”:DV 知道邻居报来的距离,用邻居代价加通告;LS 收集拓扑,再在本机计算整条路径。同步 DV 题严格隔开轮次,不能在同一轮连用别人刚更新的信息。
配置与地址转换¶
DHCP 让主机取得 IP、掩码、网关、DNS 等租约配置,常见四步为 Discover→Offer→Request→ACK。
ACK 表示配置确认,不能证明所有路由、DNS 和远端服务都正常。
NAT 改写地址,常见 NAPT 还改端口,使多个内网连接共享公网地址。
例如 10.0.0.2:5000 与 10.0.0.3:5000 分别映射为公网地址的 40001、40002;回复按映射还原。服务器看到的是改写后的源地址和端口。
映射需要状态,外部主动发起连接通常还需明确规则,NAT 本身也不等于完整防火墙。
练习 4¶
题目
【自编】无向边AB=2、BC=1、CD=3、AD=12。DV初始化只知自己和直连邻居。每轮交换上一轮表,再同时更新;无故障。
- ① 写A初始、第一轮、第二轮到A/B/C/D的距离。
- ② 第二轮到D的下一跳是谁?
- ③ DHCP ACK同时给A网关和DNS地址,是否因此保证经该路径能访问任意网站?
参考解答
解答
- A初始为(0,2,∞,12)。
- 第一轮为(0,2,3,12),第二轮为(0,2,3,6)。
- 第一轮B从C得知到D为1+3=4,A第二轮才能采用2+4=6,下一跳B。
- DHCP ACK确认租约配置,不保证路由、DNS服务和网站应用均正常,更不保证任意目标都可达。
判分要点
- 按同步轮次,不能第一轮偷用B刚更新的4。
- A到D最终代价6、下一跳B,非直接写D。
- 区分获得配置与端到端成功。
三种路由协议¶
自治系统 AS 是采用统一管理与路由政策的一组网络。AS 内部可用 RIP 或 OSPF,AS 之间常用 BGP。
RIP 是距离向量协议,以跳数为度量,经典最大可达距离为 15,16 表示不可达。
OSPF 使用链路状态,Hello 发现邻居,邻接建立后同步链路状态数据库;广播网络的 DR/BDR 减少相关邻接与通告开销,DR 不必成为所有数据的必经转发点。
OSPF 用区域减少详细拓扑传播范围。区域边界路由器 ABR 连接区域并传递区域间可达性,ASBR 引入外部路由;一个区域内的详细数据库不等于掌握其他区域所有内部链路。
区域类型取决于配置,不能只因“单出口”就叫 stub。
BGP 传播前缀及路径属性,AS_PATH 记录经过的 AS,有本 AS 号的路径通常应因环路风险拒绝。选路服从政策,不能一概选 AS 数最少的路径。
例如题设先比本地偏好,偏好 200 的三 AS 路径可胜过偏好 100 的两 AS 路径;只有候选合法、可达后才比较这些优先级。
一份数据交给多人¶
单播发给一个接口;广播发给广播域所有成员;组播发给某个组的成员。IGMP 用于 IPv4 主机向本地路由器报告组成员关系,不负责单独计算全网组播树。
简单反向路径转发 RPF 检查组播分组是否从“本机通往源地址的单播方向”到来,错误接口来的副本可丢弃,再结合树和剪枝减少重复与无成员分支。
若通往源 S 的接口为 x,副本从 y 来,就不通过该检查。任播让多个节点提供同一服务地址,由路由选择一个适合的实例;“近”通常是路由意义上的近。
练习 5¶
题目
【自编】
- ① OSPF中area1的路由器能否只凭自身区域LSDB,声称掌握area2每条内部链路?ABR做什么?
- ② 本地BGP政策明确先比较本地偏好,再比路径长。两可达候选:
[20,30]偏好100;[40,50,30]偏好200。选哪条?若自身AS号是50,后一通告应怎样处理? - ③ 到源S的单播下一跳接口是x,组播副本从y到达。按简单RPF会怎样?IGMP能否单独计算全网组播树?
参考解答
解答
- 区域内详细拓扑不等于全AS所有内部链路;
- ABR连接区域并传播相应区域间可达性与代价。
- 自身AS不在路径时按给定政策选偏好200的长路径。
- 若自身为AS50,含50的AS_PATH提示环路,应拒绝;
- 不能先用高偏好接受有自身AS的环路路径。
- 从y而非x来的副本不通过所设RPF检查。
- IGMP维护本地成员关系,组播路由还需另外机制。
判分要点
- 明确区域信息边界与ABR职责。
- 政策可优于路径长度,但环路检查仍适用。
- RPF按到源方向检查;
- 成员管理不等于路由计算。
IPv6 与其他转发方式¶
- IPv6 地址 128 bit,通常写成十六进制组;
- 一处连续全零组可用
::压缩,一条地址中只能这样压缩一次。 - 基本首部固定 40 B,使用扩展首部承载附加信息,不设置 IPv4 那种首部校验和。
- IPv6 用邻居发现代替 ARP,用组播等机制完成相应功能,没有 IPv4 式广播;
-
路由器不在途中分片,过大时反馈,源端据路径条件调整或分片。
-
双栈让设备同时运行 IPv4/IPv6;
- 隧道把一种协议分组装入另一种协议传输。
- 移动 IP 则区分长期归属地址与当前位置的转交地址,通过有认证的绑定使数据到达移动节点;
- 传统方式可能形成先到归属网络再转交的三角路径。
练习 6¶
题目
【自编】距离向量中,A到邻居B代价2、到C代价5。 此前B宣称到D为2,C宣称为3,A经B到D为4。 现B更新到D为10,C仍为3,无其他候选路径。 A能否保留旧距离4?求新距离与下一跳。
参考解答
解答
- 不能保留:原4依赖B的旧通告,已不再有效。
- 经B的新候选为2+10=12,经C为5+3=8。
- 应更新为距离8、下一跳C。
- 修正规则应重新比较当前候选,不只接受更小通告。
判分要点
- 1分:解释旧路由失效原因。
- 1分:候选12和8,新下一跳C。
- 1分:指出只取新值与历史最小值会保留失效路由。
练习 7¶
题目
【自编】将IPv4发送程序迁到IPv6,路径某跳MTU不足。 关于地址解析和分片,哪项迁移方案正确?
- A. 继续使用ARP,要求中间路由器分片
- B. 改用邻居发现,要求中间路由器分片
- C. 改用邻居发现,由源端处理分片需求
- D. 继续使用ARP,由源端处理分片需求
参考解答
答案:C。 IPv6用邻居发现而非ARP;中间路由器不做IPv4式分片, 源端应按路径条件调整发送或处理分片。
MPLS 在入口压入标签 push,中间按标签交换 swap,适当位置弹出 pop。
标签在对应转发上下文中局部有效,同一个 IP 分组可以先带标签 100,再改成 40;标签不等于全网不变的目的 IP。
标签栈的 S 位标记是否为栈底,具体弹出哪个标签由转发表动作决定。把帧地址、IP 地址、端口、标签分别放回各自层次,才能跟踪一次跨层转发。
练习 8¶
题目
【自编】主机H为10.1.2.70/26,网关10.1.2.65。目的D为203.0.113.9,ARP为空;无代理ARP或特殊路由。边界NAPT把H:5000映射到198.51.100.2:41000。核心入口push标签100,中间按表swap为40,出口pop。
- ① H先ARP问谁?首个数据帧目的IP与MAC指向谁?
- ② 服务器看到的源IP、端口是什么?
- ③ 标签100、40能否当作全网不变的目的IP?
参考解答
解答
- H属于10.1.2.64/26,D异网段。
- H先ARP查询10.1.2.65,数据帧目的MAC为网关MAC;
- 该帧所承载IP包目的仍为203.0.113.9。
- 服务器看到源198.51.100.2、端口41000。
- MPLS标签在相应转发上下文局部有意义,push/swap/pop作用于标签栈,不把100改写成IP。
- 本题给定的不同标签仍可承载同一个IP目的。
判分要点
- 掩码判断与ARP查询的是本地下一跳。
- 正确区分链路MAC、原IP目的与NAPT源字段。
- 标签是局部转发标识,不是全球IP或固定端到端值。
记忆要点¶
本章记忆要点
- IP 描述跨网目的,MAC 描述当前一跳;路由计算路径,转发执行查表。
- 子网先数主机位,按位与求网络地址;减 2 只适用于通常的 IPv4 广播子网。
- 路由表选最长匹配前缀;ARP 只找本地链路上的下一跳。
- 分片先扣首部、非末片数据按 8 B 对齐;偏移基于原数据,不包含首部。
- DV 用当前邻居通告,LS 用拓扑算路;路径代价、最终目的、下一跳各填各的栏。
- DHCP 给配置,NAT 改字段;IPv6 邻居发现取代 ARP,途中路由器不分片。