之前在和大家談到網線的問題的時候,會告訴大家即便是你的網線做得很爛,你在使用的時候也是沒有什麼感覺的。
原因在於很多網路上的錯誤都被網路協議及時的修正了。這也就導致了很多人覺得自己的網路是沒有問題的。
所以說,網線做得再爛,只要不爛到一定程度,大家在日常的使用過程中幾乎不會出現任何可以感知到的問題。
但是,即便是在使用網路的過程中感覺不到網路的問題,並不不一定代表網路是沒有問題的,唯一的解釋也是——大家的感知比起計算機系統的處理速度來說過於遲鈍了。
而網路上充斥著很多“榨乾寬頻最後一絲頻寬”的文章,這種東西四兩撥千斤單車變摩托很有蠱惑性,只是,話說回來,你家的網路質量所帶來的損失要比所謂的“榨乾”獲得的收益大得多,只是你不知道有這些頻寬刺客罷了。
發個iN家的弱電箱,這是iN家裡網路的一個組成部分:
起初剛剛拿到房子的時候,只接入了一個最普通的聯通光貓路由器,下卦了一個軟路由,然後掛一臺測試用的小主機和一個Tp-link的AP,這就是iN家裡最早的網路結構了。
後來開始組建自己的家庭網路的時候規劃了一下,這個小弱電箱作為家庭娛樂的子網節點就被保留了起來,塞入一臺2光8電的小交換機,利用房間現有的線管將基礎網路通向各個房間。
弱電箱很窄、很擠,幾乎是塞滿了。
不過,在之前給大家講過怎麼做弱電箱、怎麼打水晶頭、和怎麼做牆面面板的,iN自己也是屬於身體力行的做自己的家庭網路的。
報個成績吧:
裝置溫度59度,可接受,連續執行58天17個小時,這是剛剛看的。
上面的兩個光模組溫度45度,也是可以接受的範圍。
運行了這麼長時間的一套網路裝置,在網路傳輸中有多少錯誤呢?
所有可檢測到的錯誤數量為“0”
這是什麼水平呢?其實這僅僅是網路可以用。
說下交換機所監控的專案:
- Rx Pauses: 表示接收埠因為流量控制而暫停的次數。這可以用於檢測網路擁塞或流量控制的情況。
- Rx Errors: 表示接收時發生的錯誤次數,可能涉及到傳輸問題或硬體故障。
- Rx FCS Errors: 表示接收時發生的幀校驗錯誤的次數,可能表明資料在傳輸過程中發生了錯誤。
- Rx Jabber: 表示接收時發生的Jabber錯誤的次數,通常指接收到的資料幀長度異常。
- Rx Runts: 表示接收到的執行ts(太短)幀的次數,可能是由於傳輸問題導致的。
- Rx Fragments: 表示接收到的片段幀的次數,可能與網路問題有關。
- Rx Too Long: 表示接收到的超長幀的次數,可能涉及到網路配置或硬體問題。
- Tx Pauses: 表示傳送埠因為流量控制而暫停的次數。
- Tx FCS Errors: 表示傳送時發生的幀校驗錯誤的次數,可能表明資料在傳輸過程中發生了錯誤。
- Tx Collisions: 表示傳送時發生的衝突的次數,可能與網路碰撞有關。
- Tx Single Collisions: 表示傳送時發生的單次衝突的次數。
- Tx Multiple Collisions: 表示傳送時發生的多次衝突的次數。
- Tx Excessive Collisions: 表示傳送時發生的過多衝突的次數。
- Tx Late Collisions: 表示傳送時發生的延遲衝突的次數。
- Tx Deferred: 表示傳送時發生的延遲的次數。
其中有幾個專案是和網線的質量有關係的:
Rx FCS Errors: 幀校驗錯誤可能由於網線質量不佳導致資料在傳輸中受損。
這是由於網路資料在傳輸過程中幀的奇偶校驗出現錯誤所導致的錯誤計數,資料包在傳輸過程中被做成“資料幀”,在網線上的表現就是一串高低電平的電訊號,在傳輸過程中如果受到了網線內部的干擾或者外部的電磁干擾,原始的高低電平訊號就會在傳輸過程中出現多餘的高電平或低電平,這時候奇偶校驗(CRC)就起到作用,在接收端會根據一段網路傳輸內容的奇偶數特性來判斷這段資料幀是否是原始的沒有經過篡改的資料幀。
如果CRC出現錯誤,就會直接丟棄這個資料幀,再發送一個訊號到傳送裝置,讓裝置進行重新傳輸。
在有的交換機中就有對於Rx FCS的計數功能,我們可以從狀態或者錯誤報表中看到這種錯誤的數量是多少。從而去評估網路線路的質量。
Rx Runt 接收殘幀,剛剛我們說到了網路的干擾會導致CRC校驗不透過,如果網路線路上的干擾家加劇,那麼接收裝置有可能接收到的幀不完整,這時候就會觸發RX Runt錯誤。說下這種錯誤:
一個網路資料幀是有固定的格式的。
在傳輸資料的時候資料包會封裝成幀,幀的頭部根據不同的網路模式是固定格式的幀頭(frame header),在其中就有幀長度的標識Length,這個長度標識記錄了當前的幀所傳輸的資料長度。在接收裝置獲取了一個網路幀之後會根據長度標識來計算接收到的網路幀是不是和長度標識的數字相符,如果小於長度標識所記載的量值,那麼這個幀就是一個Runt(侏儒)也就是我們所說的RX Runt(接收殘幀)了。為啥殘了呢?丟東西了唄。怎麼會丟呢?99.9999%的可能性就是網線不行。
和RX Runt相似的還有Rx Too Long,還是檢測幀的長度是否和記錄值相符,網路裝置接收到的幀資料比預期的多?原因也是網線不抗干擾,外部的干擾在一串高低電平之中夾帶了私貨。
Tx Collisions,前面說到的都是RX(接收)所包含的問題,還有一種故障直接“捂住了嘴”,讓你的網路在傳送資料的時候出現問題。這就是“傳送碰撞”。實際上這是半雙工網路時期遺留下來的一個設計,簡單的理解就是在傳送資料的時候網路裝置要在網路上大喊一聲“爺要說話了”,這時候其他裝置就會閉嘴傾聽。在網路的設計中如果其他裝置要傳送資料的話,就會隨機延遲一個小時間片等到這個小時間片到了,自己也喊一聲“爺要說話了”,就可以傳送資料了。這裡面就包含了一個碰撞域(collision domain)的大小設定問題了。太大的碰撞域會導致在一個時間片裡面有大量網路裝置喊話,這就導致了最後誰也說不了話。這是半雙工網路的事情,在大部分現代網路全雙工系統中現在已經不需要刻意處理了。
但是還有一個問題,當你在野外對著大山喊“你好”的時候,你會聽到回聲“你好……你好……你好……”,網線中傳輸的訊號也是這樣,一部分進入了接收端,另一部分還會在網線中形成不斷衰減的回聲。當回聲衰減不到位的時候,你的裝置可以“聽”到自己喊出的“爺要說話了”,這時候你的裝置就得閉嘴。
現在網路系統中的TX collision大多數都是自己和自己碰,問題也出在網線的質量上。
這些問題大部分都會造成資料重新發送或者傳送延遲。最終導致你的網路速度降低。實際上選擇一個好的網線,或者安裝規範來製作部署網線都是為了降低網路系統上可以檢測到的錯誤數量。但由於大多數家用裝置根本不提供這些錯誤的統計報表,知道這些錯誤的人就少之又少了。
所以用ping、測速網站來看自己網路速度並不能看到網路協議容錯系統處理過的這些底層錯誤。但要知道的一點是,這些“底層錯誤”就像空氣中的病毒一樣,雖然你看不見,但是還依舊會對你造成實質性的影響。所以在某些人看來網路的好壞也就成了玄學。
在“榨乾寬頻頻寬”的同時,你有沒有想過選擇好一點的網線、利用更規範的佈線方式先把自己的網路中的隱患去除掉呢?
iN家的弱電箱是比較擠、比較亂、比較不符合強迫症的,但看資料是個啥水平呢?