NET-04 网络层IP与路由
04 · 网络层:IP 与路由(Network Layer: IP & Routing)
📅 预计 90 分钟 | ⭐ 本章主题:给每台主机发"全国身份证",负责跨网络把数据送到家门口
4.0 先给直觉:网络层是"全国邮政总局"
链路层只管小区内投递(MAC 门牌)。但两台电脑可能一个在北京、一个在广州,中间隔着成百上千个路由器。谁负责"从北京把数据送到广州"?——网络层。
把它想成全国邮政总局:
- 每个城市(网络)有编号——这就是 IP 地址,让数据能"跨网络"寻址。
- 邮政总局看地址决定"下一站发往哪个城市"——这就是路由(routing)。
- 路上想确认"对方活着吗"、"能通吗"——用 ICMP(
ping就是它)。 - 到了对方城市的邮局,要查"这个门牌号具体在小区哪一栋"——用 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)。
⚠️ 常见错误
- 以为 127 网段可分配给主机:127 是回环专用(
127.0.0.1本机自测),不能给局域网主机。 - 网络地址和广播地址当成可用主机:主机号全 0(网络地址)、全 1(广播地址)都不能分给设备,算可用主机要
-2。 - A/B/C 类首字节记混:A=1
126,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 用"斜杠+位数"统一表达网络范围。
⚠️ 常见错误
- 可用主机数忘了减 2:网络地址、广播地址各占一个,必须
2^(主机位) − 2。 - 子网号不能全 0 或全 1(传统规定):早期规定子网号全 0/全 1 不用(会与网络地址/广播地址混淆),CIDR 时代允许但很多题目仍按"不可用"出,做题时先确认题目约定。
- 把 /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 就是那个"前台",把内部工号翻译成对外门面。
⚠️ 常见错误
- 把 192.168.x.x 当成公网可用地址:192.168.0.0/16 是私有段,公网上不能直接路由,必须经 NAT。
- 私有地址也能在公网"互相 ping":不能——私有地址只在本地网络有意义,出网必须被 NAT 翻译。
- NAT 是路由器/防火墙的功能,不是主机功能:主机不知道自己被 NAT 了,翻译发生在网关设备上。
4.4 ARP:IP 地址怎么找到 MAC 地址 ⭐⭐⭐
有"全国邮政地址",怎么查"小区门牌号"?
数据在局域网内传送靠 MAC 地址,但我们通常只知道对方的 IP 地址。IP → MAC 的映射怎么得到?用 ARP(Address Resolution Protocol,地址解析协议)。
流程(同一局域网内):
- 主机 A 要发数据给 192.168.1.10,先查自己的 ARP 缓存表。
- 缓存里没有 → A 广播一个 ARP 请求:"谁的 IP 是 192.168.1.10?请把 MAC 告诉我"(广播发到全网)。
- 目标主机 B 听到自己的 IP → 单播回复:"我就是,我的 MAC 是 AA-BB-CC-DD-EE-FF"。
- 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、缓存省事"——问全网,答自己,记进表。
⚠️ 常见错误
- ARP 是"IP 找 MAC"不是"MAC 找 IP":方向别记反。反方向(MAC→IP)用的是 RARP(已基本废弃)或 DHCP 等机制。
- ARP 请求是广播,应答是单播:请求发往广播地址(全 FF),应答只发给请求方。
- ARP 只在本局域网内工作:跨网络时,目的 MAC 是"下一跳路由器"的 MAC,不是最终主机的 MAC。
4.5 ICMP:网络层的"体检报告" ⭐⭐
问路、探路、报错都用它
ICMP(Internet Control Message Protocol,网际控制报文协议) 是 IP 的"随从"协议,负责报告差错和探测网络状态。它封装在 IP 数据报里,属于网络层。
两个最常用的工具:
- 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 ← 通了
- traceroute:用一系列 TTL(生存时间)逐渐递增的包,让每一跳路由器"超时报错"回传,从而画出一整条路径——数据从你家到目标服务器经过哪些路由器,每一跳耗时多少。
ICMP 还负责报错,比如:目的不可达(destination unreachable)、超时(time exceeded,TTL 减到 0)、重定向等。
💡 一句话:ICMP 是网络层的"探子和报信员"——ping 探活、traceroute 探路、出问题报错。
⚠️ 常见错误
- 把 ICMP 当传输层协议:ICMP 虽然在 IP 之上,但它是网络层的辅助协议,不属于传输层(不是 TCP/UDP)。
- 以为 ping 能测出应用层问题:ping 只证明"网络层通",应用层(HTTP 服务等)挂不挂 ping 测不出来。
- 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(更具体)。
- 路由的选路依据:可达性、跳数、带宽、延迟、负载等,由路由算法综合决定。
💡 记忆口诀:"路由表决定下一跳,最长前缀优先;查不到走默认"。
⚠️ 常见错误
- 把路由器当二层设备:交换机是二层(看 MAC),路由器是三层(看 IP,能连接不同的网络,天然隔离广播域)。
- 直连路由也要"学习":路由器对自己接口所在网络天生直连可达,不用动态协议也能互通。
- 路由表不是只有一条"去目的地的路":可能多条并存,靠最长前缀匹配和路由度量选最优。
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(链路状态):全网都拿到"地图",各自算最短路径,收敛快、适合大型网络
💡 记忆口诀:"静态手工写,动态自动算;距离向量数跳数,链路状态画地图"。
⚠️ 常见错误
- 把 RIP 和 OSPF 混为一谈:RIP=距离向量(数跳数,限制 15 跳);OSPF=链路状态(画全网地图,算最短路径)。
- 以为静态路由"会自动更新":静态是手工配死的,拓扑变了不自动改;动态才自动收敛。
- 把路由协议和传输层协议并列: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 就丢;首部校验只查头,数据靠上层"。
⚠️ 常见错误
- 以为 TTL 是"剩余时间":TTL 单位是跳数,不是秒,每跳减 1。
- 以为 IP 校验和校验整包:IP 首部校验和只验首部;数据正确性由 TCP/UDP 的校验和负责。
- 把广播地址当成可配置的主机地址:主机号全 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,由它路由出去
💡 一句话:默认网关就是主机的"小区大门"——凡是不在本小区(子网)的目的地,都先送出门让路由器处理。
⚠️ 常见错误
- 网关 IP 不能乱配:默认网关必须和本机在同一网段,否则主机根本够不到它,等于没网关。
- 以为网关会"修改 IP":网关(路由器)做的是路由转发,改的是 MAC 头,IP 端到端不变。
- 同一子网也走网关:同一子网是直接通信(靠 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 画地图。
⭐ 考点清单
- IPv4 点分十进制、A/B/C 类范围与默认掩码、网络号/主机号
- 子网掩码与子网划分:借位计算、每个子网可用主机数
2^n − 2 - CIDR 表示法(/24 等)、路由聚合
- 私有地址段(10/8、172.16/12、192.168/16)与 NAT 的作用
- ARP 工作过程:广播请求、单播应答、缓存;IP→MAC
- ICMP:ping 探活、traceroute 探路、TTL 超时报错
- 路由表、默认路由、最长前缀匹配;路由器是三层设备
- 静态 vs 动态路由;RIP(距离向量)vs OSPF(链路状态)
- 网络地址(主机号全 0)、广播地址(主机号全 1)不可分配给主机
- IP 数据报首部关键字段:TTL(跳数,到 0 丢弃)、协议、首部校验和只验首部
- 特殊地址:回环 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 首部 |