2. 以太网基础:OSI模型、MAC与PHY的分工、以太网帧结构、速率与双工模式
以太网从最初的10Mbps共享总线技术,发展到今天400Gbps甚至更高速率的全双工交换网络,其底层逻辑始终围绕着两个核心芯片展开:MAC(媒体访问控制层)与PHY(物理层)。作为硬件工程师,在设计以太网接口电路时,如果对这两者的边界认识模糊,极易在调试阶段陷入“信号不通”或“速率协商失败”的泥潭。本章将从OSI模型切入,厘清MAC与PHY的职责边界,深入解析帧结构的每一个字节,并系统梳理速率与双工模式的协商机制,为后续的芯片选型和原理图设计打下坚实的理论基础。
上图展示了以太网通信中OSI模型与MAC/PHY芯片的对应关系。在实际硬件设计中,MAC通常集成在CPU、FPGA或交换芯片内部,而PHY则作为独立芯片或模组存在。两者之间通过标准接口(MII/RMII/RGMII/SGMII)连接,PHY再通过MDI(介质相关接口)连接至隔离变压器和RJ45座。理解这条链路是进行原理图设计的第一步。
2.1 OSI模型与以太网分层映射
核心原理:七层模型中的以太网位置
OSI(开放系统互连)参考模型将网络通信划分为七个层次,每一层只与相邻层通信,通过标准接口提供服务。以太网协议族主要涉及最底部的两层:物理层(Layer 1)和数据链路层(Layer 2)。物理层负责将原始比特流转换为适合在传输介质上传输的电信号或光信号,并处理诸如电压电平、比特定时、编码方式等物理特性。数据链路层则负责将比特流组织成帧(Frame),实现错误检测、流量控制和介质访问控制。
在IEEE 802.3标准中,数据链路层被进一步细分为两个子层:LLC(逻辑链路控制)和MAC(媒体访问控制)。LLC负责与网络层交互,提供服务访问点(SAP);而MAC子层则负责帧的封装与解封装、物理地址寻址(MAC地址)、帧校验序列(FCS)的生成与验证,以及介质访问控制(如CSMA/CD协议)。PHY芯片则对应物理层的全部功能,包括PCS(物理编码子层)、PMA(物理介质附加子层)和PMD(物理介质相关子层)。
判断方法:如何快速定位芯片属于哪一层
在实际选型时,可以通过以下特征快速判断一颗芯片是MAC还是PHY:
- 接口类型:如果芯片提供MII/RMII/RGMII/SGMII等接口,它通常是MAC或交换芯片;如果芯片提供MDI接口(如RJ45侧的差分对),它通常是PHY。
- 时钟角色:PHY通常需要提供或接收参考时钟(如25MHz晶振),而MAC则根据接口标准提供或接收TX_CLK/RX_CLK。
- 寄存器访问:PHY芯片内部有标准的IEEE 802.3 Clause 22管理寄存器(地址0-31),通过MDIO接口访问;MAC则通过AXI/PCIe/本地总线等接口与CPU通信。
案例拆解:MCU内置MAC与外部PHY的典型组合
以STM32H743为例,其内部集成了10/100M以太网MAC,但物理层需要外接PHY芯片(如LAN8720A或DP83848)。设计时,MCU的MAC通过RMII接口与PHY连接,PHY再通过带变压器的RJ45座连接网线。这里的关键设计点包括:
- 时钟源:RMII接口要求50MHz参考时钟,可以由MCU提供,也可以由PHY提供(需配置时钟方向)。
- MDIO管理:MCU通过MDC/MDIO引脚读写PHY的寄存器,用于配置速度、双工模式、中断使能等。
- 复位与中断:PHY的复位引脚(NRST)应连接到MCU的GPIO,实现软复位;中断引脚(nINT)用于上报链路状态变化。
这种组合的优点是灵活性高,MCU可以选择不同厂商的PHY,但缺点是PCB布局需要额外考虑PHY的模拟电源滤波和时钟走线。
常见误区与总结
误区2:忽略PHY的模拟电源(AVDD)与数字电源(DVDD)隔离。PHY内部有PLL和模拟前端,如果AVDD纹波过大,会导致信号抖动增加,误码率上升。建议使用磁珠或π型滤波进行电源隔离。
2.2 以太网帧结构深度解析
核心原理:帧的组成与字节序
以太网帧是数据链路层的数据单元,其格式由IEEE 802.3标准定义。一个标准的以太网帧(不含前导码和SFD)由以下字段组成:目的MAC地址(DA,6字节)、源MAC地址(SA,6字节)、长度/类型字段(2字节)、负载(Payload,46-1500字节)、帧校验序列(FCS,4字节)。在帧之前还有8字节的前导码(7字节的10101010同步序列 + 1字节的帧起始定界符SFD,即10101011)。
需要注意的是,在100Mbps及以上的全双工以太网中,前导码和SFD由PHY硬件自动生成和剥离,MAC层并不处理这些字段。MAC层从DA字段开始接收数据。此外,IEEE 802.3ac标准扩展了帧格式,增加了4字节的VLAN Tag(位于SA之后),使最大帧长变为1522字节。对于支持Jumbo Frame的千兆以太网,负载可以扩展到9000字节甚至更大。
| 字段 | 长度(字节) | 功能说明 | 硬件处理位置 |
|---|---|---|---|
| 前导码(Preamble) | 7 | 同步时钟,10101010交替 | PHY生成/剥离 |
| 帧起始定界符(SFD) | 1 | 10101011,标识帧开始 | PHY生成/剥离 |
| 目的MAC地址(DA) | 6 | 接收方物理地址 | MAC检查/过滤 |
| 源MAC地址(SA) | 6 | 发送方物理地址 | MAC填充 |
| 长度/类型(L/T) | 2 | ≤1500表示长度,≥1536表示EtherType | MAC解析 |
| 负载(Payload) | 46-1500 | 上层协议数据(IP包等) | MAC透传 |
| 填充(Pad) | 0-46 | 保证最小帧长64字节 | MAC自动填充 |
| 帧校验序列(FCS) | 4 | CRC32校验,覆盖DA到Payload | MAC生成/验证 |
最小帧长64字节(从DA到FCS)是为了保证在共享式以太网中,发送站能在传输完帧之前检测到冲突(CSMA/CD机制)。在全双工交换网络中,虽然不存在冲突,但为了兼容性,仍然保留最小帧长限制。
判断方法:如何通过帧结构定位网络问题
当使用Wireshark抓包时,如果看到“TCP Previous segment not captured”或“ACKed unseen segment”等提示,往往与帧的乱序或丢失有关。此时应检查:
- FCS错误:如果抓包工具显示大量“Bad FCS”帧,说明物理层存在误码,可能是信号质量差、网线过长或PHY芯片的接收均衡配置不当。
- VLAN Tag异常:如果帧中出现了意外的VLAN Tag,可能是交换机配置了Trunk口,而终端设备未配置VLAN剥离。
- 帧长超限:如果帧长超过1518字节(无VLAN)或1522字节(有VLAN),且未启用Jumbo Frame,则可能是驱动bug或硬件FIFO溢出。
案例拆解:利用帧计数器定位PHY芯片故障
在某工业交换机项目中,工程师发现端口A的吞吐量只有预期的一半。通过读取PHY芯片(如Marvell 88E1512)的寄存器,发现Receive Error Counter(寄存器0x15)持续增长。进一步分析发现,该PHY在接收方向存在大量CRC错误。排查过程如下:
- 检查MDI差分线:使用示波器测量RX+和RX-之间的眼图,发现眼高不足200mV(标准要求≥400mV),判断为接收信号幅度衰减。
- 检查变压器:更换同型号变压器后,眼图恢复正常,确认是变压器匝比不良导致。
- 检查PCB走线:发现RX差分对在PCB上跨越了分割的地平面,导致阻抗不连续,增加了反射。
最终通过调整PCB布局,将差分对走线完整参考地平面,并优化了变压器的中心抽头端接电容(从0.1μF改为0.01μF),问题解决。这个案例说明,帧结构的FCS字段是物理层信号质量的“晴雨表”。
常见误区与总结
2.3 速率与双工模式:从10M到10G的演进
核心原理:速率标准与编码方式
以太网的速率演进伴随着编码技术的变革。10BASE-T使用曼彻斯特编码,带宽需求为10MHz;100BASE-TX使用4B/5B编码并经过MLT-3电平转换,实际信号频率为125MHz;1000BASE-T则使用PAM-5编码,在4对双绞线上同时传输,每对线速率250Mbps,总速率1Gbps。到了10GBASE-T,使用PAM-16编码和Tomlinson-Harashima预编码(THP),信号处理复杂度大幅提升,功耗也随之增加。
双工模式决定了数据在同一时刻的传输方向。半双工(Half-Duplex)模式下,设备不能同时发送和接收,需要依赖CSMA/CD机制避免冲突,这在现代交换网络中已基本淘汰。全双工(Full-Duplex)模式下,发送和接收使用独立的通道(或差分对),可以同时进行,消除了冲突域,提高了有效带宽。对于1000BASE-T,4对线全部用于发送和接收(通过回声消除技术分离),因此天然支持全双工。
判断方法:自动协商与优先级
自动协商(Auto-Negotiation)是PHY芯片的一项关键功能,它允许链路两端的设备交换各自的能力信息,选择双方都支持的最高速率和最佳双工模式。协商过程通过发送/接收快速链路脉冲(FLP)实现,FLP中包含了技术能力字段(如10BASE-T、100BASE-TX、100BASE-TX全双工等)。
协商优先级从高到低依次为:1000BASE-T全双工 → 1000BASE-T半双工 → 100BASE-TX全双工 → 100BASE-TX半双工 → 10BASE-T全双工 → 10BASE-T半双工。如果一端强制设置为100M全双工,而另一端为自动协商,则对端可能协商失败或降级到10M半双工,导致“速率不匹配”或“大量丢包”。
案例拆解:千兆网卡协商到百兆的排障
某服务器网卡(集成MAC + Intel I210 PHY)连接交换机后,链路速率始终为100Mbps,而非预期的1Gbps。通过排查发现:
- 检查网线:使用Fluke测试仪验证,网线满足Cat5e标准,4对线均正常。
- 检查PHY寄存器:读取I210的PHY ID(寄存器2和3),确认PHY正常工作。读取自动协商广告寄存器(寄存器4),发现1000BASE-T的广告位(bit 9)未被置位。
- 检查驱动配置:在Linux下使用
ethtool eth0查看,发现Speed: 100Mb/s,Duplex: Full。进一步使用ethtool -s eth0 speed 1000 duplex full autoneg on强制设置,但协商仍然失败。 - 检查硬件Strap引脚:发现I210的PHY地址配置引脚(PHYAD[2:0])被错误地拉高,导致PHY地址冲突,驱动无法正确访问PHY的千兆能力寄存器。
修正PHYAD引脚的上下拉电阻后,链路成功协商到1Gbps全双工。这个案例提醒我们,PHY芯片的硬件配置引脚(如速率模式、PHY地址、时钟源选择)必须在原理图设计阶段仔细核对,否则软件层面很难排查。
常见误区与总结
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 忽略PHY的Strap引脚配置 | PHY工作模式错误,速率协商失败 | 仔细阅读数据手册,核对所有Strap引脚的上下拉 |
| 认为全双工不需要考虑冲突 | 在交换网络中确实如此,但半双工设备接入时仍可能冲突 | 确保所有设备支持全双工,或使用交换机隔离冲突域 |
| 忽视自动协商的优先级 | 两端能力不一致时,可能协商到较低速率 | 使用ethtool或PHY寄存器确认协商结果 |
| 将PHY的TX_CLK和RX_CLK接反 | MAC与PHY时钟不同步,数据采样错误 | 根据接口标准(MII/RMII/RGMII)正确连接时钟方向 |