物理层与数据链路层:以太网帧结构,MAC地址与ARP协议,交换机工作原理,VLAN基础

说实话,很多刚入行的朋友总觉得物理层和数据链路层离应用太远,没什么好学的。我当年也这么想——直到有一次线上故障,查了三天才发现是网线接触不良导致的丢包重传。嗯,从那以后我再也不敢小看这两层了。

今天咱们就把这两层掰开揉碎了讲清楚。你想想看,数据从你的电脑发出去,第一脚踩在哪?就是物理层。它负责把比特流变成电信号、光信号或者无线电波,扔到线上去。而数据链路层呢,负责把这些比特组织成帧,加上地址,做差错控制,保证数据能在同一段链路上可靠传输。

以太网帧结构:数据在线上长什么样

以太网是目前最主流的局域网技术。它的帧结构,说白了就是数据在线上跑的「包裹」长什么样。我习惯把帧分成三部分:头部、数据、尾部。

字段 长度(字节) 说明
前导码 7 同步时钟,让接收方准备好
帧起始定界符 1 标志帧正式开始
目的MAC地址 6 接收方的硬件地址
源MAC地址 6 发送方的硬件地址
类型/长度 2 上层协议类型(如IPv4是0x0800)
数据 46~1500 上层传下来的IP包
帧校验序列 4 CRC校验,检测传输错误

这里有个坑,我踩过。数据字段最少46字节,不够要填充。为什么?因为以太网要求帧长至少64字节(从目的MAC到FCS),这是为了冲突检测机制能正常工作。如果你抓包看到一些奇怪的小包,别急着怀疑,先看看是不是填充。

关键点:MAC地址是48位,前24位是厂商OUI,后24位是设备序列号。我见过有人把MAC地址当成IP地址来配,结果网络不通——这俩完全不是一个层面的东西。

MAC地址与ARP协议:谁是谁的邻居

MAC地址是烧录在网卡上的,理论上全球唯一。但说实话,现在虚拟机、容器满天飞,MAC地址冲突的事我也遇到过。有一次客户说网络时通时不通,查了半天,发现两台虚机的MAC地址被人为改成一样的了。

那问题来了:我知道对方的IP地址,怎么知道它的MAC地址?这就是ARP协议干的事。

ARP(地址解析协议)的工作流程很简单:

  1. 主机A要发数据给IP为192.168.1.2的主机B
  2. A先查自己的ARP缓存表,看有没有B的MAC
  3. 没有?那就广播一个ARP请求:「谁是192.168.1.2?告诉你的MAC」
  4. B收到后,单播回复:「我是,我的MAC是xx:xx:xx:xx:xx:xx」
  5. A把结果缓存起来,下次直接用

ARP缓存默认几分钟到几十分钟不等。我建议你调短一点,尤其是无线环境,设备频繁上下线,缓存太久容易出问题。

注意:ARP协议没有认证机制,任何人都可以伪造ARP回复。这就是ARP欺骗攻击的原理。我曾经在实验室里演示过:一台伪造网关MAC的机器,能让整个网段的流量都经过它。生产环境一定要做DAI(动态ARP检测)或者端口安全。

交换机工作原理:它怎么知道该把帧发给谁

交换机工作在数据链路层,它不关心IP,只关心MAC。它的核心能力就三个字:学习、转发、过滤。

我画了一张图,帮你理解交换机的内部逻辑:

交换机工作原理流程图 交换机工作原理流程图 1. 接收以太网帧 2. 学习源MAC + 端口 3. 查MAC地址表 未知/广播:泛洪 已知:定向转发 转发到所有端口 (除源端口) 仅转发到目标端口 (不泛洪) MAC地址表老化时间默认300秒 广播帧和未知单播帧都会触发泛洪

交换机的MAC地址表是动态学习的。一开始表是空的,收到一个帧,它先看源MAC,记下这个MAC是从哪个端口进来的。然后看目的MAC,如果表里有,就只往那个端口发;如果没有,就向所有端口转发(除了进来的那个端口)。

这里有个细节:广播帧(目的MAC全F)和组播帧的处理方式不同。广播帧一定会泛洪,组播帧要看是否启用了IGMP Snooping。我遇到过一个问题:网络里有人开了P2P下载,大量组播流量导致交换机CPU飙升。后来开了IGMP Snooping,问题就解决了。

小技巧:排查网络环路时,可以看交换机的MAC地址表。如果同一个MAC地址在多个端口出现,大概率是有环路。STP(生成树协议)就是用来解决这个问题的。

VLAN基础:把一台交换机变成多台

VLAN(虚拟局域网)的核心思想,就是把一个物理网络划分成多个逻辑网络。不同VLAN之间不能直接通信,必须通过三层设备(路由器或三层交换机)。

为什么要用VLAN?我举个真实例子。以前公司网络就一个广播域,200多台机器。有人中了ARP病毒,全网广播,所有机器都卡。后来划分了VLAN,研发一个VLAN,市场一个VLAN,财务一个VLAN。广播被隔离了,病毒也扩散不出去了。

VLAN的划分方式有几种:

  • 基于端口:最常用,指定交换机的某些端口属于某个VLAN
  • 基于MAC:根据设备MAC自动划分,适合移动办公
  • 基于协议:根据上层协议划分,比如IPv4一个VLAN,IPv6一个VLAN
  • 基于子网:根据IP子网划分,但实际用得不多

跨交换机的VLAN通信需要Trunk链路。Trunk链路上跑的帧会打上802.1Q标签,标明它属于哪个VLAN。我见过有人把Trunk端口和Access端口搞混,结果VLAN之间通信不了。记住:Access端口只属于一个VLAN,Trunk端口可以承载多个VLAN。

端口类型 用途 帧格式 典型场景
Access 连接终端设备 无标签 PC、打印机、服务器
Trunk 连接交换机之间 带802.1Q标签 交换机互联、路由器子接口
Hybrid 混合模式 部分带标签 特殊场景,华为设备常用

避坑指南:我曾经在配置Trunk时忘了允许VLAN 1通过,结果管理流量全断了。VLAN 1是默认的管理VLAN,很多厂商的设备默认管理流量走VLAN 1。如果你要修改管理VLAN,记得先确认自己还能连上设备。

最后说一句:VLAN的编号范围是1~4094,其中0和4095保留。VLAN 1是默认的,不能删除。我习惯把VLAN 100以上留给业务,VLAN 10~50留给管理,这样一眼就能看出来。

好了,物理层和数据链路层的内容就讲到这里。这些知识看起来基础,但网络出问题的时候,往往就是这些基础环节出了岔子。下次遇到网络不通,先别急着怀疑上层协议,从物理层和数据链路层开始排查,往往能更快定位问题。