2. 物理层与数据链路层:以太网帧结构、MAC地址与ARP协议、VLAN与交换机工作原理
这一章,我们聊聊网络最底层的两兄弟——物理层和数据链路层。很多搞开发的朋友觉得这两层太“硬”,不太关心。但我个人的经验是,大部分线上疑难杂症,追根溯源都卡在这两层。你想想看,应用层调了半天,结果发现是网线没插好,或者MAC地址冲突,那多尴尬。
2.1 以太网帧结构:数据在线上到底长什么样?
数据在网络上传输,不是一股脑儿扔出去的。它得打包,这个包就是“帧”。以太网帧,说白了就是数据链路层的快递包裹。我习惯把它拆成几个部分来看。
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| 前导码 | 7 | 用于同步时钟,告诉接收端“我要发数据了” |
| 帧起始定界符 | 1 | 标志帧的开始 |
| 目标MAC地址 | 6 | 这帧数据要发给谁 |
| 源MAC地址 | 6 | 这帧数据是谁发的 |
| 类型/长度 | 2 | 上层协议类型(如IPv4是0x0800)或数据长度 |
| 数据载荷 | 46-1500 | 实际传输的数据,不够46字节要填充 |
| 帧校验序列 | 4 | CRC校验,检查数据是否损坏 |
这里有个坑,我刚开始学的时候总搞混。前导码和定界符其实不算真正的帧头,它们是物理层的东西。真正从MAC层开始算,是从目标MAC地址开始的。嗯,这里要注意,数据载荷最小46字节,最大1500字节。1500就是咱们常说的MTU(最大传输单元)。
2.2 MAC地址:网络设备的身份证
MAC地址,就是网络接口卡的硬件地址。一共48位,通常写成12个十六进制数,比如 00:1A:2B:3C:4D:5E。前24位是厂商代码(OUI),后24位是厂商分配的序列号。
我曾经在项目里遇到过一个问题:两台设备MAC地址一模一样。你可能会问,不是全球唯一的吗?理论上是的,但有些山寨厂商乱烧录,或者虚拟机克隆时没重置MAC,就会冲突。结果就是网络时通时断,交换机懵了,不知道数据该往哪个端口送。
2.3 ARP协议:IP地址怎么找到MAC地址?
网络层用的是IP地址,数据链路层用的是MAC地址。这两者怎么对应起来?靠的就是ARP协议(地址解析协议)。
ARP的工作原理,说白了就是一个“喊话”的过程。
- 主机A 想给 主机B 发数据,但它只知道B的IP,不知道B的MAC。
- 主机A 在局域网里广播一个ARP请求:“谁的IP是192.168.1.2?请把你的MAC地址告诉我!”
- 局域网里所有设备都收到了这个广播,但只有 主机B 发现是在叫自己。
- 主机B 回复一个ARP应答:“我是192.168.1.2,我的MAC是00:1A:2B:3C:4D:5E”。这个应答是单播的,只发给A。
- 主机A 收到后,把IP和MAC的对应关系写进自己的ARP缓存表里,下次直接用。
ARP缓存表一般几分钟就会过期,这是为了防止IP换设备后信息不准。你可以用 arp -a 命令看看自己电脑上的缓存表。
2.4 交换机工作原理:它怎么知道数据该往哪送?
交换机是数据链路层的核心设备。它不像集线器(Hub)那样无脑广播,而是聪明地根据MAC地址转发数据。
交换机的核心工作就三件事:学习、转发、泛洪。
- 学习: 交换机收到一个帧,会记录下源MAC地址和收到这个帧的端口号,写进MAC地址表。
- 转发: 交换机查MAC地址表,如果知道目标MAC在哪个端口,就直接从那个端口发出去。
- 泛洪: 如果MAC地址表里没有目标MAC的记录,交换机就把这个帧从除了接收端口以外的所有端口都发出去(泛洪)。
你想想看,刚开始交换机是“傻”的,谁都不认识。但通过不断学习,它就慢慢变“聪明”了。我见过不少网络卡顿的问题,查到最后发现是交换机MAC地址表被撑爆了,导致大量数据被泛洪,变成了广播风暴。
show mac-address-table(思科)或 display mac-address(华为)查看交换机的MAC地址表,这是排查二层环路和广播问题的利器。
2.5 VLAN:如何把一个物理网络切成多个逻辑网络?
VLAN(虚拟局域网),说白了就是把一台交换机,从逻辑上切成几台独立的交换机。为什么需要这个?因为默认情况下,所有设备都在一个广播域里,ARP广播、DHCP广播满天飞,浪费带宽,也不安全。
VLAN的核心作用:隔离广播域。不同VLAN之间的设备,二层是隔离的,不能直接通信。要通信,必须通过三层设备(路由器或三层交换机)。
VLAN的帧格式,是在标准以太网帧里插入了一个4字节的VLAN标签(802.1Q)。这个标签里最重要的就是12位的VLAN ID,取值范围1-4094。
标准以太网帧:
| 目标MAC | 源MAC | 类型/长度 | 数据 | FCS |
带VLAN标签的帧(802.1Q):
| 目标MAC | 源MAC | 0x8100 | VLAN ID | 类型/长度 | 数据 | FCS |
嗯,这里要注意,0x8100 是802.1Q的标识符,告诉交换机这个帧带了VLAN标签。交换机端口有两种模式:Access(接入)和 Trunk(干道)。Access口一般连电脑,只属于一个VLAN;Trunk口连交换机,可以承载多个VLAN的数据。
2.6 本章知识体系总览
下面这张图,把本章的核心知识点串起来了。从物理层的比特流,到数据链路层的帧,再到MAC地址、ARP协议、交换机和VLAN,你可以看到数据是怎么一步步封装和转发的。
好了,这一章的内容就这些。从帧结构到MAC地址,从ARP协议到交换机,再到VLAN,这些都是网络通信的基石。搞懂了这些,你再看上层协议,会感觉通透很多。