Networking

在數據中心內的通信中丟包有多常見?

  • April 1, 2013

假設我在同一個數據中心有兩台機器,但不一定在同一個機架中。

在這兩台機器之間使用 UDP 發送數據包時,丟包有多常見?

我的假設是,由於機器之間最多只有幾個交換機,因此根本不會丟棄數據包。

同一數據中心內的無序數據包到達有多常見?我的假設是 99.9% 的時間只有一條路線,所以這不會發生。

然而,每當我發現自己以絕對的方式思考時,我知道我一定錯過了一些東西!

我需要哪些背景資訊才能更好地了解何時會丟棄數據包,以及它們可能被丟棄的頻率,以及同一數據中心中的機器亂序到達的頻率?

最終,當位於同一數據中心的不同 Linode VPS 實例之間進行通信時,我試圖在使用多播 UDP 或 PGM 之間做出決定。資訊必須按順序到達。當然,那時 UDP 聽起來並不那麼好!

但是,如果可以期望在同一個數據中心內實現幾乎完美或完美的傳遞,那就沒問題了。但是,我正在測試這個假設。

謝謝。

您不能依賴 UDP 按順序傳送數據包,因為規範不提供這些保證。即使假設最理想的情況是兩台主機之間的一根乙太網電纜,仍然存在作業系統、網路堆棧、NIC 驅動程序和您編寫的 libc 實現的問題。

在該鏈中的每一步,該程式碼的編寫者將選擇優先排序 UDP 數據包,即使它們按順序到達,原因很簡單,他們不必這樣做。

一個人為的例子可能是傳入數據包被讀入的資料結構,它可能是一個環形緩衝區。按順序到達的數據包將按順序放入環形緩衝區,但驅動程序編寫者將它們按記憶體順序轉儲到網路程式碼的上層可能更簡單,因此它們的順序隨機化。

以您的情況為例,在共享基礎架構上執行的虛擬機將針對捲而不是性能執行,那麼預測將接收 UDP 數據包的順序的機率將很低。

簡而言之,如果規範說您不能依賴 UDP 數據包排序。您不能依賴它,也不能嘗試調整環境以提供比規范承諾的更強大的保證。

引用自:https://serverfault.com/questions/118136