📖 Day 11 / 15 · 《计算机网络:自顶向下方法》阅读笔记
每天 30 分钟,15 天读懂计算机网络。今天我们「下沉」到数据链路层——数据在物理链路上实际传输的层。这里有以太网、ARP 协议、CSMA/CD、交换机和 VLAN。你每天插网线、连 WiFi,背后都是它们在默默工作。
一、链路层概述:从「IP 包」到「物理信号」#
1.1 为什么还需要链路层?#
前面几章我们一直在聊应用层和传输层,数据以 IP 数据报的形式在网络上飞来飞去。但问题来了——IP 包只是逻辑上的数据包,它不知道怎么在一根网线上变成电信号传过去。
就像你知道快递要从北京寄到上海(IP 层知道目的地址),但你总不能让快递员自己长翅膀飞过去吧?他得坐高铁、坐飞机、骑三轮——每一段路程,交通工具是不同的。
🎯 链路层的核心使命
将 IP 数据报(或者说网络层数据报)从一个节点(主机或路由器)传输到相邻的下一个节点(next-node)。每跨一段链路,用的协议可能不一样,但链路层负责把这件事搞定。
1.2 链路层的服务#
链路层主要提供以下服务(不是所有链路层协议都全部提供):
| 服务 | 说明 | 生活类比 |
|---|---|---|
| 成帧(Framing) | 把网络层数据报封装成帧,加上头和尾 | 把信件装进信封,写上收件人地址 |
| 链路接入 | 决定什么时候可以发送数据(MAC 协议) | 开会时谁先发言?得有个规则 |
| 可靠交付 | 有些链路层保证无差错传输(如 WiFi),有些不保证(如以太网) | 快递签收 vs. 直接丢门口 |
| 差错检测与纠正 | 检测传输过程中的比特翻转,甚至纠正 | 信封破损了检查一下,能修就修 |
1.3 链路层在哪里实现?#
不同于应用层和传输层主要在操作系统内核或用户空间实现,链路层主要在硬件(网卡)和固件中实现。
在你的 Mac mini 上,链路层功能主要由这几部分完成:
- 网卡(NIC,Network Interface Card):负责实际的信号发送和接收,实现了 CSMA/CD、CRC 校验等
- 网卡驱动程序:操作系统和硬件之间的桥梁
- 链路层地址(MAC 地址):烧录在网卡上的硬件地址
💡 实际看看你的 Mac mini
打开终端,输入
ifconfig en0,你会看到ether d0:11:e5:be:86:a7——这就是你 Mac mini 以太网口的 MAC 地址。这个地址是全球唯一的,在网卡出厂时就烧好了。有趣的是,你的 WiFi 接口(en1)有另一个不同的 MAC 地址:
d0:11:e5:9e:19:2c。每个网络接口都有自己独立的 MAC 地址。
1.4 MAC 地址 vs IP 地址——经典对比#
这个问题面试必考,我们好好捋一捋:
| 对比项 | MAC 地址 | IP 地址 |
|---|---|---|
| 所在层 | 链路层 | 网络层 |
| 长度 | 48 位(6 字节) | 32 位(IPv4)/ 128 位(IPv6) |
| 表示方式 | D0:11:E5:BE:86:A7 |
192.168.31.31 |
| 是否可变 | 烧录在网卡上,理论不变(但可软件修改) | 随网络环境变化 |
| 分配方式 | IEEE 分配前 24 位,厂商分配后 24 位 | DHCP 或手动配置 |
| 持久性 | 永久(跟着网卡走) | 临时(跟着网络走) |
🏠 生活类比:MAC 地址 = 身份证号,IP 地址 = 通讯地址
你的身份证号一辈子不变(MAC 地址),但你搬家后通讯地址就变了(IP 地址)。写信给别人,你写的是通讯地址(IP),但邮递员在最后一公里,是靠身份证上的名字(MAC)来确认是不是交对了人。
1.5 成帧:把数据「打包」#
链路层把网络层交下来的 IP 数据报封装成帧(Frame)。一个典型的帧结构如下:
1 | ┌──────────┬──────────┬──────────┬───────────────┬──────────┬──────────┐ |
- 前导码:用来同步时钟,相当于「注意了,我要开始说话了!」
- 目标 MAC / 源 MAC:收件人和寄件人的硬件地址
- 类型:上层协议类型(比如 0x0800 表示 IPv4)
- 数据:IP 数据报本体(MTU 通常是 1500 字节)
- CRC:循环冗余校验,用来检测传输错误
📦 生活类比:就像寄快递——IP 包是里面的物品,链路层帧是快递箱。快递箱上贴着寄件人和收件人的地址标签(MAC 地址),箱子里放着物品(IP 数据报),箱底还有个防伪码(CRC)确保没被掉包。
二、多路访问协议:一条路上谁先走?#
2.1 问题在哪?#
有些链路是广播链路——多个节点共享同一条物理介质。比如早期的总线型以太网,所有电脑接在同一根同轴电缆上。这时候问题就来了:如果两台电脑同时发数据,信号就会撞在一起(碰撞)。
这就像一群人挤在一个房间里说话,如果大家同时开口,谁也听不清。得有个规则。
2.2 三大类多路访问协议#
信道划分协议#
把信道提前分好,每人一份:
- TDMA(时分多路访问):每人一个时间片,轮流来
- FDMA(频分多路访问):每人一个频率通道
🎵 类比:就像合唱团,有人唱高音、有人唱低音(FDMA),或者大家轮流独唱(TDMA)。
随机接入协议#
不分份,谁想发就发,撞了再说:
- ALOHA:最简单粗暴——想发就发,没收到确认就等一会儿重发
- CSMA/CD:先听后说,撞了就退
轮流协议#
大家自觉排队:
- 轮询(Polling):主节点挨个问「你有数据要发吗?」
- 令牌传递(Token Passing):拿着令牌的才能发,发完传给下一个
2.3 CSMA/CD——以太网的核心协议#
CSMA/CD(载波侦听多路访问/碰撞检测) 是经典以太网的多路访问协议。它的规则可以总结为一句人话:
「先听后说,边说边听,撞了就撤,等会再来。」
拆解一下:
载波侦听(CS):发送前先听一下链路上有没有人在发数据。有就等,没有就发。
- 🔧 类比:开会发言前先听听有没有人在说话
多路访问(MA):多个节点共享链路
碰撞检测(CD):发送过程中同时监听链路。如果检测到信号异常(说明别人也在发),立即停止。
- 🔧 类比:你开口说话的同时也在听,发现有人也在说,你就停下来
二进制指数退避:碰撞后,等一个随机时间再试。如果又撞了,等待时间的上限翻倍,以此类推。
- 🔧 类比:两个人同时开口,都停下来。等 1 秒再试;又撞了,等 2 秒;再撞,等 4 秒……最多等到 1024 个时间槽
💡 重要细节:为什么有线以太网用 CSMA/CD,而 WiFi 用 CSMA/CA?
因为有线链路可以「边发边听」(碰撞检测),但无线链路做不到——发射信号太强,会盖住接收信号,所以 WiFi 只能「避免碰撞」(CA,Collision Avoidance)而不是「检测碰撞」(CD,Collision Detection)。
2.4 现代以太网还需要 CSMA/CD 吗?#
基本上不需要了。 现代以太网用的是交换机(Switch)而不是集线器(Hub)。交换机的每个端口是独立的冲突域,一台电脑和交换机之间的链路上只有它自己,不存在碰撞。CSMA/CD 主要存在于使用集线器的老式半双工以太网中。
你的 Mac mini 插在路由器/交换机上,走的是全双工模式,发送和接收各走各的道,根本不会撞车。
三、ARP 协议:从 IP 地址找 MAC 地址#
3.1 为什么需要 ARP?#
数据在网络层用的是 IP 地址,但在链路层,帧是用 MAC 地址来寻址的。所以问题来了:
我知道要把数据发给 192.168.31.1(路由器),但我怎么知道它的 MAC 地址是什么?
这就是 ARP(Address Resolution Protocol,地址解析协议) 干的事——把 IP 地址翻译成 MAC 地址。
📮 生活类比
你知道同事小明在「销售部 308 工位」(IP 地址),但你要寄快递,快递单上得写他的身份证号(MAC 地址)。你不知道怎么办?最简单的办法:在办公室大喊一声「308 工位的小明,你的身份证号是多少?」。小明听到了,大声回答你。这就是 ARP。
3.2 ARP 的工作过程#
- 查询 ARP 缓存:先看本地的 ARP 表里有没有这个 IP 对应的 MAC 地址。有就直接用,不用每次都广播。
- 发送 ARP 请求:如果没有,链路层广播一个 ARP 请求帧(目标 MAC =
FF:FF:FF:FF:FF:FF),帧里包含「谁的 IP 是 192.168.31.1?请把你的 MAC 告诉我。」 - ARP 响应:目标节点收到请求后,发现自己的 IP 确实是这个,就单播回复自己的 MAC 地址。
- 更新 ARP 缓存:发送方把这条记录存进 ARP 表,通常缓存 15-20 分钟。
3.3 🔧 实战:在你的 Mac mini 上查看 ARP 表#
打开终端,执行以下命令:
1 | # 查看完整的 ARP 表 |
来解读一下:
- **xiaoqiang (192.168.31.1)**:这是你的小米路由器(OpenWrt 系统)。它的 IP 是 192.168.31.1,MAC 地址是
58:ea:1f:71:25:bb。xiaoqiang是小米路由器的主机名。 - **iphone (192.168.31.15)**:你的 iPhone,MAC 地址
de:bb:e:58:97:1a - **mac (192.168.31.31)**:你自己的 Mac mini!MAC 地址
26:a:bc:79:39:c8,标注了permanent因为这是本机接口的 MAC
🔍 动手试试:试着
ping一个你之前没通信过的设备,然后立刻arp -a看看 ARP 表有没有变化。你会看到一条新的记录被添加了——这就是 ARP 协议刚刚在后台默默工作了。
3.4 ARP 欺骗——安全隐患#
ARP 协议有一个天生缺陷:它不验证响应的真实性。任何设备都可以发送 ARP 响应说「我是 192.168.31.1,我的 MAC 是 XX:XX:XX:XX」,其他设备会照单全收。
这就是 ARP 欺骗(ARP Spoofing) 的原理,也是中间人攻击的常见手段。黑客把自己的设备伪装成路由器的 MAC 地址,让其他设备的流量都经过他。
防御手段:静态 ARP 绑定、动态 ARP 检测(DAI)、网络隔离等。在 OpenWrt 路由器上,你可以配置静态 ARP 绑定来防止 ARP 欺骗。
四、以太网:统治世界的链路层技术#
4.1 以太网简史#
以太网的历史可以追溯到 1970 年代。Robert Metcalfe 在 Xerox PARC 发明了它,最初的速度只有 2.94 Mbps,用一根同轴电缆连接所有电脑。
后来以太网不断进化:
| 版本 | 速度 | 介质 | 年代 |
|---|---|---|---|
| 10Base5(粗缆以太网) | 10 Mbps | 同轴电缆 | 1980s |
| 10Base-T | 10 Mbps | 双绞线 | 1990s |
| 快速以太网 | 100 Mbps | 双绞线/光纤 | 1995 |
| 千兆以太网 | 1 Gbps | 双绞线/光纤 | 1998 |
| 万兆以太网 | 10 Gbps | 光纤/双绞线 | 2002 |
| 25/40/100 Gbps 以太网 | 25-100 Gbps | 光纤 | 2010s |
| 400 Gbps 以太网 | 400 Gbps | 光纤 | 2017+ |
🤯 想想看:从 2.94 Mbps 到 400 Gbps,以太网速度提升了 13 万倍以上。但帧格式几乎没有变过。这就是好设计的力量——向前兼容是以太网长盛不衰的关键。
4.2 以太网帧结构#
以太网帧的格式非常简洁:
1 | ┌───────────┬────────────┬──────────┬──────────┬─────────────────┬──────┐ |
几个关键点:
- 最小帧长 64 字节:为了保证碰撞检测能正常工作(发送端还没发完就能检测到碰撞)。如果数据不够 46 字节,就填充到 46 字节。
- 最大帧长 1518 字节:其中数据部分最大 1500 字节(这就是 MTU 1500 的由来)。
- 类型字段:指示上层协议。0x0800 = IPv4,0x86DD = IPv6,0x0806 = ARP。
- CRC:32 位循环冗余校验,接收方用它检测错误。如果校验失败,直接丢弃(以太网不做重传,交给上层处理)。
4.3 以太网为什么「赢了」?#
在链路层技术的竞争中,以太网打败了 Token Ring、FDDI、ATM 等对手,成为绝对的霸主。原因:
- 简单:CSMA/CD 比令牌环简单多了
- 便宜:设备和线缆成本低
- 向前兼容:新版本保持帧格式不变,老设备能混用
- 不断进化:从共享到交换,从半双工到全双工,不断自我革新
- 网络效应:用的人越多,生态越完善,成本越低,用的人更多
🏆 类比:以太网就像 USB 接口——不是技术最完美的方案,但凭借简单、便宜、兼容性好的优势,干掉了所有竞争对手。
五、交换机:链路层的「智能快递分拣中心」#
5.1 从集线器到交换机#
早期的以太网用集线器(Hub)连接所有设备。集线器是纯物理层设备,它做的事情简单粗暴:把一个端口收到的信号,复制到所有其他端口。
📢 类比:集线器就像一个大喇叭广播系统——一个人说话,所有人都能听到。问题是:只有说话人和目标听众关心这个消息,其他人觉得是噪音。而且两个人同时说话就撞车了。
交换机(Switch) 是链路层设备,聪明得多。它会根据 MAC 地址,把帧只送到目标端口。
📮 类比:交换机就像一个智能分拣中心的快递员——看到收件人地址(目标 MAC),直接送到对应的传送带上,不会满大厅乱喊。
5.2 交换机的工作原理#
交换机的核心是一张 转发表(也叫 MAC 地址表 / CAM 表)。这张表记录了:哪个 MAC 地址在哪个端口上。
工作流程:
- 收到帧:交换机从某个端口收到一个以太网帧
- 学习(自学习):查看帧的源 MAC 地址,记录到转发表中——「哦,这个 MAC 在这个端口上」
- 查表转发:查看帧的目标 MAC 地址,查转发表:
- 找到了?只从对应端口转发出去 ✅
- 没找到?泛洪(Flooding)——从所有其他端口转发出去(除了收到的那个端口)
- 过滤:如果目标 MAC 和源 MAC 在同一个端口上,说明不需要转发,直接丢弃
🧠 交换机自学习——天才般的设计
交换机不需要任何配置,开机就能工作。它通过观察流经的帧,自动学习哪个设备在哪个端口。这叫即插即用(Plug and Play)。
5.3 🔧 实战:想象你家的网络拓扑#
你的网络结构大致是这样的:
1 | 互联网 |
你的小米路由器内置了一个小交换机芯片。当你的 Mac mini 通过 WiFi 发数据给 iPhone 时,路由器的交换芯片在链路层做转发:
- 收到来自 Mac mini 的帧(源 MAC =
26:0a:bc:79:39:c8) - 学习:「Mac mini 在 WiFi 接口这一侧」
- 查目标 MAC(
de:bb:e:58:97:1a),发现是 iPhone - 转发到 iPhone 所在的 WiFi 信道
💡 如果你想玩更高级的:OpenWrt 系统支持查看和管理交换机配置。SSH 登录你的路由器后,可以用
swconfig list和swconfig dev switch0 show查看交换机芯片的 VLAN 配置和端口状态。
5.4 交换机 vs 路由器#
| 对比项 | 交换机 | 路由器 |
|---|---|---|
| 工作层级 | 链路层(第二层) | 网络层(第三层) |
| 寻址方式 | MAC 地址 | IP 地址 |
| 转发表 | MAC 地址表(自动学习) | 路由表(配置或协议学习) |
| 即插即用 | ✅ 是 | ❌ 需要配置 |
| 隔离冲突域 | ✅ 每个端口一个冲突域 | ✅ |
| 隔离广播域 | ❌ 不隔离(除非用 VLAN) | ✅ 每个接口一个广播域 |
| 处理速度 | 快(硬件转发) | 相对慢(需要查路由表) |
六、VLAN:虚拟局域网#
6.1 为什么需要 VLAN?#
随着网络规模增大,交换机面临一个问题:广播包(比如 ARP 请求)会泛洪到所有端口。如果网络里有几百台设备,广播流量会变得很讨厌。
而且有时候我们希望隔离不同部门/类型的设备:
- 办公网络和 IoT 设备网络隔离
- 开发测试环境和生产环境隔离
- 访客 WiFi 和内网隔离
🏢 类比:一栋大楼里,你想让财务部、技术部、市场部各自独立,互不干扰。物理上他们都在同一栋楼里,但你可以用门禁系统把他们分到不同的区域。VLAN 就是网络世界的「门禁系统」。
6.2 VLAN 的工作原理#
VLAN(Virtual Local Area Network,虚拟局域网)通过在以太网帧上插入一个 VLAN 标签(802.1Q Tag),将一个物理交换机划分为多个虚拟局域网。
带 VLAN 标签的帧格式(802.1Q):
1 | ┌───────────┬────────────┬──────────┬────────────────┬──────────┬──────┐ |
VLAN Tag 里最重要的信息是 VLAN ID(12 位),取值范围 0-4095。
同一个 VLAN 内的设备可以自由通信,不同 VLAN 之间需要通过路由器(或三层交换机)才能通信。
6.3 端口类型:Access 端口和 Trunk 端口#
Access 端口(接入端口):只属于一个 VLAN。连普通 PC/设备的端口。
- 🔧 类比:一个房间的门,只能进出一个部门的人
- 帧在 Access 端口上不带 VLAN 标签(标签在交换机内部处理)
Trunk 端口(中继端口):可以承载多个 VLAN 的流量。通常用于交换机之间的连接。
- 🔧 类比:一条走廊,连接多个房间,不同部门的人都可以走
- 帧在 Trunk 端口上带 VLAN 标签,以区分属于哪个 VLAN
6.4 🔧 实战:OpenWrt 路由器上的 VLAN 配置#
很多 OpenWrt 路由器支持 VLAN 功能。一个典型的应用场景是把路由器的 4 个 LAN 端口划分成不同的 VLAN:
1 | # SSH 登录路由器后查看交换机配置 |
常见的 VLAN 应用场景:
- IPTV 分流:把 IPTV 机顶盒的端口单独划一个 VLAN,避免广播包干扰其他设备
- Guest WiFi:访客 WiFi 和主网络隔离(OpenWrt 通常通过独立接口实现,本质也是 VLAN 隔离)
- IoT 隔离:智能家居设备放在单独的 VLAN,防止被入侵后横向渗透到主网络
6.5 你的 Mac mini 与 VLAN#
回到你的系统。还记得 ifconfig en0 输出中有一行 options=567<RXCSUM,TXCSUM,VLAN_MTU,TSO4,TSO6,AV,CHANNEL_IO> 吗?
那个 VLAN_MTU 表示你的 Mac mini 网卡支持 VLAN 功能。macOS 中可以通过以下命令配置 VLAN:
1 | # 查看 VLAN 配置(默认没有) |
在实际使用中,如果你只是普通家用,不太需要在 Mac 上配 VLAN。但如果你搞了软路由、NAS 虚拟化或者企业网络,VLAN 就是必备技能了。
七、链路层的完整数据之旅#
让我们把今天学的东西串起来,走一遍完整流程:当你的 Mac mini 要发一个 HTTP 请求给服务器时,链路层做了什么?
1 | 应用层:HTTP 请求消息 |
到路由器后,路由器拆掉链路层帧头,看 IP 层,决定下一跳是谁,再重新封装成新的链路层帧发出去……就这样一路接力,直到目的地。
🎯 一句话总结:链路层负责相邻节点间的「最后一跳/下一跳」传输。IP 负责全程路线规划,链路层负责每一步的实际行动。
🔑 关键知识点回顾#
| 知识点 | 核心内容 |
|---|---|
| 链路层职责 | 成帧、链路接入、差错检测、可靠交付(可选) |
| MAC 地址 | 48 位硬件地址,网卡出厂烧录,链路层寻址用 |
| CSMA/CD | 先听后说、边说边听、碰撞退避。现代交换式以太网已不太需要 |
| ARP 协议 | 将 IP 地址解析为 MAC 地址。广播请求 + 单播响应,有缓存表 |
| 以太网帧 | 目标MAC + 源MAC + 类型 + 数据(46-1500B) + CRC |
| 交换机原理 | 自学习 MAC 地址表,按目标 MAC 单端口转发,未知则泛洪 |
| VLAN(802.1Q) | 用标签在物理交换机上划分虚拟局域网,隔离广播域 |
| 交换机 vs 路由器 | 交换机二层转发(MAC),路由器三层转发(IP) |
📌 Day 12 预告:无线网络和移动网络——WiFi、蜂窝网络#
今天我们聊了有线链路层,但你现在用 Mac mini 很可能走的是 WiFi。无线网络可是一个完全不同的战场——信号会衰减、会被干扰、不能边发边听(所以 WiFi 用 CSMA/CA 而不是 CSMA/CD)。
明天 Day 12,我们来聊:
- WiFi(802.11 系列):你每天用的无线网络是怎么工作的?
- CSMA/CA:无线版本的「先听后说」,比有线版本更谨慎
- 蜂窝网络(4G/5G):手机是怎么在移动中保持连接的?
- 移动性管理:从 WiFi 切到 4G,为什么视频不会断?
WiFi 的帧格式、无线信道的挑战、蜂窝网络的架构……精彩的无线世界等着我们!
💬 今日思考题:如果有人在你局域网里疯狂发 ARP 欺骗包,你的 Mac mini 会怎样?怎么发现?怎么防御?欢迎在评论区讨论!
—— 小黑白陪你读网络,Day 11 打卡 ✅