交换机
交互机是个核心且不起眼的小设备。交换机(普通二层交换机)正是工作在“数据链路层”(Data Link Layer,第 2 层)。
1. 打包成“帧”(Frame)
它规定了数据的“开头”和“结尾”,把一连串纯粹的比特流(010101)切分成一段一段有固定结构的“数据包裹”,这个包裹就叫做 “数据帧”(Frame)。
2. 给包裹贴上物理标识 —— MAC 地址
它给每一个包裹加了一个“快递单头(Header)”,里面最重要的两项内容就是:
- 源 MAC 地址:谁发的?
- 目的 MAC 地址:同一局域网内,要发给眼前的哪台设备?
3. 局域网内的“点对点精确投递”
这正是交换机干的事情:根据数据帧上的 目的 MAC 地址,查表并精准地把这个包裹从正确的物理网口打出去,实现局域网内部设备的互联与高效通信。所以交互机内其实是MAC 地址 → 交换机自己的物理网口(Port) 映射表(不是 mac 到 ip):
交换机内部的 MAC 表(CAM 表):
┌───────────────────┬──────────────┐
│ 目标 MAC 地址 │ 交换机的网口 │
├───────────────────┼──────────────┤
│ AA:BB:CC:11:22:33 │ Port 1 │ <-- 插着电脑 A
│ AA:BB:CC:44:55:66 │ Port 2 │ <-- 插着电脑 B
│ AA:BB:CC:77:88:99 │ Port 3 │ <-- 插着路由器
└───────────────────┴──────────────┘所以并不是只有机房才需要,只要网线接口不够用、或者对局域网传输速度要求极高的地方,都需要独立的交换机。
1. 家庭/小办公室场景(网口不够用了)
假设你家里做装修,每个房间都拉了网线,客厅还有 NAS、游戏机、电脑,总共有 8 根网线。但是家用路由器后面只有 3 个 LAN 口,怎么办?
- 你只需要买一个几十块钱的 “5 口/8 口傻瓜式独立交换机”。
- 用一根网线把路由器和交换机连起来,另外 7 根网线全部插在交换机上。交换机立刻就能帮你扩展出更多的局域网接口。
2. 大型企业与机房场景(为什么机房里的交换机长得像“抽屉”)
机房里的独立交换机(比如 24 口、48 口,甚至是万兆光纤交换机),解决的是两个问题:
- 海量接口连接:机房里几百台 ECS 虚拟机、数据库服务器,需要通过成千上万根网线连接在一起,必须依赖几台大交换机堆叠起来分拨数据。
- 极高的数据吞吐与硬件性能:路由器 负责查表路由、NAT 转换、防火墙过滤,逻辑复杂,速度较慢(耗费 CPU)。交换机逻辑极简单,内部使用硬件级别的专用芯片(ASIC),处理数据全是“硬件电路硬转发”,延迟低至微秒级,每秒能吞吐几百 Gbps 的流量。
总结
- 交换机 是真正的物理硬件,负责在同一个局域网内,根据 MAC 地址把数据精准打给对应的网口。
- 你家里的路由器 内部已经焊接并集成了一块交换机芯片,背面的几个 LAN 网口就是交换机的物理接口,所以你不需要额外买独立交换机。
- 独立交换机 并不是机房专属,只要局域网设备多、接口不够用,随时都可以插一台独立交换机来扩充网口。
ARP(Address Resolution Protocol) 和 RARP (Reverse ARP)
arp 是地址解析协议,rarp 是逆向地址解析协议,即:
- ARP: 根据 IP 查 Mac 地址
- 谁干的:你的电脑。
- 过程:电脑知道对方 IP,但不知道对方 MAC 时,会在局域网喊一嗓子(ARP 广播),询问“谁的 IP 是这个?请把 MAC 告诉我”。
- RARP:反过来,根据 Mac 查询 IP
- 谁干的:DHCP 服务器(比如你家路由器里的 DHCP 服务)
- 过程:电脑刚开机时,网卡只有 MAC 地址,没有 IP。网卡会发广播问“我的 MAC 是这个,请分配给我一个内网 IP”。路由器收到后,查表并分配一个 IP 给你。
DHCP 服务器(路由器里的那个服务)内部维护一张 租约表(Lease Table / 地址绑定表),分配 IP 后它会记录:
┌───────────┬────────────────────────────┐
│ 字段 │ 说明 │
├───────────┼────────────────────────────┤
│ MAC 地址 │ 你的网卡物理地址 │
├───────────┼────────────────────────────┤
│ 分配的 IP │ 内网地址,如 192.168.1.100 │
├───────────┼────────────────────────────┤
│ 租约期限 │ 通常 1~24 小时 │
├───────────┼────────────────────────────┤
│ 主机名等 │ 额外信息 │
└───────────┴────────────────────────────┘DHCP 服务器会记住 MAC。这也就是为什么很多路由器后台有"已连接设备列表",能显示每台设备的 MAC、IP、主机名。
⚠️ 但注意一个细节:这个"记住"不是永久的,而是 租约(Lease) 性质的:
- 租约到期前,设备会续租(一般用一半时间就续),通常同一台设备能一直拿到同一个 IP;
- 但如果设备长时间不在线、租约过期,记录就会被释放,下次可能拿到 不同的 IP;
- 若想让某台设备永远拿到固定 IP,需要在路由器里做 DHCP 静态绑定 / 保留(Reservation),也就是把 MAC 和 IP 手动锁死。
绝大多数情况下是的。 家用路由器其实是一台"多功能一体机",把下面这些角色都集成在一起了:
- 路由器(转发不同网段)
- NAT / 防火墙
- 交换机(LAN 口)
- 无线 AP(Wi-Fi)
- DHCP 服务器 ← 就是这个
DHCP 服务是路由器固件里的一个软件进程(例如 OpenWrt 里是 dnsmasq,消费级路由器各有自己的实现)。
不过严格来说,DHCP 服务器不一定非得在路由器里——它可以是局域网里任何一台能响应广播的设备(树莓派、NAS、某台电脑等)。只是家庭场景下,为了省事,大家默认让路由器兼任。
RARP(Reverse ARP,反向地址解析)是很古老的协议,早就被淘汰了;这里学习记录,还是要了解。
DHCP 才是现在真正在用的"根据 MAC 分配 IP"的协议。
日常所说的"开机自动拿 IP",指的就是 DHCP,RARP 基本可以不用管了。
ARP 查询逻辑
在现实中,ARP 绝对不会 去尝试查询“外网设备的 MAC 地址”。因为你的电脑在发起 ARP 查询之前,就已经通过子网掩码(Subnet Mask)算出了目标是不是外网。电脑拿“目标 IP”和“自己的子网掩码”做计算:
目标是内网设备(比如 192.168.1.5):电脑决定,“我要直接把数据发给它!”
如果是外网,则把数据交给路由器网关,接下来就是路由器负责和外网建立连接,找到目标 IP。这里需要提一下 NAT 。
NAT 网络地址转换
当发送目标是外网 IP,例如百度的 IP,就需要交给路由器网关来转为出口。这里有个背景只是先补充一下,路由器的 Mac 地址通常都是全球唯一的:MAC 地址的前半部分是厂商代码(OUI),后半部分是流水号,全球所有网络设备的 MAC 地址都是硬编码且全球唯一的。这样就可以把路由器作为全球唯一的通信地址,做数据寄存。
NAT (Network Address Translation,网络地址转换)
[你的手机: 192.168.1.10:5000] ───发送请求───► [路由器 (NAT)] ───改包后发往外网───► [百度服务器]
│
记录 NAT 映射表:
内网 192.168.1.10:5000
◄───► 映射为外网 WAN_IP:8888出站(NAT 替换):当手机(192.168.1.10:5000)访问百度时,数据包经过路由器。路由器把数据包的源 IP 改成路由器的外网 WAN IP,把源端口改成一个随机分配的端口(比如 8888),同时在内存里记下一笔帐(NAT 表)。
入站(NAT 还原):百度把数据返回给 WAN IP:8888。路由器收到后,查了一下 NAT 表:“哦!8888 端口对应的其实是内网手机 192.168.1.10 的 5000 端口”。
路由器内部的 NAT 映射表(Conntrack 表),记录的是一个“双向四元组”的对应关系:
| 内部源(内网机器 + 内网应用) | 外部转换(路由器 WAN 口公网映射) | 目标服务器(外网) |
|---|---|---|
| 你的手机 (192.168.1.10:5000 微信) | WAN_IP : 8888 | 百度服务器 : 443 |
| 你的电脑 (192.168.1.20:5000 浏览器) | WAN_IP : 9999 | 知乎服务器 : 443 |
| 你的平板(192.168.1.30:6000 抖音) | WAN_IP : 7777 | 抖音服务器 : 443 |
注意你的内部源都是 IP + 端口 (应用层端口),而外部转换的端口,就是一个逻辑端口,例如 8888,因为 WAN_IP 通常只有一个,所以用个逻辑端口来映射到你内网的 IP + 端口,还有目标服务器的 IP + 端口。
IP 找到机器,端口确定具体发给哪个应用。
互联网接力赛:下一跳(Next Hop)接力
NAT 将地址转换后,数据包将离开你家,在互联网上的传输过程就像寄快递,过程如下:
[你家电脑]
│ (IP: 百度, MAC: 家用路由器)
▼
[家用路由器] ──查路由表──► 下一跳: 运营商小区路由器 A
│ (IP: 百度, MAC: 替换为路由器 A 的 MAC)
▼
[运营商路由器 A] ──查路由表──► 下一跳: 运营商骨干网路由器 B
│ (IP: 百度, MAC: 替换为路由器 B 的 MAC)
▼
[运营商骨干网 B] ──查路由表──► 下一跳: 百度机房出口路由器 C
│ (IP: 百度, MAC: 替换为路由器 C 的 MAC)
▼
[百度机房路由器 C] ──发现百度服务器就在自己的局域网内!
│ (在本局域网内发起 ARP 广播: "谁是百度服务器?")
▼
[百度服务器] ──回复 MAC 地址,完成最后 1 米投递!所以,网络就是个局域网套娃游戏,你的路由只有百度的 IP 地址,然后发现自己不知道这个 IP 的具体 Mac 地址 (注意是百度机房网关路由器的 MAC 地址,WAN 网入口),所以求救上级路由器,也就是更大的路由器;层层上访。直到骨干网络找到了百度 IP 的入口。
在这个过程中: ⚬ IP 地址(百度 IP):全程保持不变,作为终点导航。 ⚬ MAC 地址:每过一个路由器就换一次。每一次只填“下一台路由器”的 MAC 地址。
重点:下一跳过程中始终是下个路由器的 MAC 地址,层层查找,直到找到百度网关路由器的 MAC 地址。
此时百度网关路由器说,哎呀,这个 IP 地址在我的网络内,我来处理。接下来,再次进入 NAT 转换,将外网转换为内网的 IP + 应用端口。
阶段总结:网络寻址的终极心智模型
【你的电脑】
│ ① 算子网掩码,发现是外网 IP;
│ ② 发起 ARP,拿到【家里的路由器 MAC】;
▼
【家用路由器】 ───►【运营商路由器 A】 ───►【骨干网路由器 B】 ───►【百度入口网关】
│ │
└─────────── 阶段一:互联网长途接力(IP 导航,MAC 一跳一换) ─────────────┘
│
▼ ③ 网关根据 IP/端口 做负载均衡/NAT,锁定内网服务器 10.0.1.5
│ ④ 网关在机房内网发起 ARP 广播,问到 10.0.1.5 的 MAC
▼
【百度服务器/Pod (10.0.1.5)】- 外网看 IP(路由表接力):从你家到百度机房入口,全靠 IP 导航,路由表决定“下一跳去哪”,MAC 地址每一跳都在被擦掉重写(重写为下一个路由器的 MAC 地址)。
- 内网看 MAC(ARP 寻址 + 交换机转发):只有到达了终点所在的“最后一个局域网”,才会触发 ARP 协议去获取目标服务器的 MAC 地址,由交换机完成精准的最后一击投递。
汇总图:
