3、网络层核心:IP协议头部结构,IPv4地址分类与子网划分,CIDR与VLSM,路由基础

网络层是整个协议栈的「交通枢纽」。TCP 负责把数据可靠地送到,但真正决定「往哪送」的,是 IP 协议。

我刚开始学网络时,总觉得 IP 地址就是「一串数字」。后来在项目里排查一个跨网段不通的问题,才发现 IP 头部里每个 bit 都可能要命。今天咱们就把 IP 协议的核心拆开看看。

3.1 IP 协议头部结构

IP 头部固定 20 字节,后面可以跟选项。我习惯把它分成四行来看:

偏移 字段 长度 说明
0-3 版本 4 bit IPv4 值为 4
4-7 首部长度 4 bit 单位 4 字节,最小 5
8-15 服务类型 8 bit 现在常用 DSCP
16-31 总长度 16 bit 头部+数据,最大 65535
32-63 标识、标志、片偏移 32 bit 分片相关
64-71 生存时间 8 bit 每跳减 1,防环路
72-79 协议 8 bit 6=TCP, 17=UDP
80-95 首部校验和 16 bit 只校验头部
96-127 源 IP 地址 32 bit 发送方
128-159 目的 IP 地址 32 bit 接收方
我的习惯:抓包时先看「总长度」和「首部长度」。如果总长度比首部长度×4 还小,那包肯定坏了。我曾经靠这个快速定位了一个 MTU 配置错误。

TTL 字段很有意思。每经过一个路由器就减 1,减到 0 就丢弃。我见过有人把 TTL 设成 255,结果环路里包跑了 255 跳才被扔掉——网络直接瘫痪了。

3.2 IPv4 地址分类

IPv4 地址 32 位,早期按前几位分成 A、B、C、D、E 五类。说白了就是「看开头就知道是给谁用的」。

类别 开头 范围 默认掩码 用途
A 0 1.0.0.0 - 126.255.255.255 255.0.0.0 大型网络
B 10 128.0.0.0 - 191.255.255.255 255.255.0.0 中型网络
C 110 192.0.0.0 - 223.255.255.255 255.255.255.0 小型网络
D 1110 224.0.0.0 - 239.255.255.255 — 组播
E 1111 240.0.0.0 - 255.255.255.255 — 保留
注意:127.0.0.0/8 是回环地址,不属于任何分类。你 ping 127.0.0.1 其实是在跟自己说话。

分类地址有个大问题:浪费。一个 C 类只有 254 个主机,一个 B 类却有 65534 个。你想想看,一个中型公司用 B 类,大部分地址都空着。我早年给客户做规划时,就遇到过这种尴尬——B 类太大,C 类不够,最后只能拆成多个 C 类,路由表膨胀得厉害。

3.3 子网划分

子网划分就是「从主机位借几位给网络位」。比如 192.168.1.0/24,借 2 位给子网,就变成 /26。

公式很简单:

  • 子网数 = 2借位数
  • 每个子网主机数 = 2(32-掩码长度) - 2

减 2 是因为网络地址和广播地址不能用。我见过新手把 192.168.1.0/26 的广播地址算成 192.168.1.64,其实应该是 192.168.1.63。嗯,这里容易错。

实战例子:公司有 4 个部门,每个部门最多 50 台机器。用 192.168.1.0/24 划 4 个子网:
借 2 位 → /26 → 每个子网 62 个主机。
子网 1: 192.168.1.0/26,范围 1-62
子网 2: 192.168.1.64/26,范围 65-126
子网 3: 192.168.1.128/26,范围 129-190
子网 4: 192.168.1.192/26,范围 193-254

3.4 CIDR 与 VLSM

CIDR(无类域间路由)彻底抛弃了 A/B/C 类的死板分类。说白了就是「掩码随便写,只要连续就行」。比如 10.0.0.0/8 到 10.0.0.0/16 之间,你可以用任何掩码。

VLSM(可变长子网掩码)更灵活——同一个网络里,不同子网可以用不同掩码。我当年给一个连锁店做网络规划,总部需要 200 个地址,每个分店只需要 10 个。用 VLSM:

  • 总部:10.0.0.0/24(254 个主机)
  • 分店 1:10.0.1.0/28(14 个主机)
  • 分店 2:10.0.1.16/28
  • 分店 3:10.0.1.32/28

你看,地址一点都没浪费。如果按分类地址,每个分店至少得给一个 C 类,那 200 多个分店就得 200 多个 C 类,路由表直接爆炸。

避坑指南:我曾经在配置 VLSM 时,把两个子网的地址范围写重叠了。结果那台路由器疯狂跳转,数据包像无头苍蝇一样乱窜。后来我养成了习惯——划完子网后,一定用二进制算一遍边界。

3.5 路由基础

路由就是「告诉数据包怎么走」。每个路由器维护一张路由表,里面写着:去哪个网络,从哪个接口出去,下一跳是谁。

路由表的核心条目:

  • 目的网络:目标网段
  • 掩码:网络位长度
  • 下一跳:下一个路由器的 IP
  • 出接口:从哪个口发出去
  • 度量值:路径的「代价」

路由分三种:

  • 直连路由:路由器自己接口上的网段,自动生成
  • 静态路由:管理员手动配的,适合小网络
  • 动态路由:通过 OSPF、BGP 等协议自动学习

我个人的经验是:少于 10 条路由,静态路由最稳。超过 50 条,必须上动态路由协议。有一次我给一个园区配了 30 多条静态路由,后来拓扑一改,改得我怀疑人生。

路由匹配原则:最长前缀匹配。说白了就是「谁的掩码长听谁的」。
比如去 192.168.1.5,路由表里有 192.168.1.0/24 和 192.168.1.0/28,那肯定走 /28 那条。

你想想看,如果没有最长前缀匹配,那 192.168.1.5 可能被送到 192.168.1.0/24 的网关,但实际它应该在 192.168.1.0/28 的子网里。数据包就迷路了。

IP 协议核心知识体系 IP 协议核心 头部结构 版本/首部长度/总长度 TTL/协议/校验和 源IP/目的IP 地址分类 A/B/C/D/E 五类 默认掩码固定 地址浪费严重 子网划分 借主机位给网络位 子网数=2^借位数 主机数=2^(32-掩码)-2 CIDR / VLSM CIDR:无类,掩码任意 VLSM:同一网络不同掩码 路由基础 直连/静态/动态路由 最长前缀匹配

好了,IP 协议的核心就这些。头部结构、地址分类、子网划分、CIDR/VLSM、路由基础——这五个点串起来,就是网络层的全部骨架。下一层咱们要聊 TCP 了,那才是真正的「可靠传输」大戏。