半双工是一条线两头说话,必须 CSMA/CD;全双工是两条线各管一个方向,根本不会撞。 所以全双工不是「更快」,是「规则整套不需要了」。
上一节讲自适应交换,这一节讲另一个「自适应」——链路协商。 这一节是本章最实用的:现场九成的「网速不对劲」都出在双工不匹配。
一、两种双工的物理差别
半双工:一对线双向复用。 发的时候不能收,收的时候不能发,所以必须「先听、边发边听、撞了退避」。
全双工:一对发、一对收,物理上分开。收发可以同时进行,也不会撞,CSMA/CD 整套用不上。
注意这是 10BASE-T 与 100BASE-TX 的情况(两对线)。 千兆用四对线同时双向收发,更复杂——但结论一样:全双工不需要碰撞检测。
二、协商出来的,不是配出来的
双工是自动协商的一部分,和速率一起谈。发的是 FLP(快速链路脉冲),里面带着「我支持哪些组合」。
两边取交集的最高优先级:1000 全 > 100 全 > 100 半 > 10 全 > 10 半。
关键在于「强制」会关掉协商:一端写死速率与双工,就不发 FLP 了, 对端只能按默认值猜——猜成半双工。这就是双工不匹配的根源。
三、不匹配长什么样
一端全双工、一端半双工,症状非常有特征:
一、ping 大包丢、小包不丢。小包传得快,撞上的概率小。
二、速度只有正常的一半左右。半双工那端不停退避重发。
三、端口计数器上 FCS-Err 与 Late-Col 一起涨。
这一条是最直接的证据。
处理办法只有一条:两边都自动协商,或者两边都强制同一个值。最忌讳「一边自动一边强制」。
四、动手 Demo:六组协商组合,哪一组会出问题
这段列六组典型配置:两端都自动、一端强制、两端强制不同值。 看第 2 与第 4 行——它们都会掉进双工不匹配。
combos = [
(u"100 全双工", u"100 全双工", u"100 全双工", u"正常"),
(u"100 全双工", u"100 半双工", u"一端全一端半", u"出问题"),
(u"自动协商", u"自动协商", u"按双方最大值", u"正常"),
]
for a, b, c, d in combos:
T([a, b, c, d], [0, 0, 0, 0])
实跑输出:
--------------------------------------------------------------------
全双工是怎么来的,双工不匹配为什么会出怪事
--------------------------------------------------------------------
**半双工是一条线两头说话**,必须 CSMA/CD:先听、边说边听、撞了就退避重来。
**全双工是两条线各管一个方向**,收发互不干扰,CSMA/CD 整套用不上了。
**所以全双工不是「更快」,是「根本不会撞」。**同一个 100 Mbps 端口,
半双工的单向能力最多 100 Mbps、双向加起来也是 100 Mbps;全双工是双向各 100 Mbps,合计 200 Mbps。
**双工是协商出来的。**看几组典型结果:
本端 对端 结果 状态
---------------------------------------------------------------------
100 全双工 100 全双工 100 全双工 正常
100 全双工 100 半双工 一端全一端半 出问题
100 全双工 自动协商 100 全双工 正常
100 全双工 100 全双工(强制) 一端全一端半 出问题
自动协商 自动协商 按双方最大值 正常
10 半双工 100 自动 10 半双工 正常(慢)
**看第 4 行——这是最容易踩的坑。**两边都是 100 全双工,但有一边是「强制写死」的,
强制的那一端不发协商用的快速链路脉冲(FLP),对端只能按默认值猜,猜成半双工。
**结果另一端以为自己全双工,出问题了。**
**出问题是什么样子?**半双工那端发的时候,全双工那端也在发——半双工端检测到碰撞就退避重发,
而全双工端根本不检测、继续猛发。
在 100 Mbps 满载时,每秒钟会产生约 148,810 个 FCS 错误帧、外加大量 late collision 与 runts。
在 1000 Mbps 满载时,每秒钟会产生约 1,488,095 个 FCS 错误帧、外加大量 late collision 与 runts。
**典型症状很好认**:ping 大包丢、小包不丢;速度只有正常的一半左右;
交换机端口计数器上 `FCS-Err` 和 `Late-Col` 一起涨。
**处理办法只有一条:两边都设成自动协商,或者两边都强制同一个值。**最忌讳「一边自动一边强制」。
第 4 行是最容易踩的:两边都写「100 全双工」,但有一边是强制写死的。 强制那端不发 FLP,对端按默认猜成半双工——结果一端全一端半。
满载时的错误量很吓人:100 Mbps 满载每秒约 14.9 万个最小帧, 半双工那端每次发都撞,FCS 错误与迟到碰撞会成片出现。表里算的是「每秒会产生约 148,810 个 FCS 错误帧」这个量级。
最后一行「10 半双工对 100 自动」是正常的——只是慢。 这类「慢但不错」的情况最容易被忽略:用户只说「这里上网慢」,不看协商结果永远查不出来。
30 秒实验
- 在交换机上查每个端口的速率与双工。
- 找一台老设备的网卡设置,看它是「自动」还是「强制」。
- 查端口的 FCS 错误与迟到碰撞计数。
常见误区
- 一端自动一端强制。这是最常见也最难查的错。
- 以为全双工只是「快一倍」。它是「不会撞」。
- 以为千兆也有半双工。1000BASE-T 没有半双工模式。
自测三问(点开对答案)
1. 半双工为什么必须用 CSMA/CD? —— 一对线双向复用,同时收发就会碰撞。 2. 双工不匹配的典型症状是什么? —— 大包丢小包不丢、速度约一半、FCS 错误与迟到碰撞计数上涨。 3. 正确做法是什么? —— 两端都自动协商,或者两端都强制同一个速率与双工。下一节:端口会说谎,但数字不会——怎么用两个数看穿一台交换机的真实能力。
- ☐ (本节完,下一节 02.05 如何描述交换机的处理能力)