技術文章 · 網路與網通建置

網路突然全斷又變慢?交換器 Loop 與 Broadcast Storm 排查

整層樓網路同時全斷、交換器整排燈同步狂閃,多半是接錯線繞出迴圈引發廣播風暴。本文從第二層訊框沒有 TTL 的物理機制講起,帶你看懂位址表為何崩潰、現場拔線法的正確順序,以及 STP/RSTP、迴圈偵測、風暴控制與邊緣埠防護怎麼設定才治本。廷皓科技提供高雄、台南、屏東網路排障與網通建置。

作者 Steve Chen · 發布  · 更新  · 約 9 分鐘閱讀

網路與網通建置 — 廷皓技術專欄插圖

交換器 Loop/網路迴圈發生時,常見現象是整排燈號快速閃爍、延遲暴增、MAC flapping、Gateway 和內網服務一起不穩。先隔離疑似支線、保留核心管理路徑,再用 STP、Loop Detection、Storm Control 與介面計數器找出真正的環。

為什麼一條線能讓整層樓一起陪葬

要看懂這件事,得先知道交換器平常怎麼做事。它收到一個「廣播訊框」:目的位址是 FF:FF:FF:FF:FF:FF 那種、像 ARP 在問「這個 IP 是誰」這類每台電腦隨時都在發的東西:它的本分就是往來源埠以外的每一個埠各送一份出去,確保該收到的人都收得到。單獨看,這沒問題,一份進、幾份出,發完就結束。麻煩出在當線路被接成一個圈之後,這個「發完就結束」的前提整個垮掉。

第二層訊框沒有 TTL 這道保險絲

這是整件事的物理核心。你可能聽過 IP 封包有一個 TTL(存活時間)欄位,每經過一台路由器就減一,減到零就被丟棄,這是網路層防止封包在世界上永遠亂跑的保險絲。但是乙太網路第二層的訊框,天生就沒有這個欄位。沒有 TTL,意思是只要拓撲裡存在一個環路,一份廣播訊框就會沿著這個圈子一圈一圈永遠轉下去,沒有任何機制會把它自然淘汰。

更狠的是它不是「維持原樣地轉」,而是「每轉一手就複製放大」。訊框每經過一台交換器,就被複製著往其他所有埠再送出去,於是指數式成長:一變多、多變爆。在現在動輒 Gigabit 的環境裡,這個放大速度快到不用一秒,就能把整條線的頻寬和交換器的處理晶片全部吃滿。這就是「廣播風暴」名字的由來:它不是慢慢淹上來,是瞬間灌頂。所以你在現場感覺到的往往不是「網路變慢」,而是「網路整個不見了」。

MAC 位址表被打成一團亂麻

廣播風暴還藏了第二記殺傷,很多人只知道前一半、漏掉這一半。交換器要把資料正確送到目的地,靠的是一張「MAC 位址表」,記錄「哪個 MAC 位址掛在哪個埠上」。正常情況下這張表很穩定。可是迴圈一形成,同一台電腦的 MAC 位址,交換器這一瞬間從 3 號埠學到、下一瞬間又從 7 號埠學到,因為那個訊框繞了一圈從另一邊回來了。這叫做「位址表震盪」,整張轉送表被攪成一團。

後果是:連原本跟廣播無關、規規矩矩的一對一單點傳輸,也開始被送錯埠、被丟包。所以風暴一發作,不是某幾台連不上,而是整個第二層區段一起癱瘓。這一點在判斷上非常關鍵:單獨一台設備壞,是那一台自己的事;迴圈,是全體一起陪葬。如果報修的人說「只有我這台不能上」,那多半不是迴圈;如果是「整層樓一起死」,迴圈的嫌疑就先拉到最高。

現場十分鐘,怎麼把那條線揪出來

先對三個徵兆,我把它叫「風暴三件套」:第一,問題是全面、同時發生的,不是零星幾台;第二,交換器整排燈號同步狂閃,注意關鍵字是「同步」,一起閃、節奏一致;第三,重開任何一台終端設備都沒有用。三個都中,你幾乎可以直接跳過所有軟體排查,認定是實體層繞出了迴圈。

接著別急著拔線,先問一句最省時間的話:「掛掉前的半個小時,誰動過什麼?」答案常常自己就跳出來:新裝了一台 IP 話機、桌子底下多了一台便宜的小交換器、有人剛整理過線槽。問得出來,往往比動手還快。

問不出來,就用拔線法

問不出來,就回到最原始也最可靠的方法:拔線法。從燈閃得最兇的那台交換器下手,一次只拔一條線,拔完停 5 到 10 秒觀察燈號。當你拔到某一條,整排燈突然從「狂閃」恢復成「有一下沒一下的正常呼吸」,網路也活過來了,那條就是兇手。

這裡有兩條鐵則,違反了會製造新的災難。第一,一次只動一條,拔一條、看一下、沒好就插回去再拔下一條;如果你一次拔一整把,就算網路好了,你也不知道實際是哪一條的功勞。第二,拔之前先記住每條原本插在哪個埠,最好用手機先拍一張。不然迴圈是救回來了,卻換來一堆插錯位置的新問題,隔天又是一輪報修。如果交換器很多、埠數很大,可以改用「對半法」加速:先拔掉一半的上行線,看風暴落在哪一半,再往那一半對半切下去,比一條一條試快得多。

還有一件平常就該做的功課:熟悉自家交換器燈號「正常」時長什麼樣子。正常的資料燈是有一下沒一下、快慢不一地閃;風暴時是整排一致、幾乎不熄地猛閃。你平常多看兩眼,出事那天才分得出「呼吸」和「抽搐」的差別。

治本:讓交換器自己防呆

拔線是急救,救得回這一次,救不了下一次。真正的治本,是讓交換器自己具備看到迴圈、擋掉迴圈的能力。這靠的是幾層協定與機制疊在一起,缺一角就會留破口。

生成樹協定(STP/RSTP):主幹的邏輯防呆

IEEE 802.1D 定義的生成樹協定(STP)是第一道、也是最根本的一道。它的做法是讓交換器之間互相交換一種叫 BPDU 的小訊息,先推選出一台「根橋接器」當基準,再算出一棵從根出發、沒有任何環路的樹狀結構。那些多餘的、會形成迴圈的路徑,對應的埠會被邏輯上「擋住」:線還是實體接著的,只是不轉送資料;一旦主線路斷了,被擋住的備援埠才會被放行接手。等於實體上留了備援,邏輯上永遠只有一條通路,廣播就永遠繞不回自己身上。

傳統 STP 有個明顯缺點:收斂太慢。它整套是靠計時器在等的:先等舊資訊老化的 Max Age 20 秒,再走 Listening 15 秒、Learning 15 秒兩個過渡狀態,一個原本被擋住的埠加起來要花到 50 秒才會真正開始轉送資料;就算是剛插上、狀態單純的埠,也還要 30 秒。這在今天的環境裡太久了。所以後來有了改良版的 RSTP(IEEE 802.1w),把收斂壓到毫秒到數秒的等級。它的關鍵改動是:不再只由根橋接器發 BPDU,而是每一台交換器每 2 秒都主動發自己的 BPDU,並且把埠資訊的失效判定,從 20 秒的 Max Age 縮短成 3 倍 Hello(也就是 6 秒)就淘汰,一有風吹草動立刻反應。現在市面上的管理型交換器幾乎都內建 RSTP,該開就開。

迴圈偵測與風暴控制:底線的兩道保險

光有生成樹還不夠,它主要防的是交換器與交換器之間的迴圈,所以下面還要再疊兩道保險。

迴圈偵測會定期從每個埠送出一個特製的探測訊框,如果這個訊框繞了一圈又從自己身上回來,就代表這個埠外面接出了一個迴圈,交換器會立刻把那個埠關閉並亮燈警示,把問題鎖死在單一埠、不讓它擴散開來。

風暴控制則是替每個埠設一道廣播流量的門檻。交換器會用極短的區間(常見是幾毫秒等級)持續量測進來的廣播、群播流量佔頻寬的比例,一旦超過你設定的門檻,就把超出的部分丟掉,或乾脆把埠設成錯誤停用狀態並發出告警。門檻怎麼抓?實務上一個常見的起點,是把廣播限在鏈路頻寬的百分之一上下;換算成封包,一般終端與無線基地台大約在每秒 80 到 100 個廣播封包以上就會開始出狀況,你可以拿這個當設定的參考錨點,再依現場流量微調。這道機制真正的價值在於:就算迴圈繞在生成樹看不到的地方,它至少能在流量灌爆整台交換器之前先踩一腳煞車。

邊緣埠:面對終端的那些孔,要另外設防

還有一個常被忽略、但性價比極高的設定:面對終端設備(電腦、印表機、話機)的那些「邊緣埠」,本來就不該收到任何 BPDU,因為那頭理應是一台電腦,不是另一台交換器。所以可以在這些埠上設一個規則:一旦它收到了 BPDU,就代表有人在這裡違規接了一台交換器、很可能繞出迴圈,系統就立刻把這個埠停用。這等於在最容易出包的第一線:使用者自己亂插線的地方:設了一道自動閘門,常常在迴圈還沒擴散之前就先把它掐掉。

那實際什麼時候該認真上這些?我的判斷準則其實很簡單:只要環境裡有兩台以上的交換器串接,或者是「常有人自己插線」的場所:辦公室、補習班、診所、旅宿、工廠辦公區都算:主幹就請用管理型交換器,把 RSTP、迴圈偵測、邊緣埠防護一起打開,風暴控制門檻也設好。如果只是家裡一台 8 埠的小交換器、沒有任何備援路徑,那就別花這個錢,靠紀律就好:每一條線兩頭都貼標籤,插之前想一秒。設備等級要對應風險等級,不是越貴越好。

實務上,這些保護也有死角

把話講完整,這些機制都不是萬靈丹,實務上有幾個經典破口。

傻瓜交換器是最大的盲區。生成樹靠的是交換器之間互講 BPDU 這種「共同語言」,但辦公室桌下那種幾百塊、沒有網管功能的傻瓜交換器,根本不會講這個語言。它收到 BPDU 不但不理解,還會把它當成普通資料往所有埠亂送。所以如果迴圈是繞在一台傻瓜交換器底下,上層的生成樹很可能完全看不見,這時候能救你的,就只剩風暴控制和迴圈偵測這兩道底線。所以主幹和有備援的地方,別為了省小錢用傻瓜交換器。

Loop Detection 或 BPDU Guard 曾經誤關正常 Port 時,正確處理是查誤判原因、調整適用 Port、門檻與自動恢復,不是把保護整套停用。保護關掉後,下一次真的發生迴圈,影響會從單一 Port 擴大成整個廣播網域。每次自動關閉都要留下時間、Port、MAC 與觸發原因,修正後再驗證。

牆上的雙孔資訊面板,是最隱藏的經典雷。很多辦公室牆上一個面板有兩個網路孔,看起來像兩條獨立線路,但它們的另一頭很可能都拉回機櫃、插在同一台交換器上。只要有人好心拿一條短跳線把這兩個孔接起來:理由通常是「看起來比較整齊」或「想說多接一條備用」:一個完美的迴圈就成形了,這正是本文開頭那樁事故的完整重演。所以看到成對的資訊孔,先假設它們可能同源,別隨手橋接。

對照指令

聯絡廷皓討論 看更多文章