04 · 网络层:IP 与路由(Network Layer: IP & Routing)

📅 预计 90 分钟 | ⭐ 本章主题:给每台主机发"全国身份证",负责跨网络把数据送到家门口


4.0 先给直觉:网络层是"全国邮政总局"

链路层只管小区内投递(MAC 门牌)。但两台电脑可能一个在北京、一个在广州,中间隔着成百上千个路由器。谁负责"从北京把数据送到广州"?——网络层

把它想成全国邮政总局

  • 每个城市(网络)有编号——这就是 IP 地址,让数据能"跨网络"寻址。
  • 邮政总局看地址决定"下一站发往哪个城市"——这就是路由(routing)
  • 路上想确认"对方活着吗"、"能通吗"——用 ICMPping 就是它)。
  • 到了对方城市的邮局,要查"这个门牌号具体在小区哪一栋"——用 ARP 把 IP 转成 MAC。

网络层的核心命题就三个:IP 地址怎么分(寻址)、数据走哪条路(路由)、怎么问路和报错(ARP/ICMP)

4.1 IP 地址与分类 ⭐⭐⭐

每台主机的"全国身份证"

IPv4 地址是 32 位二进制数,通常写成点分十进制——每 8 位一组,转成十进制用点隔开:

二进制: 11000000.10101000.00000001.00000001
十进制: 192.168.1.1        (每段范围 0~255)

IPv4 地址分两部分:

  • 网络号(netid):标识"这台主机属于哪个网络"。
  • 主机号(hostid):标识"在这个网络里是哪台主机"。

分类编址(传统 A/B/C 类)——按前几位区分,决定网络号/主机号占多少位:

类别 首字节范围 默认掩码 网络数 每网主机数 用途
A 1 ~ 126 255.0.0.0 126 约 1600 万 大型网络
B 128 ~ 191 255.255.0.0 16384 约 6.5 万 中型网络
C 192 ~ 223 255.255.255.0 约 200 万 254 小型网络
D 224 ~ 239 组播(multicast)
E 240 ~ 255 保留/实验

几个关键点:

  • A 类"1~126"没有 0 和 127:0 开头保留,127 开头是回环地址(loopback),127.0.0.1 就是"本机自己"。
  • 每个网络第一个地址是网络地址(主机号全 0,如 192.168.1.0),最后一个地址是广播地址(主机号全 1,如 192.168.1.255),都不能分配给主机,所以 C 类网络可用主机是 2⁸−2=254。
  • 子网掩码(subnet mask):用来区分"哪部分是网络号、哪部分是主机号"。掩码中网络号对应位为 1,主机号对应位为 0。255.255.255.0 表示前 24 位是网络号。

💡 记忆口诀"A 大网 B 中网 C 小网;127 回环自己"。掩码 255.255.255.0 的简写就是 /24(24 个连续的 1)。

⚠️ 常见错误

  1. 以为 127 网段可分配给主机:127 是回环专用(127.0.0.1 本机自测),不能给局域网主机。
  2. 网络地址和广播地址当成可用主机:主机号全 0(网络地址)、全 1(广播地址)都不能分给设备,算可用主机要 -2
  3. A/B/C 类首字节记混:A=1126,B=128191,C=192~223。127 被回环占用,中间 127 没有。

4.2 子网划分与 CIDR ⭐⭐⭐

把大网络"切小块",更省地址、更灵活

一个 B 类网络有 6.5 万台主机,现实中根本用不完,太浪费。子网划分(subnetting) 就是把原来的主机号再借几位当子网号,把一个大网切成多个小网。

思路:

原 C 类网络:192.168.1.0/24 (网络号 24 位,主机号 8 位)
借用主机号最高 2 位当"子网号" → 掩码变成 /26(255.255.255.192)
可划出 2² = 4 个子网,每个子网可容纳 2⁶−2 = 62 台主机

子网1: 192.168.1.0   (000 00000...)
子网2: 192.168.1.64  (010 00000...)
子网3: 192.168.1.128 (100 00000...)
子网4: 192.168.1.192 (110 00000...)

CIDR(Classless Inter-Domain Routing,无类域间路由) 则彻底抛开 A/B/C 分类,用"IP/前缀长度"表示网络范围,比如 192.168.1.0/24 表示前 24 位是网络号。好处是更灵活、缓解地址耗尽,还能把多个连续的小网**聚合(汇总)**成一个大网(路由聚合)。

常用的两个计算:

可用主机数 = 2^(主机位数) − 2
例:/24 → 2⁸−2 = 254;/26 → 2⁶−2 = 62

把两个子网合并(聚合):
  192.168.1.0/25  (192.168.1.0 ~ 192.168.1.127)
  192.168.1.128/25(192.168.1.128 ~ 192.168.1.255)
  聚合 → 192.168.1.0/24

💡 记忆口诀"借位切子网,/前缀标长度"——子网划分是"借主机号位当子网号",CIDR 用"斜杠+位数"统一表达网络范围。

⚠️ 常见错误

  1. 可用主机数忘了减 2:网络地址、广播地址各占一个,必须 2^(主机位) − 2
  2. 子网号不能全 0 或全 1(传统规定):早期规定子网号全 0/全 1 不用(会与网络地址/广播地址混淆),CIDR 时代允许但很多题目仍按"不可用"出,做题时先确认题目约定。
  3. 把 /24 说成掩码 255.255.0.0:/24 是 24 个 1,即 255.255.255.0;255.255.0.0 是 /16。

4.3 私有地址与 NAT ⭐⭐

对内用"内部工号",对外用一个"门面地址"

IPv4 地址只有约 43 亿个,早已不够用。解决办法之一是:大部分局域网内部的 IP 可以重复,只要不"出国"就行。为此专门划出了私有地址(private address),规定这些地址在公网上不允许出现,只能在内网用:

类别 私有地址段 典型用途
A 10.0.0.0/8 大型企业内网
B 172.16.0.0/12 中型内网
C 192.168.0.0/16 家庭/办公室路由器的默认网段(192.168.1.x)

内网设备用私有地址互相通信没问题;要上公网,得靠 NAT(Network Address Translation,网络地址转换)——路由器把内网私有地址"翻译"成一个(或少量)公网地址,出去时替换源地址,回来时再替换回去。

家庭网络:
  手机 192.168.1.5 ──┐
  电脑 192.168.1.6 ──┼─→ 路由器(NAT) → 以公网地址 100.64.1.2 访问互联网
  电视 192.168.1.7 ──┘    回来时按端口号还原给对应设备

💡 一句话私有地址=内部工号(可重复),公网地址=对外门面(唯一)。NAT 就是那个"前台",把内部工号翻译成对外门面。

⚠️ 常见错误

  1. 把 192.168.x.x 当成公网可用地址:192.168.0.0/16 是私有段,公网上不能直接路由,必须经 NAT。
  2. 私有地址也能在公网"互相 ping":不能——私有地址只在本地网络有意义,出网必须被 NAT 翻译。
  3. NAT 是路由器/防火墙的功能,不是主机功能:主机不知道自己被 NAT 了,翻译发生在网关设备上。

4.4 ARP:IP 地址怎么找到 MAC 地址 ⭐⭐⭐

有"全国邮政地址",怎么查"小区门牌号"?

数据在局域网内传送靠 MAC 地址,但我们通常只知道对方的 IP 地址。IP → MAC 的映射怎么得到?用 ARP(Address Resolution Protocol,地址解析协议)

流程(同一局域网内):

  1. 主机 A 要发数据给 192.168.1.10,先查自己的 ARP 缓存表
  2. 缓存里没有 → A 广播一个 ARP 请求:"谁的 IP 是 192.168.1.10?请把 MAC 告诉我"(广播发到全网)。
  3. 目标主机 B 听到自己的 IP → 单播回复:"我就是,我的 MAC 是 AA-BB-CC-DD-EE-FF"。
  4. A 把这条映射写进 ARP 缓存(下次直接查表,不用再广播),然后按 MAC 封装帧发送。
A 问:谁是 192.168.1.10?(广播)
B 答:我是,我的 MAC 是 AA-BB-CC-DD-EE-FF(单播)
A 记下:192.168.1.10 → AA-BB-CC-DD-EE-FF(缓存)

💡 记忆口诀"ARP 广播问 IP、单播答 MAC、缓存省事"——问全网,答自己,记进表。

⚠️ 常见错误

  1. ARP 是"IP 找 MAC"不是"MAC 找 IP":方向别记反。反方向(MAC→IP)用的是 RARP(已基本废弃)或 DHCP 等机制。
  2. ARP 请求是广播,应答是单播:请求发往广播地址(全 FF),应答只发给请求方。
  3. ARP 只在本局域网内工作:跨网络时,目的 MAC 是"下一跳路由器"的 MAC,不是最终主机的 MAC。

4.5 ICMP:网络层的"体检报告" ⭐⭐

问路、探路、报错都用它

ICMP(Internet Control Message Protocol,网际控制报文协议) 是 IP 的"随从"协议,负责报告差错探测网络状态。它封装在 IP 数据报里,属于网络层。

两个最常用的工具:

  1. ping:发 ICMP 回显请求(echo request),对方回回显应答(echo reply)。能通就说明"网络层以下链路正常"。
$ ping 8.8.8.8
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=30.1 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=29.8 ms   ← 通了
  1. traceroute:用一系列 TTL(生存时间)逐渐递增的包,让每一跳路由器"超时报错"回传,从而画出一整条路径——数据从你家到目标服务器经过哪些路由器,每一跳耗时多少。

ICMP 还负责报错,比如:目的不可达(destination unreachable)超时(time exceeded,TTL 减到 0)重定向等。

💡 一句话ICMP 是网络层的"探子和报信员"——ping 探活、traceroute 探路、出问题报错。

⚠️ 常见错误

  1. 把 ICMP 当传输层协议:ICMP 虽然在 IP 之上,但它是网络层的辅助协议,不属于传输层(不是 TCP/UDP)。
  2. 以为 ping 能测出应用层问题:ping 只证明"网络层通",应用层(HTTP 服务等)挂不挂 ping 测不出来。
  3. traceroute 靠的是 TTL 超时报错:每一跳路由器把 TTL 减 1,减到 0 时报"超时",所以能逐跳暴露路径。

4.6 路由与路由器 ⭐⭐⭐

邮政总局怎么决定"下一站"?

路由(routing) 就是为数据报选择下一跳路径的过程。负责这件事的设备是路由器(router),它是三层设备(看 IP 头做决策,跨越不同网络)。

路由器工作靠路由表(routing table)——一张"到哪个网络走哪个出口"的表:

路由表(示意):
  目的网络            下一跳/出口         类型
  192.168.1.0/24      eth0             直连(direct)
  192.168.2.0/24      10.0.0.2          静态(static)
  0.0.0.0/0           10.0.0.1          默认路由(default)

关键概念:

  • 直连路由:路由器自己接口接的网络,天生知道。
  • 默认路由0.0.0.0/0,匹配所有没写明的目的地,相当于"不知道的地址一律往这里送"(出公网的出口)。
  • 最长前缀匹配:路由表可能有多条都"沾边",路由器选**前缀最长(最具体)**的那条。例:去 192.168.1.5,有 /24 和 /26 两条,选 /26(更具体)。
  • 路由的选路依据:可达性、跳数、带宽、延迟、负载等,由路由算法综合决定。

💡 记忆口诀"路由表决定下一跳,最长前缀优先;查不到走默认"

⚠️ 常见错误

  1. 把路由器当二层设备:交换机是二层(看 MAC),路由器是三层(看 IP,能连接不同的网络,天然隔离广播域)。
  2. 直连路由也要"学习":路由器对自己接口所在网络天生直连可达,不用动态协议也能互通。
  3. 路由表不是只有一条"去目的地的路":可能多条并存,靠最长前缀匹配和路由度量选最优。

4.7 静态路由与动态路由 ⭐⭐

手工画地图 vs 自动导航

路由表里的条目怎么来?两种方式:

1. 静态路由(static routing)

管理员手工配置路由表。特点:

  • 简单、确定、开销小、安全。
  • 缺点:网络拓扑变了(线路断了、加了新网)不会自动适应,需人工修改
  • 适合网络规模小、结构稳定的场景。
# 手工添加一条静态路由(示意命令)
ip route 192.168.3.0/24 10.0.0.2
# 含义:去 192.168.3.0/24 这个网,把包交给下一跳 10.0.0.2

2. 动态路由(dynamic routing)

路由器之间通过路由协议自动交换信息、自动算路、自动更新。线路变化时自动重新计算

主流动态路由协议分两类:

  • 距离向量(distance vector):只跟邻居交换"我到各网络的距离(跳数)",靠"邻居的邻居"层层传播。代表:RIP(最多 15 跳)。
  • 链路状态(link state):每台路由器都知道全网的拓扑图(谁连着谁、链路状态如何),各自用算法(如 Dijkstra 最短路径)独立算出到每个网络的最短路径。代表:OSPF
RIP(距离向量):我只知道"邻居告诉我走几步能到",逐跳传播,简单但收敛慢
OSPF(链路状态):全网都拿到"地图",各自算最短路径,收敛快、适合大型网络

💡 记忆口诀"静态手工写,动态自动算;距离向量数跳数,链路状态画地图"

⚠️ 常见错误

  1. 把 RIP 和 OSPF 混为一谈:RIP=距离向量(数跳数,限制 15 跳);OSPF=链路状态(画全网地图,算最短路径)。
  2. 以为静态路由"会自动更新":静态是手工配死的,拓扑变了不自动改;动态才自动收敛。
  3. 把路由协议和传输层协议并列:RIP/OSPF 是路由器之间交换路由信息的协议,不是给用户传数据的协议(如 TCP/UDP)。

4.8 IP 数据报的格式 ⭐⭐

网络层的"包裹面单"

网络层把上层数据包成 IP 数据报(datagram),首部标准 20 字节。看几个关键字段(知道含义比背长度重要):

| 版本 | 首部长度 | 服务类型 |  总长度  |
|   标识   | 标志 | 片偏移 |      ← 分片相关(大包拆小包)
|   TTL   | 协议 | 首部校验和 |
|       源 IP 地址        |
|       目的 IP 地址      |
|        数据...          |
  • 版本:IPv4 还是 IPv6(4 表示 IPv4)。
  • TTL(生存时间):每经过一个路由器减 1,减到 0 就丢弃并回报 ICMP——防止数据报在网络里"迷路兜圈"(环路死循环)。traceroute 就是靠它逐跳定位。
  • 协议:标识上层是 TCP(6)、UDP(17)还是 ICMP(1)。
  • 首部校验和:只校验首部,不校验数据(数据交给上层 TCP/UDP 校验)。
  • 源/目的 IP:各 4 字节。

特殊 IP 地址速记(考试常挖):

地址 含义 例子
网络地址(主机号全 0) 代表整个网络,不是某台主机 192.168.1.0
广播地址(主机号全 1) 发给本网所有主机 192.168.1.255
回环地址 本机自己 127.0.0.1
组播地址(D 类) 发给一组主机 224.0.0.x

💡 记忆口诀"TTL 是寿命,减到 0 就丢;首部校验只查头,数据靠上层"

⚠️ 常见错误

  1. 以为 TTL 是"剩余时间":TTL 单位是跳数,不是秒,每跳减 1。
  2. 以为 IP 校验和校验整包:IP 首部校验和只验首部;数据正确性由 TCP/UDP 的校验和负责。
  3. 把广播地址当成可配置的主机地址:主机号全 1 是广播地址,不能分配给任何主机。

4.9 默认网关:主机怎么"出门" ⭐

不知道路就往"小区大门"送

每台主机的 IP 配置里除了 IP 和掩码,还有一个默认网关(default gateway)——通常是接出去的路由器接口 IP(如 192.168.1.1)。

主机要发数据时先判断:

  • 目的 IP 在同一子网(用自己的掩码和目的 IP 做与运算)→ 直接发给目标主机(查 ARP 拿它 MAC)。
  • 目的 IP 在不同子网 → 本机不会路由,一律交给默认网关,由路由器代为转发。
电脑 192.168.1.5/24,默认网关 192.168.1.1
  → 发往 192.168.1.20(同网段)→ 直接发
  → 发往 8.8.8.8(不同网段)→ 发给网关 192.168.1.1,由它路由出去

💡 一句话默认网关就是主机的"小区大门"——凡是不在本小区(子网)的目的地,都先送出门让路由器处理。

⚠️ 常见错误

  1. 网关 IP 不能乱配:默认网关必须和本机在同一网段,否则主机根本够不到它,等于没网关。
  2. 以为网关会"修改 IP":网关(路由器)做的是路由转发,改的是 MAC 头,IP 端到端不变。
  3. 同一子网也走网关:同一子网是直接通信(靠 ARP 找对方 MAC),不经过网关。

🧠 记忆口诀

  • 网络层三件事:IP 寻址、路由选路、ARP/ICMP 问路报错。
  • 地址分类:A 大网 B 中网 C 小网,127 回环给自己。
  • 子网/CIDR:借位切子网,/前缀 标长度,可用主机 2^n − 2
  • 私有地址三段:10、172.16~172.31、192.168;出门靠 NAT 翻译。
  • ARP 广播问 IP、单播答 MAC;ICMP ping 探活、traceroute 探路
  • 路由:查表定下一跳,最长前缀优先,查不到走默认。
  • 静态手工写,动态自动算;RIP 数跳数,OSPF 画地图

⭐ 考点清单

  1. IPv4 点分十进制、A/B/C 类范围与默认掩码、网络号/主机号
  2. 子网掩码与子网划分:借位计算、每个子网可用主机数 2^n − 2
  3. CIDR 表示法(/24 等)、路由聚合
  4. 私有地址段(10/8、172.16/12、192.168/16)与 NAT 的作用
  5. ARP 工作过程:广播请求、单播应答、缓存;IP→MAC
  6. ICMP:ping 探活、traceroute 探路、TTL 超时报错
  7. 路由表、默认路由、最长前缀匹配;路由器是三层设备
  8. 静态 vs 动态路由;RIP(距离向量)vs OSPF(链路状态)
  9. 网络地址(主机号全 0)、广播地址(主机号全 1)不可分配给主机
  10. IP 数据报首部关键字段:TTL(跳数,到 0 丢弃)、协议、首部校验和只验首部
  11. 特殊地址:回环 127.0.0.1、组播 D 类;默认网关的作用(跨网段交给网关)

📌 中英术语表

中文 English 说明
网络层 network layer 跨网络寻址与路由
IPv4 地址 IPv4 address 32 位,点分十进制
网络号 / 主机号 network id / host id 地址的网络部分 / 主机部分
子网掩码 subnet mask 区分网络号与主机号
子网划分 subnetting 借主机号位切分网络
无类域间路由 CIDR /前缀 表示网络范围,可聚合
私有地址 private address 内网专用,公网不可路由
网络地址转换 NAT 私有 ↔ 公网地址翻译
地址解析协议 ARP IP 地址 → MAC 地址
网际控制报文协议 ICMP ping、traceroute、差错报告
回环地址 loopback 127.0.0.1,本机自测
路由 routing 为数据报选下一跳
路由器 router 三层设备,连接不同网络
路由表 routing table 目的网络 → 下一跳 的映射
默认路由 default route 0.0.0.0/0,兜底出口
最长前缀匹配 longest prefix match 选最具体的路由条目
静态路由 static routing 管理员手工配置
动态路由 dynamic routing 路由协议自动计算
距离向量 distance vector RIP,数跳数传播
链路状态 link state OSPF,全网地图算最短路径
生存时间 TTL 每跳减 1,为 0 则丢弃
IP 数据报 datagram 网络层的数据单元
默认网关 default gateway 主机的出门接口,通常是路由器
组播 multicast 一对多传输,D 类地址
首部校验和 header checksum 只校验 IP 首部