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(最大传输单元)。

小提示: 为什么数据载荷最小是46字节?因为帧头(14字节)+ 帧尾(4字节)= 18字节,为了保证整个帧不小于64字节(防止冲突检测出问题),数据部分就得至少46字节。不够?填充。

2.2 MAC地址:网络设备的身份证

MAC地址,就是网络接口卡的硬件地址。一共48位,通常写成12个十六进制数,比如 00:1A:2B:3C:4D:5E。前24位是厂商代码(OUI),后24位是厂商分配的序列号。

我曾经在项目里遇到过一个问题:两台设备MAC地址一模一样。你可能会问,不是全球唯一的吗?理论上是的,但有些山寨厂商乱烧录,或者虚拟机克隆时没重置MAC,就会冲突。结果就是网络时通时断,交换机懵了,不知道数据该往哪个端口送。

避坑指南: 我曾经在虚拟化环境中,直接克隆虚拟机导致MAC地址冲突。排查了一下午,最后发现是两台机器的MAC一模一样。从那以后,我克隆完必做一件事:检查并重置MAC地址。

2.3 ARP协议:IP地址怎么找到MAC地址?

网络层用的是IP地址,数据链路层用的是MAC地址。这两者怎么对应起来?靠的就是ARP协议(地址解析协议)。

ARP的工作原理,说白了就是一个“喊话”的过程。

  1. 主机A 想给 主机B 发数据,但它只知道B的IP,不知道B的MAC。
  2. 主机A 在局域网里广播一个ARP请求:“谁的IP是192.168.1.2?请把你的MAC地址告诉我!”
  3. 局域网里所有设备都收到了这个广播,但只有 主机B 发现是在叫自己。
  4. 主机B 回复一个ARP应答:“我是192.168.1.2,我的MAC是00:1A:2B:3C:4D:5E”。这个应答是单播的,只发给A。
  5. 主机A 收到后,把IP和MAC的对应关系写进自己的ARP缓存表里,下次直接用。

ARP缓存表一般几分钟就会过期,这是为了防止IP换设备后信息不准。你可以用 arp -a 命令看看自己电脑上的缓存表。

核心要点: ARP只在同一个广播域(即同一个局域网)内有效。跨网段通信,需要网关(路由器)来代理ARP。

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的数据。

避坑指南: 我曾经在配置Trunk口时,忘了允许某个VLAN通过,结果那个VLAN的设备跨交换机通信全断了。排查了半天,最后发现是Trunk口没放行。记住,Trunk口默认只允许VLAN 1通过,其他VLAN需要手动放行。

2.6 本章知识体系总览

下面这张图,把本章的核心知识点串起来了。从物理层的比特流,到数据链路层的帧,再到MAC地址、ARP协议、交换机和VLAN,你可以看到数据是怎么一步步封装和转发的。

第2章:物理层与数据链路层知识体系 物理层 数据链路层 以太网帧结构 MAC地址 ARP协议 交换机工作原理 VLAN与802.1Q 核心逻辑: 1. 物理层负责传输比特流,数据链路层负责将比特流封装成帧。 2. MAC地址是二层通信的标识,ARP协议负责将IP地址解析为MAC地址。 3. 交换机基于MAC地址表转发帧,VLAN用于隔离广播域。

好了,这一章的内容就这些。从帧结构到MAC地址,从ARP协议到交换机,再到VLAN,这些都是网络通信的基石。搞懂了这些,你再看上层协议,会感觉通透很多。