网络层:IP 与全球找路
链路层解决了"相邻两站",但一个包裹从你的电脑到对面机房要跨几十个网络。网络层是互联网的心脏,两件大事:编址(IP 地址给全世界每台设备编号)和路由(在几十个网络里找路)。传输单位是"分组/数据报"。
一、网络层管什么
把分组从源主机跨过若干网络送到目的主机。两个核心问题:
- 寻址:目的地怎么唯一标识?——IP 地址
- 路由:路怎么找?——路由表 + 路由协议
💡 互联网在网络层选了数据报方式(每个分组自带完整地址、独立选路),放弃了电路交换式的"虚电路"——代价是分组可能乱序、丢包,好处是健壮灵活:一条路断了,后面的分组自动换路。这个"不可靠底层"的赌注,赢了整个互联网。
二、IPv4 地址:给全世界设备编号
32 位,习惯写成点分十进制:192.168.1.100。
分类地址(传统,考试要认)
| 类 | 前缀 | 网络位 | 范围(首字节) | 用途 |
|---|---|---|---|---|
| A | 0 | 8 位 | 1 ~ 126 | 超大网络 |
| B | 10 | 16 位 | 128 ~ 191 | 中型网络 |
| C | 110 | 24 位 | 192 ~ 223 | 小型网络 |
| D | 1110 | — | 224 ~ 239 | 组播 |
| E | 1111 | — | 240 ~ 255 | 保留实验 |
特殊地址:127.0.0.1 本机回环;主机位全 0 是网络本身;主机位全 1 是广播。
私有地址(不出门的号段)
10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
私有地址不能在公网路由——你家家宽路由器 192.168.x.1、公司内网,全是这几段。全世界的内网都用 192.168 开头也不冲突,因为它们根本不上街。那内网怎么上网?——NAT(见第七节)。
三、子网划分与 CIDR
子网掩码
分类地址太死板(B 类 6 万台主机谁用得完?)。子网掩码来了:1 对应网络位、0 对应主机位,按位与运算提取网络号。
IP: 192.168.1.100
掩码: 255.255.255.0
按位与 → 192.168.1.0 ← 网络号(同一网络才能直接交付)
CIDR:无分类编址(现代标准)
掩码写成斜线记法 /n,n 是网络位长度,彻底打破 ABC 分类:
192.168.1.0/24 ← 前 24 位是网络位,后 8 位是主机位(254 台可用主机)
10.0.0.0/8 ← 巨型网络
例题:把 192.168.1.0/24 平均切成 4 个子网?
切 4 份 = 借 2 位主机位当网络位(2² = 4)
→ /24 变 /26,每段主机位 6 位(62 台可用)
192.168.1.0/26 (.1 ~ .62)
192.168.1.64/26 (.65 ~ .126)
192.168.1.128/26 (.129 ~ .190)
192.168.1.192/26 (.193 ~ .254)
反过来还有路由聚合(超网):把连续的小网络合并成一条路由公告——路由表因此瘦身。
四、为什么"分层寻址"是妙笔
路由器不用记住全球几十亿台设备——它只记"到哪个网络走哪条路"。
🤔 和邮政系统同构:快递员不需要知道你家哪张床,只需要知道到"哪个城市哪个区"。IP 地址 = 网络(区)+ 主机(门牌),路由表按"区"聚合——几十亿设备的路由问题瞬间缩成十几万条网络路由。分层 = 用前缀做索引,和 信息的表示里"前缀自解释"的编码思想一脉相承。
五、IP 首部:几个关键字段
挑干活最多的字段讲(完整 20 字节首部背结构意义不大):
| 字段 | 干什么 |
|---|---|
| TTL | 每过一个路由器减 1,减到 0 就丢弃——防路由环路让分组永生不死 |
| 协议 | 载荷是谁:6=TCP、17=UDP——给传输层的交接单 |
| 源/目的 IP | 全程不变(NAT 除外) |
| 标识/标志/片偏移 | 分片三件套:包比链路 MTU(1500)大就切片,到目的地再重组 |
分片是 链路层 MTU 伏笔的回收:以太网一口气只能运 1500 字节,更大的 IP 包就地切片,各片独立传输、只在最终目的地重组(中间路由器不拼,只管切)。
六、ARP:IP → MAC 的翻译官
链路层说过:实际交付靠 MAC,路由靠 IP。两套地址怎么对上?
问:192.168.1.100 的 MAC 是多少?
→ 广播 ARP 请求(全网都收到)
→ 目标主机单播应答:"是我,MAC 是 a4:83:e7:xx:xx:xx"
→ 双方各自缓存(arp 表),下次免问
- 同网段:直接 ARP 问目标
- 跨网段:问不出目标的 MAC——目标是"外区的",只能 ARP 问网关(默认路由器)的 MAC,把包裹交给它送出小区
💡
arp -a(链路层篇的动手玩)看到的缓存表就是它。ARP 欺骗(假应答毒化缓存)也是内网攻击的经典起手式——协议太信任"有问必答"了。
七、ICMP:网络的体检报告
ICMP 挂在 IP 上,专门传"控制消息"(差错、探询)。你天天在用它:
- ping:发 ICMP 回显请求,对方回显应答 → 通不通、延迟多少、丢不丢包
- traceroute / tracert:依次发 TTL=1,2,3…的分组。每个路由器把 TTL 减到 0 时回一条"超时"消息——沿途每台路由器被迫自报家门,整条路径就画出来了
八、NAT:全世界的内网共用公网 IP 的魔法
IPv4 只有 2³² ≈ 43 亿个地址,全球设备早就超了。救场的是 NAT(网络地址转换),通常长在路由器上:
内网 192.168.1.100:51777 → 路由器改写成 公网IP:40001 → 互联网
回包到 公网IP:40001 → 路由器查转换表改写回 192.168.1.100:51777
**NAPT(端口版 NAT)**连端口号一起改写,一个公网 IP 能伺候成百上千台内网设备——你家所有手机电脑共享一个运营商 IP,靠的就是它。
- 代价:外网主动找不进来(转换表里没这个映射)——所以家用 NAS 要"内网穿透",服务器要"端口映射"
- IPv4 地址用尽的问题,正式解法是 IPv6
九、IPv6:下一代的地址本
- 128 位地址,地址数 = 2¹²⁸(说"给地球上每粒沙子都编上号"毫不夸张)
- 写法:8 组冒号十六进制
2001:0db8::8a2e:0370:7334(连续全 0 可缩写成::,只能缩一次) - 去掉了分片、首部校验和等负担——首部定长 40 字节,转发更快
- 过渡方案:双栈(设备同时跑 v4/v6)、隧道(v6 包裹在 v4 里穿过旧网络)
🤔 运营商喊了二十年的"IPv6 部署",近几年在移动网络里其实已经悄悄普及了——你的手机流量很可能已经在用 v6。
十、路由:路径怎么选
- 静态路由:管理员手写,小网络够用,大网络维护不动
- 动态路由协议:路由器之间互相"交换路况",自动算路
两大门派(都在自治系统内部):
| RIP | OSPF | |
|---|---|---|
| 思想 | 距离向量:邻居之间互相抄"到各处的距离表" | 链路状态:全网地图人手一份,各自算 |
| 度量 | 跳数(≤15,16=不可达) | 带宽代价 |
| 算法 | Bellman-Ford | Dijkstra |
| 名场面 | "好消息传得快,坏消息传得慢"(计数到无穷问题) | 收敛快,现代主力 |
自治系统之间靠 BGP:它不追求"最短",追求"可达 + 符合商业政策"(哪家运营商愿意中转谁的流量,是政治与生意)。互联网的骨架就是无数 AS 用 BGP 连起来的。
路由器查表规则:最长前缀匹配——多个路由都匹配时,选网络前缀最长的(最具体的)那条。
目的 192.168.1.100:
192.168.0.0/16 → 走接口A
192.168.1.0/24 → 走接口B ← 前缀更长,赢
十一、盲点自测
- 子网掩码干嘛用的? ——按位与运算拆分网络号/主机号;同网段直接交付,跨网段交给网关。
- /26 能接多少台主机? ——主机位 32-26=6 位,2⁶-2 = 62 台(去掉网络地址和广播地址)。
- TTL 防什么? ——路由环路:每过一跳减 1,减到 0 丢弃,防止分组绕圈永生。
- 跨网段时 ARP 问的是谁? ——网关的 MAC(目标在"外区",先交给出小区的路由器)。
- NAT 为什么能缓解地址枯竭? ——私网地址 + 端口改写复用,一个公网 IP 顶成百上千台设备;代价是外网无法主动进入。
- RIP 和 OSPF 的门派区别? ——距离向量(抄邻居的表)vs 链路状态(全网地图自己算 Dijkstra);OSPF 收敛快,是现代内网主力。
- 最长前缀匹配什么意思? ——多条路由都命中时选前缀最长(最具体)的,精确优先。
- traceroute 的原理? ——TTL 从 1 递增,逼沿途每台路由器返回超时消息,逐跳自报家门。
十二、动手玩一把
# 本机 IP / 掩码 / 网关
ifconfig | grep "inet " # macOS;Linux 用 ip addr
netstat -rn | head # 路由表(macOS);Linux: ip route
# 连通性与路径
ping example.com
traceroute example.com # Windows 是 tracert
# DNS 排查过渡(应用层伏笔)
nslookup example.com
包裹送到了正确的机器,但机器上同时跑着几十个程序——到底交给谁?→ 端口与 TCP 的故事 → 05-传输层
💬 评论