跳转到正文

插上网线那一刻,网卡内部发生了什么? ​

阶段 1 · 物理层 · 第 6 课

你把一根六类双绞线一头插进电脑 A,另一头插进交换机。大约一秒钟后,网口旁边的绿色指示灯常亮,黄色指示灯开始偶尔闪烁。可有时你在系统里明明看到网卡写着 UP,电脑却依然断网,旁边还多了一个 NO-CARRIER 提示。

在第 1 课中,我们初步认识了网卡里的 MAC 和 PHY 两个角色。插上网线的那一秒钟,PHY 和对端交换机聊了什么?系统的“启用状态”和网线的“物理连通状态”又有什么区别?

学完本课后,你将能够:

  1. 画出并说出网卡内部从主机 PCIe 总线、MAC 控制器、PHY 收发器到外部接口的分工边界。
  2. 解释半双工与全双工的区别,以及以太网自动协商如何选定双方的速率和双工模式。
  3. 定位真实 Linux 输出中的管理状态(UP/DOWN)与物理链路状态(LOWER_UP / NO-CARRIER),完成本阶段物理层实验。

网卡内部结构:主机内存经 PCIe 连接 MAC 控制器,再经 MII 接口连接 PHY 收发器,最后通过 RJ45 或光模块连接外部介质。

1. 先看图:网卡里的 MAC 和 PHY 怎样交接棒? ​

一块以太网网卡(NIC)并不是铁板一块,它正好跨在数据链路层和物理层的交界线上。沿着上图从左往右看:

  1. 主机接口(PCIe):配合第 2 课讲过的 直接内存访问(DMA) 引擎,把待发送的以太网帧从主机内存(RAM)搬进网卡缓存。
  2. MAC 控制器(数据链路层功能):它只认得“帧”和“字节”。发送时,它给数据加上前导码、帧起始定界符,并在末尾算出帧校验序列(FCS);接收时,它检查帧是否完整、CRC 校验是否正确。
  3. MII / GMII / XGMII(介质无关接口):连接 MAC 与 PHY 的内部标准数字通道。为什么叫“介质无关”?因为有了这道标准接口,同一个 MAC 控制器右边既可以接铜缆电口 PHY,也可以接光纤模块,完全不用修改 MAC 逻辑。
  4. PHY 收发器(物理层功能):它不管帧里面写的是什么地址,只专心做三件事——执行第 4 课的线路编码与调制、在接收时从波形中恢复时钟和比特、以及与对端网口进行链路脉冲检测与自动协商。
  5. 网络变压器与物理接口(RJ45 / SFP):电口网线前通常会有一颗网络隔离变压器,用来耦合差分信号并阻挡外部浪涌高压,保护主板芯片。

2. 双工模式与自动协商:两端怎样达成默契? ​

一根网线插在千兆网卡和交换机之间,它们怎么知道对方支持 1000 Mb/s 还是 100 Mb/s?能不能两边同时说话?这就涉及双工模式和自动协商。

半双工(Half Duplex) vs 全双工(Full Duplex) ​

双工模式通信方式与日常类比适用场景与冲突特征
半双工(Half Duplex)像对讲机或单车道独木桥:同一时刻只能一方发、另一方收;若双方同时发就会发生碰撞(Collision)早期集线器(Hub)共享型以太网,或开放空间的 Wi-Fi 无线信道
全双工(Full Duplex)像打电话或双向双车道:收发使用独立的线对/光纤通道(或回波抵消技术),双方可以同时发送和接收现代交换机点对点铜缆/光纤链路的标准工作模式,彻底消除了双绞线上的碰撞

自动协商(Auto-Negotiation)是怎么工作的? ​

当你把网线插好的瞬间,哪怕操作系统还没发送任何数据包,两端的 PHY 芯片就已经开始用**快速链路脉冲(FLP,Fast Link Pulse)**互报家门了:

主机网卡与交换机端口通过快速链路脉冲交换各自支持的速率与双工能力,自动选定双方共同支持的最高性能档位。

  1. 互报能力清单:主机 eth0 的 PHY 发出脉冲串说:“我支持 1000M 全双工、100M 全/半双工、10M 全/半双工。”对端交换机端口也发回它所支持的清单。
  2. 按优先级取最大交集:双方比对清单,自动挑出双方都支持的最高性能档位(优先级从高到低依次为:1000M 全双工 > 1000M 半双工 > 100M 全双工 > 100M 半双工 > 10M 全双工 > 10M 半双工)。
  3. 点亮物理链路:握手并完成时钟锁定后,PHY 向操作系统报告“物理载波已就绪(Link Up / LOWER_UP)”,网口绿灯常亮!

工程避坑(双工不匹配): 如果一端人为强制关闭自协商并设为 100M 全双工,而另一端保持默认的“自动协商”,自协商端虽然能测出 100M 速率,但因为收不到对端的双工脉冲通告,会按标准安全退化为 100M 半双工!结果一端全双工、一端半双工,导致大量帧冲突与 CRC 错包,网速慢如蜗牛。因此:要么两端都开自动协商,要么两端手动指定完全相同的速率和全双工。

课后巩固 · 练习 · 单选

在 Linux 主机上执行 ip -br link 查看网卡 eth0,输出包含 <NO-CARRIER,BROADCAST,MULTICAST,UP>。这表示什么现象?

3. 实验 · 观察网卡管理状态、物理链路与协商速率 ​

在网络排障中,第一步永远是确认物理层是否连通。下面我们通过 Linux 标准网络工具 ip 和网卡工具 ethtool,观察真实主机的网卡状态。

  • 实验目的:区分网卡的管理状态(Administrative State)与物理链路状态(Physical Link State),读懂协商速率和双工模式。
  • 拓扑与环境:Ubuntu 24.04 LTS(Linux Kernel 6.8,iproute2-6.8.0,ethtool 6.7)。主机有两张千兆电口网卡:enp3s0(已插网线连入千兆交换机)和 enp4s0(已启用但未插网线)。本实验为只读观察,不修改系统配置。
  • 预期观察:插好网线的 enp3s0 同时具备 UP 和 LOWER_UP,速率为 1000Mb/s Full;未插网线的 enp4s0 虽然管理状态是 UP,但显示 NO-CARRIER。

ip -br link(-br 表示 brief 简洁模式)是排查物理层最顺手的命令。它会按列输出“接口名、汇总状态、MAC 地址、标志集合”:

text
$ ip -br link
lo               UNKNOWN        00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP>
enp3s0           UP             52:54:00:1a:2b:3c <BROADCAST,MULTICAST,UP,LOWER_UP>
enp4s0           DOWN           52:54:00:1a:2b:3d <NO-CARRIER,BROADCAST,MULTICAST,UP>

(注:上方为实验环境示例输出,MAC 地址已使用虚拟化保留前缀脱敏。)

请对照输出看尖括号 <...> 里的两个关键标志:

观察点与标志代表哪一层含义解释在 enp3s0 中在 enp4s0 中
<...,UP,...>操作系统(管理状态)管理员已在软件层面开启该网卡(相当于总开关已合上)有 UP(已启用)有 UP(已启用)
LOWER_UP vs NO-CARRIER物理层 PHY(链路状态)PHY 芯片是否检测到对端有效载波信号并完成同步LOWER_UP(物理连通)NO-CARRIER(无物理信号)
第 2 列汇总状态综合可用状态只有管理状态和物理层同时就绪,汇总列才显示 UPUPDOWN(因物理未通)

步骤 2:用 ethtool 检查物理速率、双工与自协商细节 ​

当 enp3s0 处于 LOWER_UP 时,它到底协商成了千兆还是百兆?网线有没有因为破损退化成百兆?我们用 ethtool enp3s0 直接读取网卡 PHY 寄存器状态:

text
$ ethtool enp3s0
Settings for enp3s0:
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseTX/Half 100baseTX/Full
                                1000baseT/Full
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseTX/Half 100baseTX/Full
                                1000baseT/Full
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        Auto-negotiation: on
        Link detected: yes

输出解读结论:

  1. Supported 与 Advertised link modes:本机网卡硬件支持且向外通告了 10M、100M 和 1000baseT/Full 能力。
  2. Auto-negotiation: on:自动协商已开启。
  3. Speed: 1000Mb/s、Duplex: Full、Link detected: yes:物理层已成功与对端交换机握手,稳定运行在千兆全双工双绞线模式。如果你明明插在千兆交换机上,这里却显示 Speed: 100Mb/s,通常说明网线 8 芯里有线芯接触不良(百兆只需用 4 芯,而千兆必须 8 芯全通)!

课后巩固 · 练习 · 单选

主机网卡支持 10M/100M/1000M 全双工,连接的百兆交换机端口支持 10M/100M 全双工,两端均开启自动协商(Auto-Negotiation)。链路建立后工作在什么模式?

4. 小结与下一步 ​

  • 网卡内部边界:MAC 负责帧格式与校验(数据链路层),PHY 负责信号编码、时钟恢复与链路协商(物理层)。
  • 双工与自协商:现代交换以太网工作在无冲突的全双工模式;两端通过自动协商自动选择双方共同支持的最高速率与双工档位。
  • 状态排查:UP 表示系统启用了网卡,LOWER_UP 表示物理层信号已连通,NO-CARRIER 则提示优先检查网线、光模块或对端端口。

在刚才的 ethtool 输出里,我们看到了 Speed: 1000Mb/s。为什么连上 1000Mb/s 的千兆网卡后,你下载文件时软件显示的最高速度却只有 110 MB/s 左右?而玩网络游戏时,大家更关心的“延迟 20 ms”又是由哪些时间组成的?下一课我们用公式和交互实验算清物理层的最后一关——速率、吞吐量与四类时延。