MAC 和 PHY:网线插进去以后,芯片里到底发生了什么?
MAC 和 PHY:网线插进去以后,芯片里到底发生了什么?
网线插进去以后,真正工作的不是一个抽象的“网络口”,而是 MAC 和 PHY 这两层芯片协作:一个负责帧和规则,一个负责电信号和物理世界。

很多人说网络硬件时,会把“网卡”当成一个整体。
网线插进网口,灯亮了,系统里出现 eth0,网络就通了。
但如果把网卡拆开看,会发现它不是一个简单的插口。它至少要解决两类完全不同的问题:
第一,物理世界的问题。电信号、光信号、编码、时钟恢复、自动协商、链路训练。
第二,数据链路层的问题。以太网帧、MAC 地址、CRC、收发控制、和主机侧总线交互。
这两类工作通常由两个角色分担:
PHY 负责听懂线上的信号。MAC 负责组织以太网帧。
这篇就讲清楚:网线插进去以后,MAC 和 PHY 到底在芯片里做了什么。
PHY:把物理信号翻译成比特
PHY 是 Physical Layer 的缩写,也就是物理层。
它面对的是最原始的世界:网线里的电信号,光模块里的光信号,噪声、衰减、串扰、时钟漂移、双工协商、速率协商。
如果你用双绞线,PHY 要处理线缆上的模拟信号。
如果你用光纤,PHY 或相关 SerDes 模块要处理高速串行信号。
PHY 要做的事情不是“收包”,而是把不稳定的物理世界变成稳定的数字世界。它要处理信号编码和解码、时钟恢复、链路自动协商、速率与双工模式确定、错误检测,最后把线上连续变化的物理信号恢复成 MAC 能理解的数字比特流。
所以 PHY 的关键词不是“包”,而是“信号”。
它不关心 HTTP,也不关心 TCP。它甚至不关心这个包是不是访问网页。它只负责把物理介质上的东西稳定地变成可处理的比特。

MAC:把比特组织成以太网帧
MAC 是 Media Access Control,也就是介质访问控制层。
到了 MAC 这里,世界已经从模拟信号变成了数字结构。
MAC 关心的是以太网帧的结构。它要识别目的 MAC 地址、源 MAC 地址、类型字段、载荷和 FCS/CRC,判断这一串比特是不是一帧合法的以太网数据,以及这帧是不是应该交给主机继续处理。
它要判断帧从哪里开始,到哪里结束。它要检查 CRC。它要决定这个帧是不是应该交给主机。它还要在发包时把主机给的数据组织成合法的以太网帧,再交给 PHY 发送到线上。
如果说 PHY 是翻译耳朵,MAC 就是帧处理车间。
PHY 听懂线上信号。
MAC 判断这些比特怎么组成一帧。
这就是为什么你看交换机、网卡、SoC、MCU 资料时,经常会看到 MAC 和 PHY 分开出现。
有些芯片内置 MAC,但需要外接 PHY。
有些网卡芯片把 MAC 和 PHY 集成在一起。
嵌入式设备里常见 RMII、RGMII、SGMII 这些接口,就是 MAC 和 PHY 之间的连接方式。
MII、RMII、RGMII、SGMII:MAC 和 PHY 怎么聊天
MAC 和 PHY 不是凭空连在一起的。它们之间也需要接口。
早期和嵌入式场景里常见 MII、RMII、GMII、RGMII。更高速或串行化场景里会看到 SGMII、XFI、SerDes 相关接口。
这些接口的核心作用是:
让 MAC 和 PHY 交换数据、时钟和控制信息。
比如 RMII 常用于百兆以太网,节省引脚。RGMII 常用于千兆以太网,用较少引脚在时钟边沿传数据。SGMII 则用串行方式连接 MAC 和 PHY,适合更紧凑或更高速的设计。
对普通软件工程师来说,不需要背每个接口的电气细节。
但要理解一个系统事实:
网卡不是只有“一个网口”,而是一条从物理介质到数字帧、再到主机内存的链路。
链路里任何一段出问题,都可能表现成“网不通”。
网线质量差,PHY 可能协商到低速。
时钟或接口配置错,MAC 和 PHY 之间可能无法正常收发。
驱动没有正确配置 PHY,Linux 可能看得到网卡设备,却链路不起来。
交换机端口协商异常,可能出现速率、双工或丢包问题。
为什么 1G、10G、25G、100G 不只是更快
从 1G 到 10G,再到 25G、100G、400G,很多人直觉上以为只是频率更高。
实际上,速率提高会把整个链路都推向更复杂的工程。
速率越高,信号完整性越难,编码和纠错越重要,SerDes 也越复杂。光模块、DAC、AOC、背板、连接器都会影响链路质量,网卡内部队列、DMA、PCIe 带宽、CPU 多核分摊也要一起跟上。
所以高速网卡不是“普通网卡加快一点”。它是 PHY、MAC、PCS、PMA、SerDes、队列、驱动、协议栈一起升级。
这也是 AI 集群网络为什么会变成一门显学。GPU 之间要交换海量数据,网络不只是插线,而是从物理层到协议栈都必须精细设计。
软件工程师为什么要懂 MAC/PHY
很多后端工程师会觉得 MAC/PHY 离自己很远。
写业务代码不需要知道 RGMII 的电气细节,但在真实系统里,懂这一层会让你少很多误判。
比如你看到网卡 link up,但速率只有 100M,可能不是应用慢,而是 PHY 协商异常。
比如交换机端口 CRC 错误增加,可能不是 TCP 问题,而是线缆、光模块或物理层问题。
比如嵌入式 Linux 网口不通,可能不是 IP 配错,而是设备树里的 PHY 地址、接口模式、时钟配置错了。
比如服务器多网卡绑定异常,也可能和 MAC 地址、驱动、交换机链路聚合配置相关。
懂 MAC/PHY,不是为了让你去画网卡电路。
而是让你知道:
网络故障有时不是协议错,而是信号还没被正确翻译成帧。

最后的结论
网线插进去以后,真正发生的是一条分层处理链:PHY 把物理信号恢复成比特,MAC 把比特组织成以太网帧,网卡控制器把帧放进队列并通过 DMA 写入内存,Linux 驱动和协议栈再继续处理。
所以,网络不是从 IP 地址开始的。在 IP 之前还有以太网,在以太网之前还有 MAC,在 MAC 之前还有 PHY。越往下,越接近物理世界,也越容易被普通软件排障忽略。
这就是这篇最重要的一句话:
网卡不是一个插口,而是一条从物理世界到操作系统的翻译流水线。
注:转载文章来源于网络,版权归原作者或企业所有,侵删!