介質(zhì)訪(fǎng)問(wèn)控制全解析:從ALOHA到CSMA的吞吐量與避坑指南)
簡(jiǎn)介這份教學(xué)課件聚焦計(jì)算機(jī)網(wǎng)絡(luò)原理中的局域網(wǎng)技術(shù)適合計(jì)算機(jī)相關(guān)專(zhuān)業(yè)學(xué)生及準(zhǔn)備網(wǎng)絡(luò)基礎(chǔ)考試的學(xué)習(xí)者。資源以單份PPT形式整理大小3.44MB內(nèi)容系統(tǒng)梳理了介質(zhì)訪(fǎng)問(wèn)控制MAC子層核心知識(shí)包括靜態(tài)與動(dòng)態(tài)信道分配策略、純ALOHA與時(shí)隙ALOHA協(xié)議、1-堅(jiān)持/非堅(jiān)持/p-堅(jiān)持CSMA以及令牌環(huán)、以太網(wǎng)等典型局域網(wǎng)技術(shù)并對(duì)吞吐量、沖突概率等關(guān)鍵概念做了圖示與公式輔助說(shuō)明。課件結(jié)構(gòu)層次分明從信道分配基礎(chǔ)到具體協(xié)議對(duì)比逐步展開(kāi)便于快速建立局域網(wǎng)技術(shù)整體框架。目前已有84人學(xué)習(xí)可用于課堂講解、考前復(fù)習(xí)或自學(xué)參考尤其適合需要掌握MAC協(xié)議原理與局域網(wǎng)組網(wǎng)基礎(chǔ)的學(xué)習(xí)者。1. 局域網(wǎng)技術(shù)課件拆解先弄懂介質(zhì)訪(fǎng)問(wèn)控制再看懂組網(wǎng)局域網(wǎng)這塊內(nèi)容在《計(jì)算機(jī)網(wǎng)絡(luò)原理》里被不少人當(dāng)成“背協(xié)議名”的章節(jié)實(shí)際上它真正的核心是一套數(shù)學(xué)模型——多個(gè)站點(diǎn)共享一條廣播信道時(shí)誰(shuí)先發(fā)、誰(shuí)后退、撞了怎么辦。這份課件把重點(diǎn)壓在介質(zhì)訪(fǎng)問(wèn)控制子層MAC從靜態(tài)分配講到 ALOHA 再到 CSMA每個(gè)協(xié)議都帶吞吐量公式和適用條件而不是簡(jiǎn)單羅列概念。適合正在準(zhǔn)備考研、期末考的學(xué)生也適合剛接手園區(qū)網(wǎng)維護(hù)、想補(bǔ)一補(bǔ)交換與共享介質(zhì)底層邏輯的工程師。后面我按課件順序把信道分配、ALOHA 的吞吐量邊界、CSMA 的三種堅(jiān)持策略逐層拆開(kāi)給出可復(fù)現(xiàn)的模擬腳本和參數(shù)經(jīng)驗(yàn)?zāi)憧赐昕梢灾苯佑谩?. 信道分配的兩種路線(xiàn)靜態(tài)策略為什么不適合突發(fā)流量2.1 靜態(tài)分配 FDM / TDM適用邊界非常窄課件里把靜態(tài)分配放在最前面方案就兩類(lèi)頻分多路復(fù)用FDM波分復(fù)用 WDM 是它在光通信里的變體和時(shí)分多路復(fù)用TDM。FDM 的原理是把可用頻帶切成若干子頻帶每個(gè)用戶(hù)獨(dú)占一段TDM 則是把時(shí)間軸切成固定長(zhǎng)度的時(shí)隙每個(gè)用戶(hù)在屬于自己的時(shí)隙里發(fā)送數(shù)據(jù)。靜態(tài)分配的優(yōu)點(diǎn)和缺點(diǎn)是同一個(gè)來(lái)源——資源劃分固定不變。它們適合用戶(hù)數(shù)量少、數(shù)目基本固定、每個(gè)用戶(hù)通信量都偏大的場(chǎng)景。典型例子是電話(huà)中繼一條物理鏈路上固定分給若干路電話(huà)每一路隨時(shí)有話(huà)可傳固定分配反而效率高。但換成局域網(wǎng)就暴露出問(wèn)題了站點(diǎn)數(shù)雖然固定每個(gè)站點(diǎn)的發(fā)送需求卻是突發(fā)的絕大部分時(shí)間鏈路是空閑的。把頻帶或時(shí)隙固定分給每個(gè)站點(diǎn)等于大量資源在空轉(zhuǎn)。我實(shí)際做網(wǎng)絡(luò)規(guī)劃時(shí)基本不會(huì)在局域網(wǎng)場(chǎng)景里考慮 FDM/TDM除非是點(diǎn)對(duì)點(diǎn)的專(zhuān)線(xiàn)租用。課件把「無(wú)法靈活適應(yīng)站點(diǎn)數(shù)及其通信量的變化」列為靜態(tài)分配的主要缺點(diǎn)這句話(huà)是整個(gè)第 8 章引出動(dòng)態(tài)分配的楔子。2.2 動(dòng)態(tài)分配的兩條路線(xiàn)隨機(jī)訪(fǎng)問(wèn)與控制訪(fǎng)問(wèn)動(dòng)態(tài)分配的邏輯很簡(jiǎn)單站點(diǎn)有數(shù)據(jù)要發(fā)送時(shí)才占用信道本質(zhì)上屬于異步時(shí)分復(fù)用。課件把它進(jìn)一步分成兩類(lèi)——隨機(jī)訪(fǎng)問(wèn)爭(zhēng)用和控制訪(fǎng)問(wèn)。隨機(jī)訪(fǎng)問(wèn)的做法是各個(gè)站點(diǎn)有數(shù)據(jù)就發(fā)送沖突后再協(xié)調(diào)重發(fā)。它的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單、延遲短在負(fù)載輕的網(wǎng)絡(luò)里表現(xiàn)很好——站點(diǎn)少、發(fā)送頻率低沖突概率非常低。缺點(diǎn)是信道利用率上不去負(fù)載一重就開(kāi)始頻繁沖突大量帶寬被浪費(fèi)在重傳上??刂圃L(fǎng)問(wèn)則反過(guò)來(lái)分為輪轉(zhuǎn)和預(yù)約兩類(lèi)。輪轉(zhuǎn)是每個(gè)節(jié)點(diǎn)輪流獲得信道使用權(quán)典型實(shí)現(xiàn)是令牌環(huán)預(yù)約是先聲明自己要發(fā)送獲得使用權(quán)之后才真正發(fā)數(shù)據(jù)。這兩種方式不會(huì)發(fā)生沖突負(fù)載重時(shí)信道利用率高但負(fù)載輕時(shí)反而低——節(jié)點(diǎn)要等令牌輪到自己或者等預(yù)約確認(rèn)這中間白白增加了延遲。我在實(shí)際工程里選型時(shí)會(huì)先看流量特征突發(fā)型流量?jī)?yōu)先考慮隨機(jī)訪(fǎng)問(wèn)持續(xù)型流量或者對(duì)實(shí)時(shí)性要求高的場(chǎng)景必須上控制訪(fǎng)問(wèn)。工業(yè)現(xiàn)場(chǎng)總線(xiàn)就是個(gè)典型例子幾乎所有實(shí)時(shí)控制網(wǎng)絡(luò)都用輪詢(xún)或令牌機(jī)制沒(méi)人敢用純爭(zhēng)用協(xié)議因?yàn)闆_突導(dǎo)致的延遲抖動(dòng)在現(xiàn)場(chǎng)是無(wú)法接受的。2.3 局域網(wǎng)數(shù)據(jù)鏈路層模型LLC 與 MAC 的分工課件在進(jìn)入 8.1 節(jié)之前先給了一張局域網(wǎng)數(shù)據(jù)鏈路層模型圖把數(shù)據(jù)鏈路層拆成兩個(gè)子層邏輯鏈路控制LLC和介質(zhì)訪(fǎng)問(wèn)控制MAC。LLC 向上層提供連接環(huán)境MAC 對(duì)下層提供訪(fǎng)問(wèn)介質(zhì)的方法。這個(gè)分層設(shè)計(jì)的核心目的是解耦。以太網(wǎng)、令牌環(huán)、無(wú)線(xiàn)局域網(wǎng)共享介質(zhì)的方式完全不同但上層網(wǎng)絡(luò)層協(xié)議不需要感知這些差異。LLC 負(fù)責(zé)把下層差異消化掉MAC 則專(zhuān)注于解決「多個(gè)站點(diǎn)怎么訪(fǎng)問(wèn)共享介質(zhì)」這一個(gè)核心問(wèn)題。理解這一點(diǎn)你就明白為什么網(wǎng)卡驅(qū)動(dòng)里既有 MAC 地址的封裝又有 LLC 層的邏輯鏈路處理。這層模型其實(shí)是整章的主線(xiàn)——后面講的所有協(xié)議都屬于 MAC 子層都是解決「多站點(diǎn)共享信道」這個(gè)問(wèn)題的不同方案。課件把它放在最前面當(dāng)鋪墊實(shí)際上它是理解 ALOHA 和 CSMA 共同背景的框架。3. ALOHA 協(xié)議吞吐量拆解兩次躍遷背后的數(shù)學(xué)邏輯3.1 純 ALOHA最早的爭(zhēng)用協(xié)議與易破壞區(qū)ALOHA 的起源課件里有交代20 世紀(jì) 70 年代美國(guó)夏威夷大學(xué)用它把分散在各個(gè)島嶼上的遠(yuǎn)程終端連接到本部主機(jī)。這是無(wú)線(xiàn)廣播信道上最早采用爭(zhēng)用協(xié)議的網(wǎng)絡(luò)思路也最樸素——每個(gè)站點(diǎn)只要有數(shù)據(jù)就發(fā)通過(guò)監(jiān)聽(tīng)信道發(fā)現(xiàn)沖突若沖突則等待一段隨機(jī)時(shí)間后重發(fā)。純 ALOHA 的吞吐量上限是 0.184這個(gè)數(shù)字需要理解它的來(lái)歷。課件給出公式 S G·e^(-2G)當(dāng) G 0.5 時(shí) S 取最大值 1/(2e) ≈ 0.184。這里 S 表示吞吐量即在幀的發(fā)送時(shí)間 T0 內(nèi)成功發(fā)送的平均幀數(shù)G 表示網(wǎng)絡(luò)負(fù)載即 T0 內(nèi)總共發(fā)送的平均幀數(shù)包含成功的幀和因沖突失敗的幀。關(guān)鍵就在幀的易破壞區(qū)。一個(gè)幀在信道上的脆弱時(shí)間窗是 2T0 而不是 T0——因?yàn)檫@個(gè)幀開(kāi)始發(fā)送之前的 T0 時(shí)間內(nèi)如果有其他站點(diǎn)開(kāi)始發(fā)送兩個(gè)幀就會(huì)重疊開(kāi)始發(fā)送之后的 T0 時(shí)間內(nèi)同樣不能有別人發(fā)。所以一個(gè)幀成功發(fā)送的概率是 e^(-2G)這就是公式里 2G 的由來(lái)。我第一次接觸這個(gè)結(jié)論時(shí)覺(jué)得有點(diǎn)反直覺(jué)明明一個(gè)幀只占 T0 的傳輸時(shí)間為什么脆弱窗口要算成兩倍后來(lái)想明白了——廣播信道沒(méi)有中心調(diào)度任何站點(diǎn)都可能在任何時(shí)刻發(fā)幀你的幀還沒(méi)發(fā)完別人的幀就可能疊上來(lái)。這也是為什么課件會(huì)在吞吐量曲線(xiàn)圖上標(biāo)注「不穩(wěn)定區(qū)域」。3.2 時(shí)隙 ALOHA把易破壞區(qū)縮短一半時(shí)隙 ALOHA 的改進(jìn)說(shuō)穿了就一點(diǎn)把信道時(shí)間切分為離散的時(shí)間片slot每個(gè)時(shí)間片長(zhǎng)度剛好能傳一個(gè)幀站點(diǎn)只能在時(shí)間片開(kāi)始的瞬間發(fā)送。代價(jià)是需要全局時(shí)鐘同步。這個(gè)改動(dòng)直接把易破壞區(qū)從 2T0 壓縮到 T0——因?yàn)樗姓军c(diǎn)都對(duì)齊到同一套時(shí)間片邊界幀與幀之間要么完整錯(cuò)開(kāi)要么在一個(gè)時(shí)間片內(nèi)完全沖突不會(huì)出現(xiàn)「從半路插入」的情況。公式從 S G·e^(-2G) 變成 S G·e^(-G)當(dāng) G 1 時(shí) S 取最大值 1/e ≈ 0.368正好是純 ALOHA 的兩倍。課件里那句「與純 ALOHA 相比信道的利用率提高一倍」指的就是這個(gè) 0.368 對(duì) 0.184 的關(guān)系。這個(gè)「時(shí)間片對(duì)齊」的思路對(duì)后續(xù)協(xié)議影響深遠(yuǎn)——以太網(wǎng)的沖突檢測(cè)、無(wú)線(xiàn)網(wǎng)絡(luò)里的時(shí)隙預(yù)約本質(zhì)都是對(duì)發(fā)送時(shí)機(jī)做某種限制來(lái)降低沖突概率。這里有一個(gè)值得注意的代價(jià)時(shí)隙 ALOHA 要求全局時(shí)鐘同步這在有中心節(jié)點(diǎn)的蜂窩網(wǎng)絡(luò)里容易做到但在完全自組織的臨時(shí)網(wǎng)絡(luò)中很難實(shí)現(xiàn)。同步本身就是成本課件沒(méi)有展開(kāi)講但實(shí)際選型時(shí)必須考慮。3.3 用 Python 復(fù)現(xiàn)吞吐量曲線(xiàn)公式看著簡(jiǎn)單不如自己跑一遍。這里給出一個(gè)模擬純 ALOHA 和時(shí)隙 ALOHA 吞吐量的腳本可以直接復(fù)現(xiàn)課件里的曲線(xiàn)import numpy as np def throughput_pure_aloha(G): 純 ALOHA 吞吐量S G * exp(-2G) return G * np.exp(-2 * G) def throughput_slotted_aloha(G): 時(shí)隙 ALOHA 吞吐量S G * exp(-G) return G * np.exp(-G) # 負(fù)載從 0.01 掃描到 5觀察吞吐量變化趨勢(shì) G_values np.linspace(0.01, 5, 200) pure_values throughput_pure_aloha(G_values) slotted_values throughput_slotted_aloha(G_values) # 輸出理論峰值點(diǎn) peak_pure throughput_pure_aloha(0.5) # 理論峰值對(duì)應(yīng) G0.5 peak_slotted throughput_slotted_aloha(1.0) # 理論峰值對(duì)應(yīng) G1.0 print(f純 ALOHA 峰值吞吐量: {peak_pure:.3f} (G0.5)) print(f時(shí)隙 ALOHA 峰值吞吐量: {peak_slotted:.3f} (G1.0))邏輯說(shuō)明腳本用 numpy 在負(fù)載區(qū)間內(nèi)均勻取 200 個(gè)點(diǎn)分別計(jì)算兩種協(xié)議在每個(gè)負(fù)載點(diǎn)的歸一化吞吐量然后輸出理論峰值對(duì)應(yīng)的 G 值。運(yùn)行結(jié)果應(yīng)顯示 0.184 和 0.368和課件曲線(xiàn)一致。參數(shù)說(shuō)明np.linspace(0.01, 5, 200)表示從負(fù)載 0.01 掃到 5取 200 個(gè)樣本點(diǎn)。掃描范圍之所以到 5是為了展示過(guò)載后吞吐量下滑的區(qū)間。實(shí)際設(shè)計(jì)網(wǎng)絡(luò)時(shí)我會(huì)把工作負(fù)載壓在峰值點(diǎn)左側(cè)——比如時(shí)隙 ALOHA 把 G 控制在 0.5 以?xún)?nèi)留出沖突重傳的余量。自己跑一遍比背公式更容易建立直覺(jué)G 從零增到峰值的過(guò)程中吞吐量上升越來(lái)越慢說(shuō)明新增的負(fù)載大部分被沖突消耗了越過(guò)峰值后吞吐量不升反降這就是負(fù)載過(guò)重系統(tǒng)崩潰的數(shù)學(xué)表現(xiàn)。4. CSMA 三種堅(jiān)持策略1-堅(jiān)持、非堅(jiān)持、p-堅(jiān)持的取舍4.1 1-堅(jiān)持 CSMA死等信道帶來(lái)的沖突放大ALOHA 最大的問(wèn)題是站點(diǎn)完全不管別人在不在發(fā)撞了才知道。CSMA 的核心改進(jìn)是「先聽(tīng)再說(shuō)」——發(fā)送前先監(jiān)聽(tīng)信道。1-堅(jiān)持策略的具體行為是站點(diǎn)在發(fā)送數(shù)據(jù)前先監(jiān)聽(tīng)信道若信道忙則堅(jiān)持監(jiān)聽(tīng)直至發(fā)現(xiàn)空閑一旦空閑立即以概率 1 發(fā)送數(shù)據(jù)發(fā)現(xiàn)沖突后隨機(jī)等待一段時(shí)間然后重新開(kāi)始監(jiān)聽(tīng)?!?-堅(jiān)持」這個(gè)名字里的 1 指信道空閑時(shí)發(fā)送的概率為 1不猶豫。好處是信道一釋放等待的站點(diǎn)能立刻搶占消息傳遞延遲低。壞處是多個(gè)同時(shí)等待的站點(diǎn)會(huì)同時(shí)聽(tīng)到信道空閑、同時(shí)發(fā)送沖突反而被放大。特別是在兩個(gè)站點(diǎn)都盯著信道等釋放的場(chǎng)景下釋放瞬間幾乎必然發(fā)生碰撞。課件點(diǎn)出影響性能的兩個(gè)因素信號(hào)傳播延遲和 1-堅(jiān)持的策略本身。傳播延遲大意味著站點(diǎn)聽(tīng)到「信道空閑」時(shí)遠(yuǎn)端站點(diǎn)可能已經(jīng)發(fā)送了產(chǎn)生隱蔽終端問(wèn)題。所以課件原話(huà)是「該協(xié)議適合于規(guī)模較小和負(fù)載較輕的網(wǎng)絡(luò)」這句話(huà)限定了它的適用場(chǎng)景。4.2 非堅(jiān)持 CSMA用延遲換信道利用率非堅(jiān)持 CSMA 的機(jī)制和 1-堅(jiān)持完全相反發(fā)送前先監(jiān)聽(tīng)信道若信道忙則放棄監(jiān)聽(tīng)等待一個(gè)隨機(jī)時(shí)間后再監(jiān)聽(tīng)若信道空閑則發(fā)送數(shù)據(jù)。這種「忙就退讓」的策略減少了沖突——不同站點(diǎn)退避的隨機(jī)時(shí)間不同不會(huì)扎堆去搶信道釋放瞬間。信道利用率高于 1-堅(jiān)持 CSMA這是課件的判斷。但代價(jià)是延遲特性變差一個(gè)站點(diǎn)可能退避計(jì)時(shí)還沒(méi)結(jié)束信道就已經(jīng)空閑了白白浪費(fèi)了可用的發(fā)送窗口。我在工程上把非堅(jiān)持理解成「悲觀主義」策略默認(rèn)信道很擠主動(dòng)讓路。它在站點(diǎn)數(shù)量多、負(fù)載偏重的共享信道里表現(xiàn)更好。但要注意一個(gè)問(wèn)題隨機(jī)退避時(shí)間的取值范圍如果設(shè)置不合理可能出現(xiàn)長(zhǎng)時(shí)間沒(méi)人發(fā)送的情況。課件沒(méi)有展開(kāi)退避時(shí)間的設(shè)置細(xì)節(jié)實(shí)際實(shí)現(xiàn)時(shí)這是很關(guān)鍵的一個(gè)參數(shù)。4.3 p-堅(jiān)持 CSMA折衷方案里的 p 值如何定p-堅(jiān)持 CSMA 適用于時(shí)分信道。它的行為是發(fā)送前監(jiān)聽(tīng)信道信道忙則等到下一個(gè)時(shí)間片再監(jiān)聽(tīng)信道空閑則以概率 p 發(fā)送數(shù)據(jù)以概率 1-p 將發(fā)送推遲到下一個(gè)時(shí)間片。下一個(gè)時(shí)間片執(zhí)行相同的操作直到發(fā)送成功或檢測(cè)到信道忙。這個(gè)策略是在 1-堅(jiān)持和非堅(jiān)持之間取折衷。p 偏大會(huì)像 1-堅(jiān)持延遲低但沖突概率高p 偏小會(huì)像非堅(jiān)持沖突少但延遲大。課件把話(huà)說(shuō)得很克制「影響協(xié)議性能的關(guān)鍵在于 p 的選擇」但沒(méi)有給出選 p 的指導(dǎo)。我一般用這樣的估算方法先估計(jì)同時(shí)活躍的站點(diǎn)數(shù) N把 p 設(shè)成 1/N 量級(jí)。這樣在一個(gè)時(shí)間片內(nèi)期望發(fā)送的站點(diǎn)數(shù)約為 N × p 1能平衡成功率和沖突率。舉個(gè)例子如果網(wǎng)絡(luò)里大約有 10 個(gè)活躍站點(diǎn)p 取 0.1 左右比較合理站點(diǎn)越少 p 可以越大站點(diǎn)越多 p 必須越小。拿到初始值后再做一輪實(shí)測(cè)微調(diào)觀察吞吐量和延遲曲線(xiàn)。三種策略的行為差異和適用場(chǎng)景放在一起對(duì)比更直觀策略信道忙時(shí)行為信道空閑時(shí)行為沖突概率延遲特性適用場(chǎng)景1-堅(jiān)持堅(jiān)持監(jiān)聽(tīng)直到空閑立即發(fā)送較高較低小規(guī)模、輕負(fù)載網(wǎng)絡(luò)非堅(jiān)持放棄監(jiān)聽(tīng)隨機(jī)退避后重試立即發(fā)送較低較高站點(diǎn)多、負(fù)載重的共享信道p-堅(jiān)持等下一個(gè)時(shí)間片再監(jiān)聽(tīng)以概率 p 發(fā)送取決于 p取決于 p時(shí)分信道需調(diào) p 參數(shù)需要強(qiáng)調(diào)一個(gè)容易混淆的點(diǎn)以太網(wǎng)實(shí)際用的是 CSMA/CD可以理解成 1-堅(jiān)持 CSMA 加碰撞檢測(cè)和二進(jìn)制指數(shù)退避的變體不適合直接用「哪一堅(jiān)持」來(lái)歸類(lèi)。它的「堅(jiān)持」是為了快速搶占信道而沖突解決靠的是「檢測(cè)到碰撞后立即停止發(fā)送 截?cái)喽M(jìn)制指數(shù)退避」。先把三種無(wú) CD 的 CSMA 策略搞清楚再去看以太網(wǎng)脈絡(luò)會(huì)清晰很多。4.4 用模擬腳本看清 p 值對(duì)沖突率的影響調(diào) p 值不能只靠公式我寫(xiě)了一個(gè)簡(jiǎn)單的 Python 模擬腳本。場(chǎng)景是 N 個(gè)活躍站點(diǎn)每個(gè)時(shí)間片開(kāi)始時(shí)各自獨(dú)立以概率 p 決定是否發(fā)送統(tǒng)計(jì)成功、沖突和空閑的時(shí)間片比例import random def simulate_p_persistent(active_stations, p, slots10000, seed42): 模擬 N 個(gè)站點(diǎn)的 p-堅(jiān)持訪(fǎng)問(wèn)統(tǒng)計(jì)成功/沖突/空閑時(shí)間片占比 random.seed(seed) success 0 collision 0 idle 0 for _ in range(slots): # 每個(gè)站點(diǎn)獨(dú)立決定是否發(fā)送統(tǒng)計(jì)發(fā)送者數(shù)量 senders sum(1 for _ in range(active_stations) if random.random() p) if senders 0: idle 1 # 無(wú)人發(fā)送時(shí)隙空閑 elif senders 1: success 1 # 剛好一個(gè)站點(diǎn)發(fā)送發(fā)送成功 else: collision 1 # 兩個(gè)及以上站點(diǎn)同時(shí)發(fā)送沖突 return { idle_ratio: idle / slots, success_ratio: success / slots, collision_ratio: collision / slots, } # 固定 10 個(gè)活躍站點(diǎn)對(duì)比不同 p 值的表現(xiàn) for p in [0.05, 0.1, 0.2, 0.5]: result simulate_p_persistent(active_stations10, pp) print(fp{p}: 空閑{result[idle_ratio]:.3f}, f成功{result[success_ratio]:.3f}, 沖突{result[collision_ratio]:.3f})邏輯說(shuō)明每個(gè)時(shí)間片模擬 N 個(gè)活躍站點(diǎn)各自做一次獨(dú)立隨機(jī)試驗(yàn)發(fā)送者數(shù)量為 0 記為空閑、恰好 1 個(gè)記為成功、2 個(gè)及以上記為沖突迭代 10000 個(gè)時(shí)間片后統(tǒng)計(jì)三類(lèi)事件的比例。參數(shù)說(shuō)明active_stations10表示同時(shí)有 10 個(gè)活躍站點(diǎn)p 從 0.05 掃到 0.5。運(yùn)行結(jié)果會(huì)驗(yàn)證一個(gè)規(guī)律p 增大時(shí)沖突比例明顯上升空閑比例下降而成功率在 p0.1 附近出現(xiàn)峰值——這就是 1/N 原則的實(shí)證。這個(gè)腳本可以繼續(xù)擴(kuò)展比如給沖突站點(diǎn)加退避重傳機(jī)制觀察重傳對(duì)網(wǎng)絡(luò)穩(wěn)定性的影響。但課程層面先看這一版就夠了它能把「p 值怎么調(diào)」從抽象公式變成可見(jiàn)的數(shù)據(jù)。5. 局域網(wǎng)技術(shù)避坑五個(gè)親身踩過(guò)的理解誤區(qū)5.1 把 0.184 當(dāng)實(shí)際可用帶寬直接算容量現(xiàn)象拿著純 ALOHA 的吞吐量上限 0.184 去估算鏈路容量得出「10Mbps 鏈路最多跑 1.84Mbps」的結(jié)論。實(shí)際用模擬工具測(cè)試發(fā)現(xiàn)吞吐量并沒(méi)有低到這么離譜。原因0.184 是理論歸一化最大吞吐量對(duì)應(yīng)「只發(fā)送定長(zhǎng)幀、負(fù)載恰好處于 G0.5」的理想條件。真實(shí)系統(tǒng)里幀有前導(dǎo)碼、幀間間隔、控制字段等額外開(kāi)銷(xiāo)而且鏈路負(fù)載不可能精確穩(wěn)定在峰值點(diǎn)。歸一化吞吐量不等于帶寬利用率。解決把 0.184 當(dāng)成「信道能承載的凈數(shù)據(jù)比例上限」來(lái)理解。估算實(shí)際吞吐量時(shí)先根據(jù)幀長(zhǎng)算開(kāi)銷(xiāo)占比再用 S ×1 - 開(kāi)銷(xiāo)占比做一次換算。比如 1518 字節(jié)的以太網(wǎng)幀前導(dǎo)碼和幀間間隔大約占 7% 左右凈效率還要再打折扣。5.2 時(shí)隙 ALOHA 的同步被做成了全網(wǎng)高精度硬同步現(xiàn)象實(shí)現(xiàn)時(shí)隙 ALOHA 時(shí)照課件「要求全局時(shí)鐘同步」一句字面執(zhí)行給每個(gè)節(jié)點(diǎn)上了高精度時(shí)鐘同步方案成本高到離譜。原因課件里「全局時(shí)鐘同步」說(shuō)的只是時(shí)隙邊界對(duì)齊不是所有站點(diǎn)要精確到納秒級(jí)時(shí)間同步。時(shí)隙 ALOHA 真正需要的是每個(gè)站點(diǎn)在時(shí)隙邊界處統(tǒng)一行動(dòng)這個(gè)精度要求通常在微秒級(jí)。解決采用中心信標(biāo)同步——主站周期性地廣播時(shí)隙邊界信號(hào)從站收到信標(biāo)后對(duì)齊自己的發(fā)送時(shí)刻。這種做法的同步成本和復(fù)雜度遠(yuǎn)低于全網(wǎng)硬同步也更符合 ALOHA 最早在無(wú)線(xiàn)廣播場(chǎng)景里的實(shí)際部署方式。5.3 非堅(jiān)持 CSMA 的退避時(shí)間設(shè)成固定值現(xiàn)象實(shí)現(xiàn)了非堅(jiān)持 CSMA測(cè)下來(lái)沖突率居高不下而且重傳失敗的概率很大網(wǎng)絡(luò)在重負(fù)載下近似癱瘓。原因退避時(shí)間如果是固定值多個(gè)沖突過(guò)的站點(diǎn)會(huì)再次在同一時(shí)刻監(jiān)聽(tīng)——同一時(shí)刻退避結(jié)束、同一時(shí)刻重新發(fā)送陷入同步?jīng)_突的循環(huán)。教科書(shū)只說(shuō)了「等待一個(gè)隨機(jī)時(shí)間」沒(méi)有強(qiáng)調(diào)隨機(jī)值必須是變化的。解決把退避時(shí)間設(shè)成隨機(jī)范圍并隨重傳次數(shù)擴(kuò)大取值范圍。常見(jiàn)做法是每次重傳把退避窗口翻倍比如第一次重傳退避窗口取 0~100 個(gè)時(shí)間片第二次取 0~200以此類(lèi)推和以太網(wǎng)的截?cái)喽M(jìn)制指數(shù)退避思路一致。這一條即使是非堅(jiān)持 CSMA 也應(yīng)該參考。5.4 在重負(fù)載園區(qū)網(wǎng)里硬套 1-堅(jiān)持 CSMA現(xiàn)象一個(gè)樓宇內(nèi) 200 多臺(tái)設(shè)備共享同一沖突域網(wǎng)絡(luò)高峰時(shí)段廣播幀滿(mǎn)天飛實(shí)際吞吐量驟降延遲嚴(yán)重抖動(dòng)。原因1-堅(jiān)持 CSMA 的適用范圍是「規(guī)模較小、負(fù)載較輕」。200 臺(tái)設(shè)備的廣播域明顯超出設(shè)計(jì)目標(biāo)沖突域過(guò)大導(dǎo)致節(jié)點(diǎn)頻繁重傳重傳又加劇信道占用形成惡性循環(huán)。解決縮小沖突域。用交換機(jī)把網(wǎng)絡(luò)劃分成多個(gè)獨(dú)立的沖突域每個(gè)交換機(jī)端口對(duì)應(yīng)一個(gè)沖突域或者直接換用帶沖突避免機(jī)制的協(xié)議。這也是為什么現(xiàn)代局域網(wǎng)都建立在交換式以太網(wǎng)上共享式以太網(wǎng)只存在于實(shí)驗(yàn)室和古董集線(xiàn)器環(huán)境里。5.5 p-堅(jiān)持的 p 值固定不變現(xiàn)象照著課件設(shè)置了 p 參數(shù)后低峰期大量時(shí)隙空閑高峰期沖突頻發(fā)網(wǎng)絡(luò)體驗(yàn)時(shí)好時(shí)壞。原因p 值的最優(yōu)解依賴(lài)活躍站點(diǎn)數(shù) N而 N 是動(dòng)態(tài)變化的。固定 p 只能在某一類(lèi)負(fù)載下表現(xiàn)良好負(fù)載一波動(dòng)就偏離最優(yōu)工作點(diǎn)。解決把 p 值做成自適應(yīng)的——節(jié)點(diǎn)根據(jù)最近一段時(shí)間觀測(cè)到的信道繁忙程度動(dòng)態(tài)調(diào)整發(fā)送概率。信道忙則降低 p信道空閑則適當(dāng)提高。實(shí)現(xiàn)方式通常是用滑動(dòng)窗口統(tǒng)計(jì)信道占用率再映射到 p 值。這在無(wú)線(xiàn)局域網(wǎng)協(xié)議里已經(jīng)是標(biāo)配機(jī)制有線(xiàn)共享介質(zhì)場(chǎng)景同樣適用。這五個(gè)坑里第 2、3、5 條屬于實(shí)現(xiàn)細(xì)節(jié)問(wèn)題第 1、4 條屬于選型和計(jì)算層面。課件本身講的是協(xié)議邏輯沒(méi)有義務(wù)覆蓋實(shí)現(xiàn)陷阱所以我把這幾個(gè)親身踩過(guò)的坑記下來(lái)供你參考。6. 把課件里的公式變成可復(fù)現(xiàn)的實(shí)驗(yàn)三條驗(yàn)證路徑如果只看不練吞吐量曲線(xiàn)的感覺(jué)很快就淡了。我建議按這三條路徑把課件結(jié)論跑一遍成本都很低。第一條是數(shù)值驗(yàn)證。跑第 3 章的 Python 腳本確認(rèn)純 ALOHA 和時(shí)隙 ALOHA 的峰值分別出現(xiàn)在 G0.5 和 G1.0數(shù)值為 0.184 和 0.368。再把第 4 章的 p-堅(jiān)持模擬腳本跑一遍把 p 從 0.05 調(diào)到 0.5觀察沖突比率的上升趨勢(shì)。這一步能幫你建立「負(fù)載-沖突-吞吐量」三者之間的數(shù)量關(guān)系。第二條是協(xié)議觀察。用 Wireshark 抓包驗(yàn)證 CSMA/CD 的行為——把一個(gè)集線(xiàn)器接進(jìn)測(cè)試網(wǎng)絡(luò)用兩臺(tái)主機(jī)同時(shí)發(fā)起持續(xù)下載觀察抓包里重傳幀的出現(xiàn)頻率和退避行為。沒(méi)有集線(xiàn)器也沒(méi)關(guān)系用 Mininet 模擬一條共享鏈路同樣能觸發(fā)沖突和重傳。抓包時(shí)重點(diǎn)看以太網(wǎng)幀頭里的類(lèi)型字段和重傳間隔這比看課本上的拓?fù)鋱D直觀得多。第三條是教學(xué)順序的重排。如果你和我一樣要用這份課件講課或組內(nèi)分享建議不要按原章節(jié)順序過(guò)而是按這個(gè)順序講先給局域網(wǎng)數(shù)據(jù)鏈路層模型說(shuō)明 LLC 與 MAC 的分工再講靜態(tài)分配的局限引出動(dòng)態(tài)分配接著用純 ALOHA 算出爭(zhēng)用協(xié)議的吞吐量下限再用時(shí)隙 ALOHA 展示對(duì)齊發(fā)送時(shí)機(jī)的效果最后把三種 CSMA 放進(jìn)同一個(gè)坐標(biāo)系里對(duì)比。這個(gè)順序的好處是每一步的改進(jìn)都能對(duì)上一步的問(wèn)題——學(xué)生先知道問(wèn)題有多嚴(yán)重才能理解方案好在哪。從第一次在課堂上講這章到現(xiàn)在我養(yǎng)成了一個(gè)習(xí)慣接手任何帶共享介質(zhì)的網(wǎng)絡(luò)項(xiàng)目時(shí)先做一遍「共享介質(zhì) vs 交換介質(zhì)」的判斷把可能存在的沖突域列成清單再?zèng)Q定要不要啟用廣播抑制、風(fēng)暴控制這些安全手段。這個(gè)動(dòng)作用不了十分鐘但已經(jīng)不止一次避免了下班后被廣播風(fēng)暴召回機(jī)房的尷尬。如果你也用這份課件自學(xué)或者備課我建議把這個(gè)判斷流程加進(jìn)你自己的檢查清單希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取