如何模擬簡單交換器的資料包緩衝區內發生的情況?

如何模擬簡單交換器的資料包緩衝區內發生的情況?

我正在調試儲存轉送千兆位元交換器中遺失 UDP 資料包的情況,我想直觀地了解交換器內部發生的情況,以便更好地理解問題的實質。

該場景很簡單 - 兩個突發資料流通過交換機內的 2 個端口,並且都希望通過第三個端口(兩者共用)離開交換機。因此交換器需要在資料包緩衝區中保留一些資料一段時間。

問題是:根據我的簡單計算,緩衝區應該要夠大來處理我正在檢查的情況。一個資料流每 1.56 ms 發送 25 kB 的突發(分為 1514 B 資料包),另一個資料流每 1 ms 發送 60 kB 的突發。現在,即使是像 Netgear GS105E 這樣的 SOHO 交換器也具有 128 kB 大小的緩衝區。因此,簡單的數學計算 (25+60 < 128) 表明,即使流同時進入入口(假設沒有其他大量流量),它也應該可以工作。

實際測試表明,來自兩個流的大量資料包在某些交換器上丟失(似乎與緩衝區大小有關,但不僅限於此)。在我的模擬中,當設定為 128 kB 時,我無法使緩衝區溢出。

我為一個 24 kB 大小的緩衝區錄製了這個動畫,其中存在溢位。但是,您可以輕鬆地看到,僅增加緩衝區幾個位元組就可以解決問題,並且所有資料包都會通過。

我在這個模擬中做了一些簡化。所有資料包都具有相同的 QoS(實際情況也是如此)。因此,我在模擬中忽略了 QoS 隊列,並將所有流量視為同等重要。接下來,我省略了緩衝區的記憶體管理。我可以想像這是問題的一個重要部分,但如果我用完美分配進行的簡化與實際情況的誤差超過 10%,我會感到驚訝。我還假裝交換器在收到第一個位元組時知道幀長度,以便它在開始時保留所有需要的記憶體。由於我找不到任何有關連接埠入口/出口隊列大小的文檔,我假設它們都放置在共享資料包緩衝區中,並且它們可以根據需要佔用緩衝區的大部分(儘管我認為罪魁禍首可能是這裡的某個地方)。我將每個資料包的處理延遲設定為 512 ns(64 B 資料包的傳播延遲)。

我不確定它是否起作用,但這些流由分段的 UDP 封包組成(即 25 kB 突發是一個分段為 17 個 IP 片段的 UDP 封包)。第二個流將突發創建為 2 或 3 個 20 kB UDP 封包,每個封包分為 14 個 IP 片段。

用於複製與真實流相似的流的 Iperf 3.7 指令是:

iperf3 -c sink -u -b 128M -t 600 -l 25256 --pacing-timer 1560
iperf3 -c sink -u -b 400M -t 600 -l 20k --pacing-timer 1000

您是否知道我還忘記考慮哪些因素可能導致模擬與現實相差甚遠?謝謝你的幫忙!

動畫的源碼位於https://gist.github.com/peci1/a0346538acc6c289b2c6d596b184ad21

模擬通過交換器的資料流

這是我的真實實驗結果表。資料流一是固定的 - 128 Mbps,25 kB UDP 資料包,每 1.56 毫秒。我正在更改第二個流的參數,試圖找到第一個流的資料包開始被交換器丟失的限制。我正在更改-l指定 UDP 封包大小的(長度)參數,以及-b指定這些封包應產生的頻寬的(頻寬)參數。--pacing-timer對於第二個流,始終設定為 1000。您可以看到,D-Link 和 Netgear GS105 根本無法應付 60 kB 突發。 GS108 的性能比 GS105 好得多,同時它具有幾乎相同的交換晶片(相同的“系列”,只是端口數量不同,緩衝區稍大一些)。

轉變 緩衝區大小 [kB] 最大流量 1.5kB 突發 最大流量 20kB 突發 最大流量 60kB 突發
Gigablox 堅固型 (VSC7512) 220 825 兆位元/秒 825 兆位元/秒 825 兆位元/秒
Gigablox (RTL8367N-VB-CG) 250 730 兆位元/秒 750 兆位元/秒 790 兆位元/秒
D-Link DIS-100G-5W (QCA8337N-AL3C) 128 110Mbps 1Mbps 每次突發都會遺失資料包
合勤 XGS 1210-12 (RTL9302B) 1500 800Mbps 830 兆位元/秒 830 兆位元/秒
網件 GS310-TP (RTL8380M) 520 830 兆位元/秒 830 兆位元/秒 835 兆位元/秒
網件 GS308T (RTL8380M) 520 830 兆位元/秒 835 兆位元/秒 835 兆位元/秒
網件 GS108 v3 (BCM53118) 192 630 兆位元/秒 660 兆位元/秒 710 兆位元/秒
網件 GS105E (BCM53114) 128 120Mbps 1Mbps 每次突發都會遺失資料包
Renkforce RF-4270245 740 兆位元/秒 760 兆位元/秒 800Mbps
米克羅蒂克 RB260GS (AR8327) 128 835 兆位元/秒 835 兆位元/秒 835 兆位元/秒
瞻博網路 EX2300 4GB? 800Mbps 830 兆位元/秒 830 兆位元/秒

(這個問題已遷移自https://networkengineering.stackexchange.com/questions/78529/how-to-simulate-what-happens-inside-the-packet-buffer-of-a-simple-switch它被標記為偏離主題)。

相關內容