首页 / 博客 / 本文

IP 网络基础进阶:子网划分、网关、ARP 与 VLAN 的取舍

🧭 网络基础📅 2026-08-31⏱ 13 分钟

很多人对 IP 网络的认知停留在「配个 IP、掩码、网关就能通」,遇到稍复杂的问题——为什么两个网段 ping 不通、为什么划了 VLAN 之后要加路由、为什么 10.0.0.0/8 里有的地址是合法的有的却不能用——就开始靠玄学。这篇把这些散点串成一条线:子网划分解决「谁和谁在同一个广播域」,网关与路由解决「不在一个域怎么办」,ARP 是两者之间的粘合剂,VLAN 则是把物理广播域切开的刀。

一个贯穿全文的心智模型。主机发包前只做一次判断:「目标 IP 和我 与运算 掩码的结果,是否等于我和掩码与运算的结果?」相等 → 同网段,直接把包发给对方 MAC;不等 → 跨网段,把包丢给网关的 MAC,剩下的路它操心。整个 IP 网络的行为,几乎都能从这个判断推演出来。

一、子网与 CIDR:网络位和主机位的那一刀

IP 地址没有「天然网段」,网段完全由掩码定义。CIDR 记法 a.b.c.d/n 里,前 n 位是网络位,后 (32-n) 位是主机位:

10.20.30.44/24
地址: 00001010 00010100 00011110 00101100
掩码: 11111111 11111111 11111111 00000000   ← 前 24 位是网络
网络: 10.20.30.0/24(主机位清零)
可用主机数 = 2^8 - 2 = 254
  (主机位全 0 → 网络地址本身;主机位全 1 → 广播地址 10.20.30.255)

为什么减 2 是新手最容易忘的一步:主机位全零代表「这个网络本身」,全一是「本网段所有人」,都不能分给主机。这也是 /31(点对点链路,RFC 3021 特批可用 2 个地址)和 /30(4 个地址只有 2 个可用)的来由。

二、子网划分实战:把 /16 切给四个部门

案例:拿到 10.10.0.0/16,要划出至少 4 个能容纳 ~500 台主机的子网。

第一步算需求:500 主机 → 主机位需要 9 位(2⁹−2 = 510 ≥ 500)→ 网络位 32−9 = 23 → 前缀从 /16 借 7 位变成 /23。第二步切:

子网范围可用主机广播地址
10.10.0.0/2310.10.0.1 ~ 10.10.1.25451010.10.1.255
10.10.2.0/2310.10.2.1 ~ 10.10.3.25451010.10.3.255
10.10.4.0/2310.10.4.1 ~ 10.10.5.25451010.10.5.255
10.10.6.0/2310.10.6.1 ~ 10.10.7.25451010.10.7.255

注意子网步长:/23 的块大小是 2 × 256 = 512,所以子网边界落在 0、2、4、6(第三个八位组的偶数)。「块大小 = 256 − 掩码对应八位组」是快速心算的钥匙:掩码 255.255.254.0 → 256−254 = 2,子网边界每隔 2 跳一次。

顺带纠一个高频误区:10.10.1.0 在 /23 里是合法的主机地址(它只在 /24 语义下才是网络地址)。判断一个地址能不能用,永远结合掩码,而不是看数字长得像不像。

三、网关与路由:跨网段的包是怎么走路的

主机上的路由表其实极简,Linux 下 ip route 通常只有两三行:

$ ip route
10.10.2.0/23 dev eth0 proto kernel scope link src 10.10.2.15
default via 10.10.2.1 dev eth0

第一行:目标在本网段 → 直接交付(链路层可达)。第二行:default = 0.0.0.0/0 兜底 → 交给网关 10.10.2.1。路由匹配规则是最长前缀优先(longest prefix match):一条 /23 一定比 default 更具体,永远先被选中。运维上常见的「配了两个默认网关导致时通时不通」,本质就是两条等长路由在抢流量。

网关本身没有任何神秘之处——它只是一台愿意替你转发跨网段流量的设备,所以生产规范要求每个网段的网关地址固定(习惯上用 .1 或 .254),避免 DHCP 下发的网关漂移引发「部分人能上网」的灵异事件。

四、ARP:网络层与链路层之间的翻译官

以太网里帧靠 MAC 地址交付,而人脑记的是 IP——把「下一跳 IP」翻译成「下一跳 MAC」的就是 ARP。主机在网段内广播 Who has 10.10.2.1? Tell 10.10.2.15,网关单播回应自己的 MAC,结果缓存进 ARP 表(ip neigh / arp -n)。

两个工程必知:

其一,回包也需要 ARP。能 ping 出去不代表回程链路没问题——「请求发出去了、回不来」和「根本没发出去」在用户看来都是「不通」,但排障方向完全不同(前者查回程路由/防火墙,后者查本机网关)。

其二,免费 ARP(gratuitous ARP):主机主动广播「我是 x.x.x.x,MAC 是我」,用于宣告地址归属。VRRP/Keepalived 主备切换、服务器迁移(连带 DHCP 冲突检测)都靠它刷新邻居缓存。而攻击者伪造免费 ARP 冒充网关,就是 ARP 欺骗——二层安全(DHCP Snooping + 动态 ARP 检测)防的正是这个。

五、广播域:交换机快,但广播是全员被迫营业

交换机隔离冲突域但不隔离广播——一个广播帧(ARP 请求、DHCP Discover 都算)会让整个二层网络所有主机中断响应一次。几十台设备无所谓;几百上千台时,ARP 风暴、广播噪声、故障域(一张大表、一个环路、全网瘫痪)都会逼你把网络切开。切法有二:

六、VLAN 与 Trunk:一台交换机,N 个独立网络

802.1Q VLAN 在以太帧中插入 4 字节 tag,其中的 VLAN ID 标记这帧属于哪个广播域。交换机端口两种角色:

端口类型收发规则接什么
Access 口收发不带 tag 的普通帧,归属单一 VLAN(PVID)终端设备:电脑、打印机、AP
Trunk 口允许多个 VLAN 的带 tag 帧通过,协商放行列表交换机互联、接路由器/防火墙
# 华为风格配置速记
vlan batch 10 20 30
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10          # 终端口:属于 VLAN 10
interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 10 20 30   # 上联口:三个 VLAN 都能过

核心心智模型:VLAN 10 的广播帧绝不会从属于 VLAN 20 的 access 口发出去——隔离发生在转发决策那一刻,而不是靠防火墙规则。这一刀同时切掉了广播噪声和大部分二层故障域。

七、VLAN 间路由:单臂路由 vs 三层交换机

VLAN 切完,不同 VLAN 互访必须经过三层设备,两种经典形态:

单臂路由(router-on-a-stick):路由器一个口接交换机 trunk,为每个 VLAN 建子接口做网关。所有 VLAN 间流量挤一条物理链路且要过路由器软件转发——适合小网络和实验室。

# Linux 服务器一秒变「单臂路由器」
ip link add link eth0 name eth0.10 type vlan id 10
ip addr add 10.10.10.1/23 dev eth0.10
ip link set eth0.10 up
echo 1 > /proc/sys/net/ipv4/ip_forward

三层交换机:在交换芯片里直接做路由(一次路由、处处交换),VLAN 接口(SVI)就是各网段网关,VLAN 互访线速完成。中大型网络的标准答案:接入层交换机划 VLAN,核心/汇聚层三层交换机做网关,向上再接防火墙出公网。

总结。把这篇压缩成一张速查卡:① 网段由掩码定义,可用主机数 = 2^主机位 − 2,块大小 = 256 − 掩码八位组;② 主机只做一次「与运算」判断直发还是交网关,路由最长前缀优先;③ ARP 负责下一跳 IP→MAC,回程也要 ARP;④ VLAN 用 802.1Q tag 在转发层面隔离广播域,access 接终端、trunk 跨设备;⑤ VLAN 间必须走路由——小网单臂,中大三交。网络问题 80% 是这三层的某一层配错,按「物理 → 二层 → 三层」的顺序向上排查,永远比乱猜快。
#网络基础#子网划分#VLAN#路由交换
广告