Skip to content

第三章 网络层: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.02²⁴ − 2 ≈ 1677 万
B 类128~191前 16 位 / 后 16 位255.255.0.02¹⁶ − 2 = 65534
C 类192~223前 24 位 / 后 8 位255.255.255.02⁸ − 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 地址与子网掩码逐位做"与"运算,得到网络号(网络地址)

三条铁律,所有计算题都从这里出发:

  1. 网络地址 = IP 与掩码按位与(主机号部分全部清 0)。
  2. 广播地址 = 网络地址的主机号部分全部置 1。
  3. 可用主机数 = 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.65192.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 列出四个子网:

子网网络地址可用范围广播地址
1200.1.1.0/26.1 ~ .62200.1.1.63
2200.1.1.64/26.65 ~ .126200.1.1.127
3200.1.1.128/26.129 ~ .190200.1.1.191
4200.1.1.192/26.193 ~ .254200.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 分组里,属于网络层。两个著名工具都基于它:

  1. ping:发 ICMP 回送请求,对方回 ICMP 回送应答,用于测试连通性和往返时延。
  2. 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 与分片

路由器转发时还顺手处理两件事,都是考点:

  1. TTL 减 1:IP 首部的生存时间字段每过一跳减 1,为 0 即丢弃并回 ICMP 超时。它计的是"跳数"而不是"秒数",作用是防止分组在环路里永生。
  2. 分片:上一章说过以太网数据字段上限是 1500 字节(MTU)。如果分组比出接口的 MTU 大,IPv4 路由器会把它切成多个分片分别发送,各分片独立走到终点,由目的主机负责重组——中途的路由器只切不拼,因为各分片可能走不同路径,中途没有任何一台设备保证能集齐。分片会放大丢包代价(丢一片、全组废),所以现代做法是发送前探测路径最小 MTU,尽量避免分片;IPv6 更是直接禁止路由器分片。

8. 路由表从哪来:静态路由与动态路由协议

路由表可以人工写(静态路由:简单可控,适合小网络,但网络一变就要手工改),更普遍的是路由器之间互相交换信息自动算出来(动态路由)。三个动态路由协议的定位必须分清:

协议算法思想适用范围特点白话
RIP距离向量:听邻居说"我到某地几跳"小型网络内部以跳数论远近,最多 15 跳,收敛慢
OSPF链路状态:人手一份全网地图,各自算最短路大中型网络内部收敛快,选路依据链路开销而非跳数
BGP路径向量:运营商之间谈"生意与政策"自治系统之间互联网的骨架,选路看策略不只看远近

理解框架:互联网由许多自治系统(一个运营商或大机构管理的网络)拼成。自治系统内部用 RIP/OSPF 这类内部网关协议,追求"快和准";自治系统之间用 BGP,追求"按商业和政策规则选路"。

9. IPv6 要点

IPv4 地址枯竭的根治方案是 IPv6,考试只需要抓住这几点:

  1. 地址长度 128 位(IPv4 为 32 位),用冒号分隔的十六进制书写,如 2001:db8::8a2e:370:7334(连续的 0 段可用 :: 压缩一次)。
  2. 地址多到"给地球上每粒沙子都分一个",因此不再需要 NAT
  3. 首部定长更简洁,取消了首部校验和;不允许中间路由器分片,分片只在源主机做。
  4. 内置对自动配置、组播的支持,没有广播地址(用组播替代)。
  5. 与 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
ARPIP 问 MAC,请求广播、回应单播;跨网段问网关
ICMP差错报告与探测;ping 测连通,traceroute 靠 TTL 逐跳探路
特殊地址127 环回、0.0.0.0 未指定、255.255.255.255 受限广播
最长前缀匹配多条匹配选最具体的;0.0.0.0/0 是默认路由兜底
分片重组超过 MTU 由路由器分片,重组只在目的主机进行
路由协议定位RIP 小内网、OSPF 大内网、BGP 管自治系统之间
IPv6128 位冒号十六进制,无 NAT、无广播、路由器不分片

做题提醒

  1. 主机号全 0(网络地址)和全 1(广播地址)不能分配给主机,算可用主机数必须减 2;漏减 2 是子网题最常见的失分点。
  2. 判断第一字节:126 是 A 类、128 是 B 类、192 是 C 类;127 开头是环回地址,选项说"127.x 是 A 类可用地址"判错。
  3. 两台主机能否直接通信,看的是"各自与掩码相与后的网络地址是否相同",不是看 IP 数值接近与否。
  4. ARP 是"由 IP 求 MAC",方向别记反;ARP 请求是广播、应答是单播,两个都考。
  5. ping 用的是 ICMP,不是 TCP 或 UDP;ICMP 属于网络层。"ping 不通说明物理线路一定断了"是错的——防火墙拦截 ICMP 也会 ping 不通。
  6. IPv6 是 128 位,写法为冒号十六进制;"IPv6 地址是 64 位""IPv6 需要 NAT"都是错误表述。
  7. IP 分片的重组只发生在目的主机,"中间路由器负责把分片重组后再转发"是错误说法;IPv6 中路由器根本不分片。