主题
第三章 网络层:IP 地址、子网与路由
1. 网络层为什么存在:从"一跳"到"全球"
上一章的链路层解决了"同一个局域网内怎么送帧",但它有个天花板:MAC 地址是纯粹的"身份证号",没有任何位置信息。知道对方 MAC 是 00-1A-2B-3C-4D-5E,完全推不出这台机器在北京还是纽约。如果全世界的交换机都要维护一张记录所有设备的 MAC 表,这张表会大到爆炸。
网络层的解决思路是给设备发一个带位置结构的地址——IP 地址。它像邮政地址"某省某市某街道某号":前半段说明你在哪个网络(网络号),后半段说明你是该网络里的哪台主机(主机号)。有了层次结构,中间的路由器只需要记住"去往某个网络往哪边走",而不必记住每一台主机。
一句大白话点透:MAC 地址是身份证,跟人走;IP 地址是门牌号,跟位置走。换个城市,身份证不变,门牌号必须换——这就是为什么手机换个 WiFi,IP 就变了,MAC 不变。
2. IPv4 地址:结构与分类
2.1 点分十进制
IPv4 地址共 32 位二进制,为了方便人读,每 8 位一组转成十进制,用点隔开,即点分十进制。例如:
11000000 10101000 00000001 01100100 → 192.168.1.100每组 8 位的取值范围是 0~255。看到 192.168.1.256 这样的地址可以直接判定非法。
2.2 有类地址:A、B、C 类
早期的划分方法按第一个字节的取值把地址分成几类,网络号与主机号的分界是固定的:
| 类别 | 第一字节范围 | 网络号/主机号 | 默认子网掩码 | 每个网络可容纳主机数 |
|---|---|---|---|---|
| A 类 | 1~126 | 前 8 位 / 后 24 位 | 255.0.0.0 | 2²⁴ − 2 ≈ 1677 万 |
| B 类 | 128~191 | 前 16 位 / 后 16 位 | 255.255.0.0 | 2¹⁶ − 2 = 65534 |
| C 类 | 192~223 | 前 24 位 / 后 8 位 | 255.255.255.0 | 2⁸ − 2 = 254 |
| D 类 | 224~239 | 组播地址,不分网络主机号 | — | — |
| E 类 | 240~255 | 保留实验用 | — | — |
两个特殊角色:127 开头(如 127.0.0.1)是环回地址,用于本机测试,不属于 A 类可分配范围;主机号全 0 表示网络本身,全 1 表示该网络的广播地址,都不能分给主机——这就是表中"减 2"的原因。
2.3 无类 CIDR:斜杠记法
有类划分太僵硬:一个公司要 300 个地址,C 类不够、B 类浪费 6 万多个。**CIDR(无类域间路由)**废除固定分界,用"斜杠加数字"直接声明网络号有多少位,如 192.168.1.0/24 表示前 24 位是网络号。网络号可以是任意长度,想切多细切多细。现在的网络世界全面使用 CIDR,ABC 类主要活在考卷上。
2.4 必须认识的特殊地址
| 地址 | 含义 | 白话 |
|---|---|---|
| 127.0.0.1 | 环回地址 | 自己跟自己说话,测试本机协议栈 |
| 0.0.0.0 | 本机/未指定地址 | "我还没有地址",DHCP 讨要 IP 时的源地址 |
| 255.255.255.255 | 受限广播地址 | 喊话本地网络所有设备,路由器不外传 |
| 主机号全 0 | 网络地址 | 代表整个网络,不能分给主机 |
| 主机号全 1 | 定向广播地址 | 喊话某网络的所有主机,不能分给主机 |
| 169.254.x.x | 链路本地地址 | DHCP 失败时系统自动配的"临时牌照"——看到它基本等于没连上网 |
