
我只是想知道如果交換器丟失太多資料包會發生什麼。我問的原因是因為我有一個經常過載的開關。這是由於個人在網路上下載大量文件所造成的。我有一個備用開關,以防萬一這個開關故障。
答案1
簡短的回答是「不是很多」。就交換器上實際發生的情況而言,資料包丟失了 - 就是這樣。交換機除了記錄它們丟失的事實之外並不關心。
您將在下一節中準確了解導致資料包遺失的原因,以及整個網路如何設計來處理它。
再說一次,簡而言之,對資料包遺失的回應是由客戶端而不是交換器完成的。這是他們的責任,交換器對它的唯一控制是透過其佇列的配置和 QoS 等功能,這些功能僅對流量進行優先排序(它們不會阻止資料包遺失)。
交換器上發生了什麼事?
交換器使用佇列來允許進出交換器的資料包之間有少量緩衝區。它們有點像緩存並具有許多相似的功能。通常,您希望資料包進入交換器並直接出去。這是最快的方法,但這並不總是可行。
如果您有多個用戶端匯聚在缺乏頻寬的連線上,或者您透過較窄的頻寬連接到目標,則封包發送出去的速度將無法與進入裝置的速度一樣快。
額外的資料包將堆積在交換器內使用的佇列上,希望這是一個資料包突發,並且在快取完全填滿之前會有更少的資料包,並且它可以「趕上」自身。
如果快取確實已滿,則表示傳入的任何其他資料包都沒有地方可以存儲,這就是資料包被丟棄的地方 - 它們會被簡單地丟棄,直到隊列上有足夠的空間。
例子
現實世界的一個例子是辦公室中的文件伺服器。假設您有 48 個 100Mbps 連線和 2 個 1Gbps 連線(其中 48 個用於客戶端,2 個千兆連接到伺服器)。如果沒有其他人嘗試與伺服器通信,那麼客戶端可以愉快地利用其完整的 100mbps 連接(當然有開銷)。但一旦超過 20 個人想要存取已經有 2gbit 的檔案伺服器,第 21 個人就無法做到這一點。
封包將開始以先到先服務的方式新增至佇列中,並使用交換器上配置的優先權設定進行釋放 - 通常,當未設定 QoS 等配置時,採用先進先出 (FIFO)。當該緩衝區變滿(資料包太多)時,資料包將完全丟棄,客戶端需要意識到並採取措施。
典型的結果將是available_bandwidth / (number_of_clients * bandwidth_of_clients)
平均吞吐量。每個客戶端所獲得的速率與其與交換器的連線速度成正比。這與其說是一種確定性的設計決策,不如說是只要佇列上的空間可用,而資料包就可能從任何一個連接埠發出的結果。
網路流量會發生什麼情況?
軟體/硬體通訊應識別正在丟棄的資料包並實施速率限制以減少嘗試發送的資料量。當然,如果資料是 UDP(通常在即時應用程式中),則沒有任何 ACK 訊息,因此它不會知道進行任何速率限制。
速率限制通常是所有流量確定其可以發送的最快速率的方式。例如,您可能有一個1Gbit 連接到簡單網路中的路由器,但上傳速度只有20Mbit,當您嘗試發送超過該速度的資料包時,您的資料包將被丟棄,PC 將不會收到ACK,並且會施加速率限制匹配透過整個網路(包括網路)到達目的地所能達到的最大速度。
在 TCP 中內格爾演算法用於施加這種速率限制,但在 UDP 連接中,結果可能會降低品質(對於視訊串流等)或只是失敗,但無法接收足夠的資料必須明確來自目的地,而不是由於缺乏承認。