欢迎光临
我们一直在努力

组网第23课:以太网帧与 MAC 地址——一帧到底长什么样,错帧从哪来

网线插好了却 CRC 报错?帧结构里藏着答案


文章目录

  • 网线插好了却 CRC 报错?帧结构里藏着答案
    • 一、开场:测线仪八个灯全亮,网为什么还是慢?
    • 二、一帧长什么样:把它当成一个标准快递包裹
      • 1. 帧的结构:一个信封的五个要素
      • 2. 两个关键数字:64 和 1518
      • 3. 类比:封条对不上,直接拒收
    • 三、MAC 地址:48 位里的“身份证”和三种帧
      • 1. OUI:前 24 位是“哪个厂家”
      • 2. 三种目的帧
    • 四、命令落点:把错帧计数和双工协商读明白
      • 1. display interface:错帧全在这
      • 2. 速率与双工:一端半双工,两头都难受
      • 3. Jumbo 帧:大信封要沿路每站都认
      • 4. 错帧排查决策表
      • 思科对照
    • 五、🔧 运维视角 & 📐 设计视角
    • 六、小结与命令速查表
    • 七、思考题 & 评论区聊聊

一、开场:测线仪八个灯全亮,网为什么还是慢?

上礼拜去一个新装修的办公区验收。工位上电脑能上网、灯也亮,但就是怪:拷贝文件速度忽快忽慢,视频会议偶尔卡成 PPT,打印机动不动超时。

甲方信息员一脸无辜地掏出测线仪:“你看你看,八个灯全亮、一路全通,我测过了,线没问题!”

我登交换机一敲 display interface GigabitEthernet0/0/3,指着回显让他看:

Duplex: HALF, Speed: 100
Input: …… CRC: 12837, Runts: 402
Output: …… Late Collisions: 316

问题全在这几行:协商成了半双工、100 兆,CRC 错帧一万多,延迟冲突三百多。

记住一句话:测线仪灯亮,只证明八根线通了;不代表这根线压得好、跑得到位。 线序错、水晶头压得不紧、串扰、双工不匹配,测线仪都可能“绿灯放行”,但交换机的错帧计数会如实记着。

这一课,我们就把 MAC 表里那一帧拆开揉碎——它在线缆里到底长什么样?每个字段管什么?CRC、Runts、Giants 这些计数又是怎么回事?


二、一帧长什么样:把它当成一个标准快递包裹

1. 帧的结构:一个信封的五个要素

以太网帧(以最常见的 Ethernet II 为例)的结构很规整,你把它想象成一个标准快递包裹:

  • 目的 MAC:收件人地址(这帧送给谁);
  • 源 MAC:寄件人地址(这帧谁发的);
  • 类型/长度:里面装的是什么——0x0800 是 IPv4、0x0806 是 ARP、0x86DD 是 IPv6;
  • 数据 Payload:信纸/货物(上层的 IP 报文);
  • FCS:封口上的验货封条,一段 CRC 校验码。

图1:以太网帧结构,前导码不计入帧长,帧长最小64、最大1518

各字段字节数(B 表示字节):

字段长度作用
前导码 Preamble 7B 一串交替的 0101,让接收方时钟同步,物理层前缀,不计入帧长
帧起始 SFD 1B 10101011,宣告“帧要开始了”,同样不计入帧长
目的 MAC 6B 收件人
源 MAC 6B 寄件人
类型/长度 2B 装的是 IPv4/ARP/IPv6,还是数据长度
数据 Payload 46~1500B 上层报文;不足 46 字节要填充(Pad)
FCS 4B 帧校验序列(CRC-32),验货封条

2. 两个关键数字:64 和 1518

注意前导码 + SFD 那 8 个字节是物理层的“同步前缀”,不算进帧长。真正算帧长的是“目的 MAC → FCS”这一段:

  • 最小帧 64 字节:6+6+2+46+4 = 64。数据不足 46 字节就补 Pad 凑满,这是为了让冲突检测有效;
  • 最大帧 1518 字节:6+6+2+1500+4 = 1518,对应标准 MTU 1500;
  • 超过 1518 的普通帧会被当“巨帧”丢弃;要传更大的,得端到端开 Jumbo(见第四节)。

为什么偏偏是 64? 这是早期以太网 CSMA/CD(载波监听、冲突检测)机制留下的规矩:帧必须足够长,才能让信号在最远两台设备之间往返一趟的时间里,还来得及检测到冲突。按最极端的网络直径一算,底线恰好是 64 字节、约 512 位时隙。今天的全双工交换网络早已没有传统冲突,但为了兼容老设备,最小帧长一直保留。另外,帧与帧之间还留了 12 字节的帧间隙(IFG),给网卡一点处理和喘息的空当,它同样不算帧长。

3. 类比:封条对不上,直接拒收

FCS 是发送端对整帧算的一个 CRC-32 校验码。接收端收到后自己再算一遍:

  • 算出来的 FCS 和帧尾的一致 → 封装没破,正常上交;
  • 对不上 → 说明这帧在途中被破坏了(信号衰减、干扰、水晶头接触不良、双工冲突),接收端直接丢弃,不往上送,同时在 CRC 计数器上记一笔。

就像快递的封条,撕开了、对不上号,收件人当场拒收——这帧不会被“修好”,而是丢掉等上层重传。你看到的网速慢、卡顿,本质上就是错帧被丢 + 上层不断重传。

#mermaid-svg-XbDqUwOEmXuZsNhj{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-XbDqUwOEmXuZsNhj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-XbDqUwOEmXuZsNhj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-XbDqUwOEmXuZsNhj .error-icon{fill:#552222;}#mermaid-svg-XbDqUwOEmXuZsNhj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XbDqUwOEmXuZsNhj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-XbDqUwOEmXuZsNhj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XbDqUwOEmXuZsNhj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XbDqUwOEmXuZsNhj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-XbDqUwOEmXuZsNhj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XbDqUwOEmXuZsNhj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XbDqUwOEmXuZsNhj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XbDqUwOEmXuZsNhj .marker.cross{stroke:#333333;}#mermaid-svg-XbDqUwOEmXuZsNhj svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XbDqUwOEmXuZsNhj p{margin:0;}#mermaid-svg-XbDqUwOEmXuZsNhj .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-XbDqUwOEmXuZsNhj .cluster-label text{fill:#333;}#mermaid-svg-XbDqUwOEmXuZsNhj .cluster-label span{color:#333;}#mermaid-svg-XbDqUwOEmXuZsNhj .cluster-label span p{background-color:transparent;}#mermaid-svg-XbDqUwOEmXuZsNhj .label text,#mermaid-svg-XbDqUwOEmXuZsNhj span{fill:#333;color:#333;}#mermaid-svg-XbDqUwOEmXuZsNhj .node rect,#mermaid-svg-XbDqUwOEmXuZsNhj .node circle,#mermaid-svg-XbDqUwOEmXuZsNhj .node ellipse,#mermaid-svg-XbDqUwOEmXuZsNhj .node polygon,#mermaid-svg-XbDqUwOEmXuZsNhj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XbDqUwOEmXuZsNhj .rough-node .label text,#mermaid-svg-XbDqUwOEmXuZsNhj .node .label text,#mermaid-svg-XbDqUwOEmXuZsNhj .image-shape .label,#mermaid-svg-XbDqUwOEmXuZsNhj .icon-shape .label{text-anchor:middle;}#mermaid-svg-XbDqUwOEmXuZsNhj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-XbDqUwOEmXuZsNhj .rough-node .label,#mermaid-svg-XbDqUwOEmXuZsNhj .node .label,#mermaid-svg-XbDqUwOEmXuZsNhj .image-shape .label,#mermaid-svg-XbDqUwOEmXuZsNhj .icon-shape .label{text-align:center;}#mermaid-svg-XbDqUwOEmXuZsNhj .node.clickable{cursor:pointer;}#mermaid-svg-XbDqUwOEmXuZsNhj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-XbDqUwOEmXuZsNhj .arrowheadPath{fill:#333333;}#mermaid-svg-XbDqUwOEmXuZsNhj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XbDqUwOEmXuZsNhj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XbDqUwOEmXuZsNhj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XbDqUwOEmXuZsNhj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-XbDqUwOEmXuZsNhj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XbDqUwOEmXuZsNhj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-XbDqUwOEmXuZsNhj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XbDqUwOEmXuZsNhj .cluster text{fill:#333;}#mermaid-svg-XbDqUwOEmXuZsNhj .cluster span{color:#333;}#mermaid-svg-XbDqUwOEmXuZsNhj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XbDqUwOEmXuZsNhj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-XbDqUwOEmXuZsNhj rect.text{fill:none;stroke-width:0;}#mermaid-svg-XbDqUwOEmXuZsNhj .icon-shape,#mermaid-svg-XbDqUwOEmXuZsNhj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XbDqUwOEmXuZsNhj .icon-shape p,#mermaid-svg-XbDqUwOEmXuZsNhj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-XbDqUwOEmXuZsNhj .icon-shape .label rect,#mermaid-svg-XbDqUwOEmXuZsNhj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XbDqUwOEmXuZsNhj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-XbDqUwOEmXuZsNhj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-XbDqUwOEmXuZsNhj :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

一致

不一致

上层数据

封装目的MAC 源MAC 类型

计算FCS校验码

网卡发出

对端收到帧

FCS核对是否一致

正常上交处理

丢弃并计一笔CRC


三、MAC 地址:48 位里的“身份证”和三种帧

1. OUI:前 24 位是“哪个厂家”

MAC 地址共 48 位(6 字节),写成 6 组十六进制,比如 AC-DE-48-00-11-22。

  • 前 24 位(前 3 组)是 OUI,厂商标识,由 IEEE 分配,能看出网卡是谁家的(比如华为、Intel、Dell 各有前缀);
  • 后 24 位(后 3 组)是设备 ID,由厂商自行分配,保证全球唯一。

图2:MAC地址前24位OUI、后24位设备ID,以及单播/组播/广播三种帧

MAC 第一个字节还有两个特殊位,了解即可:

  • I/G 位(第 1 个字节的最低位):0 表示单播(具体某台设备),1 表示组播;
  • U/L 位(第 1 个字节的次低位):0 是全局 OUI 管理,1 是本地自行修改。

2. 三种目的帧

类型目的 MAC含义典型场景
单播 某一具体 MAC 一对一 你和某台服务器通信
组播 第一字节最低位为 1,如 01-00-5E-xx-xx-xx 一对一组 IPv4 组播、部分协议发现
广播 FF-FF-FF-FF-FF-FF 一对所有 ARP 请求“谁是这个 IP”

第 22 课讲的“未知单播/广播/组播要泛洪”,正是建立在目的 MAC 这几种形态上的。


四、命令落点:把错帧计数和双工协商读明白

1. display interface:错帧全在这

<SW> display interface GigabitEthernet0/0/3

重点看这几行(字段名随设备版本略有差异,看意思):

GigabitEthernet0/0/3 current state : UP
Line protocol current state : UP
Speed : 1000, Duplex : FULL
Last 300 seconds input rate 1200 bytes/sec
Input:
Unicast: …, Broadcast: …, Multicast: …
Errors: 13, Runts: 402, Giants: 0
CRC: 12837, Discard: 0
Output:
Unicast: …, Errors: 0
Collisions: 3, Late Collisions: 316

这些计数怎么读,是这一课的核心:

计数项含义指向哪里
CRC / FCS 帧校验对不上,内容损坏 物理层:水晶头、网线、接口、光模块、干扰
Runts(残帧) 小于 64 字节的坏帧 网卡故障、双工不匹配
Giants / Jabbers 大于 1518 的帧 巨帧,Jumbo 没端到端开启
Late Collisions 延迟冲突 一端半双工、或线缆超长
Collisions 冲突 半双工网络正常会有,全双工下应基本为 0
Errors / Discard 综合错误、丢弃 拥塞缓冲、以上问题叠加

判读有个窍门:先看速率双工,再看错误计数是不是在涨。 看的时候连敲两次,间隔几秒:

<SW> display interface GigabitEthernet0/0/3 | include CRC

  • 计数一直涨 → 故障正在发生;
  • 只是个历史大数、不增长 → 可能是以前的旧账,记下即可。

2. 速率与双工:一端半双工,两头都难受

开场那台口就是协商成了 100M / HALF。双工不匹配是“能通但慢、错帧、延迟冲突”的经典原因。

  • 全双工:像双向车道,收和发同时进行,互不打断;
  • 半双工:像对讲机,同一时刻只能一个人说,两头抢话就冲突,报 Late Collisions、产生错帧。

正常两端都应协商成 1000M / FULL。默认自协商即可,只有自协商异常、需要强制时才手动锁定(两端要一致):

<SW> system-view
[SW] interface GigabitEthernet0/0/3
[SW-GigabitEthernet0/0/3] undo negotiation auto # 关闭自协商(仅在需要强制时)
[SW-GigabitEthernet0/0/3] speed 1000 # 强制千兆
[SW-GigabitEthernet0/0/3] duplex full # 强制全双工
[SW-GigabitEthernet0/0/3] quit
[SW] return
<SW> save

验证:

<SW> display interface GigabitEthernet0/0/3 | include Speed
Speed : 1000, Duplex : FULL

  • 看到 Speed : 1000, Duplex : FULL 即正常;
  • 异常:如果你这端强制全双工、对端却开着自协商,对端往往协商成半双工,双工不匹配。原则是两端都自协商,或两端都强制成一致。

3. Jumbo 帧:大信封要沿路每站都认

存储、虚拟化、大数据场景常传大块数据,标准 1500 字节不够用,会开 Jumbo 帧(常见 9000 字节)。

这就是大集装箱的类比:你换大信封没问题,但沿途每一个分拣站都得认大信封——只要有一台设备还是 1518,大帧到它那儿就被丢,报 Giants。

华为盒式交换机在接口下开启(具体命令以设备型号/版本为准):

<SW> system-view
[SW] interface GigabitEthernet0/0/10
[SW-GigabitEthernet0/0/10] jumboframe enable 9000 # 接口放行9000字节巨帧
[SW-GigabitEthernet0/0/10] quit
[SW] return

  • 务必端到端逐跳开启:服务器网卡、每台交换机、路由器接口,一个都不能少;
  • 配合 ping -s 8972(大包)验证,相关的大包测试和 MTU 探测方法在第 19 课讲过,这里不重复。

4. 错帧排查决策表

图3:display interface 各类错帧计数对应的故障定位与处理动作

现象命令看到什么判断动作
CRC 持续涨 display interface CRC/FCS 不断增加 物理层损坏/干扰 重做水晶头、换跳线、查光模块(光功率见第19课)、换口
大量 Runts display interface Runts 涨、帧小于 64 网卡故障或双工不匹配 查对端网卡、统一双工
Giants 增长 display interface 帧大于 1518 被丢 Jumbo 没端到端开 逐跳开 jumboframe
Late Collisions display interface 延迟冲突多 一端半双工或线缆超长 两端统一全双工、缩短线缆
协商成 100M/Half display interface Speed/Duplex 偏低 自协商失败、线序/压接问题 统一自协商或强制、重做水晶头
灯亮但时快时慢 连看两次计数 多类错误在涨 错帧→重传 按上表定位,先物理层后配置

物理层基本功:重做水晶头

很多 CRC 最后都栽在一颗小小的水晶头上。室内布线通用 T568B 线序,水晶头铜片朝上、卡榫朝下,从左到右为:

橙白 橙 绿白 蓝 蓝白 绿 棕白 棕

两端都用 T568B 是直连线;一头 568A、一头 568B 是交叉线(现代网口基本都支持 MDI/MDI-X 自动翻转,不用刻意做交叉线)。压接要做到三点:外皮压进水晶头内部、八根芯顶到最前端、卡扣压紧;线对尽量少解开。线对解开过长会导致串扰——这正是“测线仪灯亮、CRC 却疯涨”的隐形元凶。

思科对照

动作华为 VRP思科 IOS
看接口错帧 display interface gi0/0/1 show interface gi0/1
速率/双工 speed 1000 / duplex full / negotiation auto speed 1000 / duplex full / speed auto
Jumbo jumboframe enable 9000(盒式接口) mtu 9000(或 system mtu)
错帧字段 CRC / Runts / Giants / Late Collisions CRC / runts / giants / late collisions(在 show interface)

光模块、光功率、收发光那套物理层排查在第 19 课《出口与专线排障实战》已经细讲;本课聚焦电口网线、帧结构和双工协商,不在此重复。


五、🔧 运维视角 & 📐 设计视角

🔧 运维视角:

  • 灯亮不等于线好,测线仪通≠业务正常,真正的体检报告是 display interface 里的错误计数,连敲两次看是否在涨;
  • “能通但慢、偶发卡顿、延迟冲突”优先排查双工协商,两端务必都是 1000M / FULL;
  • 修 CRC 别先怀疑配置,先物理层:重做水晶头、换一根跳线,往往一分钟解决;
  • 开 Jumbo 一定要画清端到端路径,逐跳确认,缺一个口就丢巨帧。

📐 设计视角:

  • 布线施工时就把水晶头工艺、测试规范写进验收标准,别只看通断,留好测试报告(六类线、规范压接、不超距);
  • 全网统一自协商策略,服务器、存储等固定端口可强制全双工并形成文档,避免一端 auto 一端 force;
  • 设计存储、虚拟化、大数据网络时,提前统一 MTU/Jumbo 规格,并在设备清单里逐台标注,避免上线后才发现中间某台不支持。

六、小结与命令速查表

  • 以太网帧 = 前导码(不计帧长)+ 目的 MAC + 源 MAC + 类型 + 数据 + FCS;帧长最小 64、最大 1518(不含前导码);
  • FCS 校验不过的帧直接丢弃并计 CRC,表现为慢、卡顿、重传;
  • MAC 48 位:前 24 位 OUI 是厂商、后 24 位是设备 ID;三种目的帧是单播、组播、广播;
  • display interface 里:CRC 看物理层、Runts 看网卡/双工、Giants 看 Jumbo、Late Collisions 看双工不匹配;
  • 两端速率双工要一致,全双工千兆是常态;
  • Jumbo 必须端到端逐跳开启。

本篇命令速查表(华为 VRP):

目的华为命令思科对照
看接口状态/错帧 display interface gi0/0/1 show interface gi0/1
过滤某计数 display interface gi0/0/1 | include CRC show interface gi0/1 | include CRC
设自协商 negotiation auto speed auto / duplex auto
强制速率双工 speed 1000 + duplex full speed 1000 + duplex full
开 Jumbo(盒式) jumboframe enable 9000 mtu 9000
看帧长相关 回显中 Runts / Giants / CRC runts / giants / CRC

七、思考题 & 评论区聊聊

思考题(答案我会在评论区置顶公布):

一台终端接入口,接口灯亮、能拿到 IP、能上网,但拷贝文件很慢,display interface 看到 Late Collisions 和 CRC 都在增长、Duplex 是 HALF。请判断:最可能的根因是什么?你会按什么顺序排查,验证哪些参数恢复正常才算修好?

💬 互动话题(欢迎评论区交作业):

你遇到过最“玄学”的错帧、协商问题是什么?是装修队压的水晶头、一端 auto 一端 force 导致的半双工、还是某台老设备没开 Jumbo 拖垮整条链路?说说你的“现象—排查—最终真相”,让新人少走点弯路。


系列导航:

  • 上一课:第 22 课《MAC 表与帧转发——交换机的“小本本”怎么记》
  • 下一课:第 24 课《VLAN 入门——把一张大网切成几段》
  • 专栏主页:[网络工程师进阶:企业组网实战——从交换机配置到园区网交付]

我是你们的老网工。这一课我们把一帧拆开,看清了目的 MAC、源 MAC、类型、数据和 FCS,也学会了用错帧计数给物理层“体检”。到这里,交换机怎么学 MAC、帧长什么样,你都明白了。下一课开始解决一个更现实的问题——几百台设备挤在一个广播域里吵翻天怎么办?VLAN 登场,咱们把一张大网切成互不相干的几段。 我们下一课见。

赞(0)
未经允许不得转载:171主机测评 » 组网第23课:以太网帧与 MAC 地址——一帧到底长什么样,错帧从哪来
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址