主题
第三章 网络层: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 失败时系统自动配的"临时牌照"——看到它基本等于没连上网 |
3. 子网划分:考试必考的手算题
子网掩码是一串"前面全 1、后面全 0"的 32 位数,1 对应网络号部分,0 对应主机号部分。核心运算只有一个:IP 地址与子网掩码逐位做"与"运算,得到网络号(网络地址)。
三条铁律,所有计算题都从这里出发:
- 网络地址 = IP 与掩码按位与(主机号部分全部清 0)。
- 广播地址 = 网络地址的主机号部分全部置 1。
- 可用主机数 = 2^主机号位数 − 2(扣除网络地址和广播地址)。
3.1 例题一:基础判定
题目:主机 IP 为 192.168.10.75/26,求网络地址、广播地址、可用主机数。
第一步,/26 表示网络号 26 位,主机号 32 − 26 = 6 位。掩码为 26 个 1:255.255.255.192(最后一个字节 11000000 = 192)。
第二步,只需处理最后一个字节(前三个字节掩码全 1,原样保留)。75 的二进制是 01001011,与 11000000 相与,保留前 2 位得 01000000 = 64。网络地址:192.168.10.64。
第三步,主机号 6 位全置 1:01111111 = 127。广播地址:192.168.10.127。
第四步,可用主机数 = 2⁶ − 2 = 62。即 192.168.10.65 到 192.168.10.126 共 62 个地址可分配。
快捷心算:/26 的"块大小"是 256 − 192 = 64,子网边界为 0、64、128、192。75 落在 64~127 这一块里,网络地址取块起点 64,广播地址取块终点 127。这个"块大小法"能省去二进制转换。
3.2 例题二:给部门划子网
题目:公司分到 200.1.1.0/24,需要划分给 4 个部门,每部门约 50 台主机。如何划分?
第一步,每部门 50 台,主机号需满足 2^h − 2 ≥ 50,最小 h = 6(2⁶ − 2 = 62)。
第二步,主机号 6 位,则网络号 32 − 6 = 26 位,即每个子网 /26,掩码 255.255.255.192。子网数量 = 2^(26−24) = 4 个,正好够。
第三步,按块大小 64 列出四个子网:
| 子网 | 网络地址 | 可用范围 | 广播地址 |
|---|---|---|---|
| 1 | 200.1.1.0/26 | .1 ~ .62 | 200.1.1.63 |
| 2 | 200.1.1.64/26 | .65 ~ .126 | 200.1.1.127 |
| 3 | 200.1.1.128/26 | .129 ~ .190 | 200.1.1.191 |
| 4 | 200.1.1.192/26 | .193 ~ .254 | 200.1.1.255 |
3.3 例题三:判断两台主机是否同网段
题目:A 为 172.16.35.20/20,B 为 172.16.47.200/20,它们在同一子网吗?
思路:分别求网络地址,相同则同网段。/20 即掩码 255.255.240.0,关键在第三个字节(掩码 11110000 = 240,块大小 256 − 240 = 16)。
A 的第三字节 35:35 ÷ 16 = 2 余 3,落在 32~47 块,网络地址 172.16.32.0。 B 的第三字节 47:47 落在 32~47 块,网络地址也是 172.16.32.0。
结论:同一子网,二者通信不需要经过路由器。
4. 私有地址与 NAT
IPv4 只有约 43 亿个地址,早已不够全球设备人手一个。缓解方案是划出三段私有地址,任何机构内部随便用,但不允许出现在公网上:
| 类别 | 私有地址段 | 常见场景 |
|---|---|---|
| A 类段 | 10.0.0.0 ~ 10.255.255.255 | 大型企业内网 |
| B 类段 | 172.16.0.0 ~ 172.31.255.255 | 中型网络 |
| C 类段 | 192.168.0.0 ~ 192.168.255.255 | 家庭路由器默认 |
内网设备要上公网,靠 NAT(网络地址转换):出口路由器把分组的私有源地址改写成自己的公网地址(并用不同端口号区分内网的不同连接),回来的数据再按记录改回去。整栋楼共用一个公网 IP 就是这么实现的。代价是外网无法主动连入内网主机,且路由器要维护每条连接的映射——NAT 是"地址不够用"逼出来的补丁,也顺带提供了一层隔离。
5. ARP:从 IP 找到 MAC
发送方知道目标 IP 之后,帧的目的 MAC 填什么?这是 **ARP(地址解析协议)**解决的问题:已知同一局域网内某设备的 IP 地址,问出它的 MAC 地址。
三个考点:请求用广播,回应用单播;结果存入 ARP 缓存避免每次都问;如果目标 IP 不在本网段,ARP 问的是默认网关的 MAC——帧交给网关,剩下的路由网络层负责。
6. ICMP:网络的"报错与探测"工具
IP 本身只管转发、不管汇报,**ICMP(互联网控制报文协议)**补上了"传递差错和控制消息"这块,它封装在 IP 分组里,属于网络层。两个著名工具都基于它:
- ping:发 ICMP 回送请求,对方回 ICMP 回送应答,用于测试连通性和往返时延。
- traceroute(Windows 叫 tracert):巧妙利用 IP 首部的 **TTL(生存时间)**字段。TTL 每过一台路由器减 1,减到 0 时该路由器丢弃分组并回送 ICMP 超时报文。依次发送 TTL = 1、2、3…… 的探测包,就能逼沿途每台路由器"报上名来",从而画出完整路径。
TTL 本来的用途是防止分组在路由环路里永远转圈,traceroute 是对它的天才式再利用。
7. 路由器怎么转发:最长前缀匹配
路由器收到一个分组,用目的 IP 查路由表。表里每一行是"某个网络前缀 → 下一跳"。如果多行都能匹配,选前缀最长(最具体)的那一行,这就是最长前缀匹配。
| 路由表项 | 下一跳 | 含义 |
|---|---|---|
| 10.1.0.0/16 | 路由器 X | 去 10.1 网段的粗规则 |
| 10.1.3.0/24 | 路由器 Y | 去 10.1.3 网段的细规则 |
| 0.0.0.0/0 | 路由器 Z | 默认路由,谁都匹配 |
目的地址 10.1.3.7 同时匹配三行,选 /24 那行走路由器 Y。为什么选最长?前缀越长,划定的范围越小、信息越具体,具体规则理应压过笼统规则——就像"寄往海淀区中关村大街"的指示比"寄往北京"更该被优先执行。默认路由 /0 是"以上都不匹配时的兜底出口",家用网络里就是"全部交给运营商"。
转发路上的两件杂务:TTL 与分片
路由器转发时还顺手处理两件事,都是考点:
- TTL 减 1:IP 首部的生存时间字段每过一跳减 1,为 0 即丢弃并回 ICMP 超时。它计的是"跳数"而不是"秒数",作用是防止分组在环路里永生。
- 分片:上一章说过以太网数据字段上限是 1500 字节(MTU)。如果分组比出接口的 MTU 大,IPv4 路由器会把它切成多个分片分别发送,各分片独立走到终点,由目的主机负责重组——中途的路由器只切不拼,因为各分片可能走不同路径,中途没有任何一台设备保证能集齐。分片会放大丢包代价(丢一片、全组废),所以现代做法是发送前探测路径最小 MTU,尽量避免分片;IPv6 更是直接禁止路由器分片。
8. 路由表从哪来:静态路由与动态路由协议
路由表可以人工写(静态路由:简单可控,适合小网络,但网络一变就要手工改),更普遍的是路由器之间互相交换信息自动算出来(动态路由)。三个动态路由协议的定位必须分清:
| 协议 | 算法思想 | 适用范围 | 特点白话 |
|---|---|---|---|
| RIP | 距离向量:听邻居说"我到某地几跳" | 小型网络内部 | 以跳数论远近,最多 15 跳,收敛慢 |
| OSPF | 链路状态:人手一份全网地图,各自算最短路 | 大中型网络内部 | 收敛快,选路依据链路开销而非跳数 |
| BGP | 路径向量:运营商之间谈"生意与政策" | 自治系统之间 | 互联网的骨架,选路看策略不只看远近 |
理解框架:互联网由许多自治系统(一个运营商或大机构管理的网络)拼成。自治系统内部用 RIP/OSPF 这类内部网关协议,追求"快和准";自治系统之间用 BGP,追求"按商业和政策规则选路"。
9. IPv6 要点
IPv4 地址枯竭的根治方案是 IPv6,考试只需要抓住这几点:
- 地址长度 128 位(IPv4 为 32 位),用冒号分隔的十六进制书写,如
2001:db8::8a2e:370:7334(连续的 0 段可用::压缩一次)。 - 地址多到"给地球上每粒沙子都分一个",因此不再需要 NAT。
- 首部定长更简洁,取消了首部校验和;不允许中间路由器分片,分片只在源主机做。
- 内置对自动配置、组播的支持,没有广播地址(用组播替代)。
- 与 IPv4 不兼容,过渡靠双栈(设备同时跑两套协议)和隧道(IPv6 分组装进 IPv4 里传)等技术,所以推广缓慢。
本章要点回顾
| 知识点 | 一句话结论 |
|---|---|
| IP 与 MAC 分工 | IP 是门牌号定位跨网路径,MAC 是身份证负责本链路投递 |
| ABC 类首字节 | A:1~126,B:128~191,C:192~223;127 环回 |
| 子网三铁律 | 与运算得网络地址;主机位全 1 是广播;可用数 2^h − 2 |
| 块大小法 | 256 减掩码相应字节 = 块大小,按块定边界省去二进制 |
| 私有地址 | 10 段、172.16~31 段、192.168 段,出公网靠 NAT |
| ARP | IP 问 MAC,请求广播、回应单播;跨网段问网关 |
| ICMP | 差错报告与探测;ping 测连通,traceroute 靠 TTL 逐跳探路 |
| 特殊地址 | 127 环回、0.0.0.0 未指定、255.255.255.255 受限广播 |
| 最长前缀匹配 | 多条匹配选最具体的;0.0.0.0/0 是默认路由兜底 |
| 分片重组 | 超过 MTU 由路由器分片,重组只在目的主机进行 |
| 路由协议定位 | RIP 小内网、OSPF 大内网、BGP 管自治系统之间 |
| IPv6 | 128 位冒号十六进制,无 NAT、无广播、路由器不分片 |
做题提醒
- 主机号全 0(网络地址)和全 1(广播地址)不能分配给主机,算可用主机数必须减 2;漏减 2 是子网题最常见的失分点。
- 判断第一字节:126 是 A 类、128 是 B 类、192 是 C 类;127 开头是环回地址,选项说"127.x 是 A 类可用地址"判错。
- 两台主机能否直接通信,看的是"各自与掩码相与后的网络地址是否相同",不是看 IP 数值接近与否。
- ARP 是"由 IP 求 MAC",方向别记反;ARP 请求是广播、应答是单播,两个都考。
- ping 用的是 ICMP,不是 TCP 或 UDP;ICMP 属于网络层。"ping 不通说明物理线路一定断了"是错的——防火墙拦截 ICMP 也会 ping 不通。
- IPv6 是 128 位,写法为冒号十六进制;"IPv6 地址是 64 位""IPv6 需要 NAT"都是错误表述。
- IP 分片的重组只发生在目的主机,"中间路由器负责把分片重组后再转发"是错误说法;IPv6 中路由器根本不分片。
