🌐 第五章 以太网与无线局域网
📄 一句话概括

前几节反复出现"全双工"三个字(5.8 说它让 CSMA/CD 退休、5.9 说每口一个冲突域、5.10 说流控要发 PAUSE 帧),本节把这个词正面讲清:双工(duplex)=这条链路允许"同时有两个方向在跑"吗。半双工=同一时刻只能一个方向(对讲机,说完按下按钮才能听);全双工=两个方向能同时进行(打电话,边听边说)。它能成立不是因为设备更聪明,而是因为线上真的铺了两条各自独立的路——收发各用一对线,所以互不打扰。于是:冲突在物理上不可能发生 → CSMA/CD 关掉 → 带宽从"共享"变成"各算各的"(100 Mbps 全双工 = 收 100 + 发 100)。本节最实用的一块是双工不匹配:一端全双工、一端半双工,是网络里最经典的"莫名其妙很卡"。

📝 本节和前面几节的关系

5.8 给过一张"全双工 vs 半双工"的对照表,本节把它拆开讲全;5.9、5.10 里那几句"因为全双工所以……"的结论,本节给出机制来源。

  • 5.8 控制发送数据的时间(CSMA/CD):讲了"全双工下 CSMA/CD 自动关闭"与"双工不匹配是经典故障"——本节回答为什么能关、为什么会错开
  • 5.5 常用的网络接口和线缆是什么(RJ-45接口与UTP线缆):那句"1-2 发、3-6 收,千兆八根全用"就是本节全双工的物理底座
  • 5.9 创建以太网网络(二层交换机):"每口一个独立冲突域"——本节讲清交换机口为什么默认就是全双工
  • 5.10 二层交换机的操作(二层交换机的数据传输):半双工靠背压、全双工靠 PAUSE 帧——两套流控的分界线正是本节这条线
  • 5.6 数据的格式(以太网的数据帧格式):最小帧 64 与填充是 CSMA/CD 时代的产物,本节说明为什么全双工了还留着它们
  • 5.7 如何连接(网络拓扑):总线/集线器是"介质共用"的天然半双工,星型+交换机才让全双工成为可能
  • 5.1 在同一网络中传输数据(以太网、无线局域网(Wi-Fi)):Wi-Fi 是天生半双工——本节把这条对照说明白
  • 2.3 网络的具体结构(接口(端口)、链路):一条链路的两端是两个接口,双工属性是这条链路的属性,不是设备的属性

一、双工就是把"谁能说话、什么时候说"定清楚

双工(duplex)= 一条链路允许的通信方向加上"能不能同时"。

模式 白话 类比 同一时刻线上跑什么
单工 simplex 只能一个方向,对方永远是听众 广播电台、电视 只有 A → B,B 从来没发过
半双工 half duplex 两个方向都能走,但得轮流 对讲机、对讲门铃 要么 A → B,要么 B → A,不能同时
全双工 full duplex 两个方向同时都能跑 打电话 A → B 与 B → A 同时进行

注意:单工在实际网络里几乎见不到(网卡只发不收就没法工作),以太网世界里真正要分的是半双工与全双工。

半双工有什么代价?三样,全都在 5.8 见过:

全双工要解决的问题就是这三样。 而它的解法出奇地简单——不是让谁变聪明,而是多给一条路。

二、全双工为什么能成立:物理上给了两条通道

这是本节最该记住的一句:全双工是"线路给出来的",不是"协议想出来的"。

双绞线里有 4 对线(8 根),5.5 就讲过它们并不是全都要用:

速率 用几对 收发怎么分
10M / 100M 2 对(4 根:1-2、3-6) 1-2 发送、3-6 接收——发送和接收各占一对线,物理上就是两条路
1G / 10G 4 对全用 每一对同时双向收发,靠电路把自己的发送与对方的发送分离开(回声抵消)

所以:

❗ 一句话判据

问"这条链路是全双工还是半双工",等价于问"发送与接收是不是各走各的路"。 各走各的 → 全双工,谁也撞不到谁;共用一条 → 半双工,才需要 CSMA/CD 那套礼貌规矩。

三、全双工带来了什么:冲突消失、CSMA/CD 关闭、帧格式不变

三件事,一件比一件容易搞混。

第一件:冲突域在物理上消失。

半双工下,"能彼此撞到的范围"叫冲突域(5.8):总线、集线器下面所有口共用一个。而全双工点对点链路上根本没有第三方,也不存在"双方同时说"的冲突——所以:

第二件:CSMA/CD 自动关闭。

既然撞不到,那"先听后说、边说边听、撞了退避"就是纯粹浪费——于是协商出全双工之后,网卡与交换机都会自动停用 CSMA/CD(5.8)。这也是为什么今天你几乎见不到冲突计数上涨。

⚠️ 但注意:这不代表半双工消失了

自动协商里那个"半双工"选项至今还在(10/100M 老设备、部分工业设备、某些链路仍需),网卡高级属性里"速度和双工"的候选值里能看见它们。只要有一端是半双工,CSMA/CD 就在那一端继续工作。

第三件:帧格式一个字节都没改。

这是最容易被想歪的地方。全双工没有新帧格式、没有新字段,它只是把"线上的物理规矩"换了。所以:

那最小帧 64 与填充,今天还有什么用? 两个作用:

  1. 兼容:同一条链路上到底跑全双工还是半双工,是协商之后才知道的;帧格式必须两种模式下都成立,所以下限只能照着更严格的那套(半双工)定;
  2. 界线:接收方靠"小于 64 字节即残片"这把尺子,把冲突残片(runt)与正常帧分开——这个功能今天仍在用(Wireshark 里抓到的小帧就是它)。

四、带宽怎么算:为什么说"全双工 100 M 等于 200 M"

这是"全双工"最实际的一条后果,也是日常报价单上最容易搞混的地方。

口径 半双工 100 Mbps 全双工 100 Mbps
物理线路上每秒最多跑多少比特 100 Mb(两个方向加起来) 每个方向各 100 Mb(一上一下同时跑)
一对"发送+接收"合计最大吞吐 100 Mbps 200 Mbps
接口标称写什么 100 Mbps 还是写 100 Mbps
需要当心的表述 —— "标称 100M 的口不是能跑 100M 单向" —— 单向仍然是 100M

三条要分清:

五、双工是谁定的:自动协商(Auto-Negotiation)

既然有两种模式,那两端怎么知道该用哪种?自动协商(Auto-Negotiation),随 IEEE 802.3u(1995 年,与 100BASE-TX 一起)引入,1000BASE-T 起变成强制要求(5.3)。

大致过程:

  1. 打招呼:链路上没有人说话时,两端都周期性发出快速链路脉冲 FLP(Fast Link Pulse)——一串"脉冲+脉冲间隙"组成的16 位能力字,里面明确写着"我支持 10/100/1000M、我支持半双工/全双工";
  2. 对答案:双方各自把对方的字读出来,取共同支持里的最高档;
  3. 定下来:档位(速率 + 双工)一旦商定,两端按这个模式开始工作;双工是全双工就会自动停用 CSMA/CD。

所以"插上就通、还会自己挑最快的"这件事,就是这套脉冲谈出来的。

📝 两个细节
  • 老设备只会发 NLP(普通链路脉冲),即只有"我还活着"的心跳,没有能力字。这时新设备靠 并行检测(Parallel Detection) 旁听对方的信号频率猜出速率——猜得出速率,猜不出双工,只能默认按半双工处理。
  • 速率的档位是一档一档试的:千兆不通就降到百兆、百兆不通降到十兆。所以"网线有一对线没接好,协商不到千兆、自动掉到百兆"正是 5.5 讲过的现场。

六、自动协商的盲区:为什么"一端写死"必然出问题

这是本节最值钱的一条实操规矩。

关键事实:速率可以"听"出来,双工只能"谈"出来。

于是当一端设成 Auto、另一端手工写死时:

情形 结果
两端都 Auto 谈出共同支持的最高档(通常全双工千兆)✅
两端都手工写死成一样 按写死的跑 ✅
一端 Auto、一端写死全双工 Auto 那端猜不出双工 → 退回半双工 → ❌ 错开
一端 Auto、一端写死半双工 两端都半双工 → 能跑但只有半双工性能,且白白浪费 ⚠️
❗ 铁律

要么两头都是 Auto,要么两头都手工写死成完全一样的值。绝不要"一头 Auto、一头写死"。 很多人以为"我把网卡写死成全双工 1000M 肯定会更快"——恰恰相反,这是"网络变得莫名其妙很卡"最常见的成因。

七、双工不匹配的现场

为什么错开就会卡? 因为两端各自按自己的规矩办事,两种规矩在同一根线上互相打扰:

  1. 半双工那端永远抢不到线:它要先听、线忙就等;而全双工那端根本不管线忙不忙,想发就发。结果半双工端几乎每次侦听都听到"忙",一路退避,能发出去的帧寥寥无几;
  2. 一旦半双工端抢到机会开口,全双工端照样同时往下发 → 两个方向的信号撞在一起 → 半双工端会检测到冲突(它有 CD 能力),但这次撞车发生在远远超过 512 位时间窗口之后——所以统计里显示的不是普通冲突,而是 late collision(延迟冲突);
  3. 被撞坏的帧会带着错误走:全双工端的接收电路不检测冲突,它只会看到一堆 FCS 校验不过的帧(CRC 错误),而且它的冲突计数始终是 0——因为它根本不统计冲突。

于是两端的症状完全不同:

观察点 症状
半双工那一端 late collision 计数猛涨、CRC 错误上升、吞吐断崖式下跌(可能只剩几百 Kbps)
全双工那一端 冲突计数为 0,只有 CRC / FCS 错误持续增长
用户视角 "网很卡"、"时通时断"、"传大文件特别慢",但ping 小包有时还挺正常
交换机侧 show interfaces 里 duplex 一列两端不一致,late collision 与 CRC 计数在涨
💡 为什么"ping 正常但传文件巨慢"

小包需要的方向切换少、占用线路时间短,撞上的机会也小;大文件连续发送把链路占满,冲突概率被放大——于是"能连上、能 ping 通,一下载就崩"。这正是排查时最容易误判的点:能 ping 通不代表链路配置对。

处置顺序很简单:

  1. 先看是不是双工不匹配(网卡侧与交换机侧都看);
  2. 恢复成两端都 Auto(首选),或两端都写死成同一个值;
  3. 恢复后清一次错误计数再看——late collision 应该不再增长。

八、有线是"可选全双工",无线是"天然半双工"

这条对照必须记住,否则很容易被速率数字骗。

对比 有线以太网 Wi-Fi(802.11)
双工 可协商成全双工(点对点两条通道) 天生半双工:同一条信道同一时刻只能发或收
介质 每台设备一段独占的线 空气共用(同信道的所有人都在一个空间里)
冲突怎么办 全双工下没有冲突;半双工靠 CD(检测) 只能 CA(避免)——自己发射功率盖住远处微弱信号,"边说边听"物理上做不到(5.8)
标称速率怎么看 1000M 口 = 每方向 1000M 标称值是协商出来的理论上限,实际被"共用 + 半双工"双重打折

两个常见误解顺便清掉:

📝 真正的"无线全双工"在哪

"同一频率同时收发"(in-band full duplex)需要自干扰消除技术——把自己发出的强信号从接收信号里精确减掉,难度极高,目前只在研究与有限场景(如小型基站的点对点)中出现,不在 Wi-Fi 标准里。所以日常语境下,无线=半双工这个判断是安全的。

九、光纤侧的双工:两根芯与单纤双向

光纤的做法更直观:

💡 顺带把"双工"与"聚合"分清

5.10 讲过链路聚合——那是把多条链路捆起来当一条用(按"流"分散),和"双工"是两件完全不同的事。一条链路的双工属性解决"同一时刻能不能双向",聚合解决"一条不够用怎么办"。 也别指望聚合能让单条 TCP 连接变快(5.10 已说明原因)。

十、动手 Demo:把自己这条链路查个明白(Demo64)

不需要网管交换机,一台 Windows + 家里路由器就能做。

第 1 步:先看链路速率——注意它看不出双工

Get-NetAdapter | Format-Table Name, Status, LinkSpeed, MacAddress

LinkSpeed 显示 1 Gbps 时,你并不知道它是全双工还是半双工——这是很多人以为"看速率就知道双工"的第一个坑:

第 2 步:看双工设置到底是什么

Get-NetAdapterAdvancedProperty -Name "以太网" | Where-Object DisplayName -match "双工|Duplex|Speed|速度"

找到 "速度和双工"(Speed & Duplex) 这一项,看它的值是不是 Auto Negotiation。如果显示"1.0 Gbps 全双工"这类固定值,说明被手工写死过——按第六节的铁律,去交换机那边核对(或者改回 Auto)。

第 3 步:把"半双工这扇门还在"这件事看实

(Get-NetAdapterAdvancedProperty -Name "以太网" -DisplayName "速度和双工").ValidDisplayValues

列表里能看见 100 Mbps 半双工、10 Mbps 半双工——这就是 CSMA/CD 至今留着的入口(5.8)。

第 4 步:看错误计数——全双工链路下它应该是 0 附近

netstat -e

重点看 "错误"那一列(5.8 用过同一招)。全双工正常链路上这一列不该持续增长;如果它在涨,同时第 2 步发现有一端是写死的——症状对上了。

第 5 步:抓一张"同时收发"的现场图(本 Demo 最值钱的一步)

打开任务管理器 → 性能 → 以太网,然后制造双向流量:一边往网盘上传一个大文件,一边从本地 NAS/另一台机下载另一个大文件。你会看到 "发送"与"接收"两个数字同时非零、同时上下跳动——这就是全双工在跑。

⚠️ 一个能亲眼验证的操作(做完记得改回)

把第 2 步的"速度和双工"临时改成 100 Mbps 半双工(交换机会继续按全双工跑 → 人为造出一次双工不匹配),再重复第 5 步:你会看到双向同时跑的场景消失、传输速度掉到几百 Kbps 级别,netstat -e 的错误列开始涨。这就是第七节那张症状表的现场版。 实验完 必须改回 Auto Negotiation,否则你会给自己留一个"网络很卡"的谜题。

第 6 步(可选):与 Wi-Fi 对照一下

netsh wlan show interfaces

看 接收速率 / 传输速率 那两个数字,再想想第八节:它是共享介质上协商出的理论上限,而且天生半双工——所以"Wi-Fi 显示 1200 Mbps,为什么传文件没有 120 MB/s"是正常现象,不是路由器坏了。

第 7 步(可选,更有说服力):用 iperf3 做双向并发测试

在一台机器上 iperf3 -s 当服务端,另一台上 iperf3 -c <IP> --bidir——--bidir 会同时测两个方向。跑出来的两个方向的速率之和接近接口速率的 2 倍,就是全双工的直接证据。

老规矩:这些命令都是只读观察或可回退的,涉及改设置的那一步做完要还原。

十一、30 秒实验:双向同时跑是看得见的

做一件事:打开任务管理器 → 性能 → 以太网,什么都不干,让画面静置十几秒;然后开始下载一个大文件(或手机上同网络下个 App)。

盯两件事:

  1. "接收"那一列冲起来——这好理解;
  2. 关键:同时看"发送"那一列——它也会动。因为下载过程里你的电脑一直在发确认包(ACK)(收 3.18 的"对账")。

看到两条曲线同时有量,你就看见了全双工。 换成半双工,这两个方向的流量得排队轮流走——而今天你不会感觉到这个排队,正是因为它已经被线路解决掉了。

十二、常见误区

❓ 点开看看有没有踩过
  1. 以为"全双工"是一种协议或帧格式。 它是链路的物理通信方式,帧格式(5.6)一个字节都没改。
  2. 以为全双工能提高单向速度。 单向上限还是接口速率;翻倍的是"同时能跑的总量"(本节第四节)。
  3. 以为"100 Mbps 全双工"能跑 200 Mbps 的下行。 不能,下行仍是 100 Mbps。
  4. 以为"我把网卡写死成全双工,肯定更快"。 这是经典错误——一端 Auto 一端写死必然错开,结果是"很卡"(第六节)。
  5. 以为 Auto 一定能协商出正确的双工。 遇到只会发 NLP 的老设备,Auto 端只能默认半双工(第五节的并行检测)。
  6. 以为全双工了最小帧 64 和填充就没用了。 全都还在:帧格式要两种模式通用,而且"小于 64 = 残片"仍是判据(第三节)。
  7. 以为"能 ping 通"就说明链路配置没问题。 双工不匹配恰恰是"小包正常、大流量崩"(第七节)。
  8. 以为 Wi-Fi 也是全双工。 同信道同一时刻只能一个方向——天生半双工(第八节)。
  9. 以为双频路由器是全双工。 2.4G 与 5G 是两条独立链路,各自仍是半双工。
  10. 以为全双工口就不会丢帧。 照样会——那是出队列满了的尾丢弃(5.10),跟撞车无关。
  11. 以为链路聚合可以替代全双工、或者能让单条 TCP 连接变快。 两件不同的事(第九节、5.10)。
  12. 以为光纤必须是两根。 单纤双向(BiDi)靠不同波长在一根纤上双向跑(第九节)。
  13. 把"双工"和"双频"混着说。 一个说方向,一个说频段,完全是两回事。
  14. 以为半双工已经彻底消失。 老设备、部分工业与专网链路、某些无线链路仍在用;网卡属性里那两个"半双工"选项不是装饰。

十三、动手自测

❓ 点开自我检查(先自己答,再看答案)
  1. 单工、半双工、全双工三者的分界线分别是什么?
  2. 全双工能成立,靠的是协议设计还是物理线路?具体怎么实现的?
  3. 百兆与千兆双绞线在"怎么做到全双工"上有什么不同?
  4. 全双工为什么让 CSMA/CD 可以关掉?关了之后 CSMA/CD 就完全没用了么?
  5. 全双工都普及了,为什么最小帧 64 与填充还留着?
  6. "100 Mbps 全双工 = 200 Mbps"这句话该怎么说才准确?
  7. 自动协商靠什么互相通告能力?它能协商出哪两样东西?
  8. 为什么"速率能听出来、双工听不出来"?由此推出什么实操铁律?
  9. 双工不匹配时,为什么两端的症状不一样?各看到什么?
  10. 为什么双工不匹配的表现常常是"ping 正常、传文件极慢"?
  11. Wi-Fi 为什么天生是半双工?它靠什么避免冲突?
  12. 单纤双向(BiDi)凭什么能在同一根纤上双向跑?

答案: ① 看"同一时刻几个方向能跑":单工只能一个方向(且对方永远不发)、半双工两个方向但轮流、全双工同时。② 靠物理线路:双绞线收发各用一对(百兆),或四对全用、靠电路分离两方向信号(千兆);光纤是两根芯,或单纤双向用两个波长。③ 百兆是一对发一对收的独立通道;千兆是四对线全都双向,靠芯片把两个方向的信号分离开——所以 1000BASE-T 强制要求自动协商(5.3)。④ 因为全双工点对点链路上不可能有第三方同时说话,冲突物理上不存在,侦听与检测就是纯开销。但 CSMA/CD 没有"废掉":它留在半双工模式里继续用,网卡的"速度和双工"选项里那两个半双工档位就是它的入口(5.8)。⑤ 一是兼容——链路上到底全双工还是半双工是协商后才知的,帧格式要两种模式下都成立;二是当尺子——"小于 64 字节 = 残片"仍是接收方区分正常帧与垃圾帧的判据。⑥ 准确说法是:每个方向各 100 Mbps,两个方向可同时跑,合计 200 Mbps;单向最高速率没变,接口标称也仍写 100 Mbps。⑦ 靠 FLP 快速链路脉冲(一串脉冲构成 16 位能力字),协商速率与双工两样。⑧ 速率体现在信号的频率上,旁听就能判断;双工是配置意图,线上没有任何电波特征能表达,只能靠能力字互相通告。所以铁律是:两头都 Auto,或两头都写死成一样的值。⑨ 因为两端按不同规矩工作:半双工端听线、抢线、并检测冲突,于是它统计到 late collision + CRC;全双工端从不检测冲突,它的冲突计数永远是 0,只会看到 CRC/FCS 错误。⑩ 小包占用线路时间短、方向切换少,撞上的机会小;大文件把链路长时间占满,冲突概率被放大(第七节)。⑪ 因为空气是共享介质、同一信道同一时刻只能存在一个方向的信号;而且自己发射的功率会盖住远处微弱信号,"边说边听"物理上做不到,所以只能 CA(避免):先听、随机等待、靠确认判断(5.8)。⑫ 因为两个方向用不同波长的光——波长不同就像两条互不干扰的车道,同一根纤里可以同时跑两个方向。

十四、下一步学什么

相关笔记