
我在 Windows 7 PC 上遇到奇怪的問題:我嘗試設置 VLC 媒體播放器以通過 RTP 流式傳輸音頻,但是我發現大量出站 UDP 數據包丟失。
經過一些調試,我觀察到,我的PC 絕對可以很好地從另一台PC 接收相同的流數據包(沒有入站UDP 丟失),但是當我的PC 設置為傳輸流時,我的UDP 數據包丟失超過26%。即使使用直的 CAT5 電纜連接 PC。
從 Wireshark 的一些測試來看,我的電腦似乎根本不發送這些資料包。有些東西阻止了它們的發送。可能是什麼原因造成的?我沒有任何線索。
感謝您的任何提示。
//編輯:我忘了添加,流是單播還是多播並不重要。結果是一樣的。
答案1
最後,我找到了解決方案:正如我一開始所擔心的那樣,問題確實出在Windows上。由於某些原因,預設情況下 IP 堆疊僅使用 8 kByte 緩衝區。 (很搞笑,不是嗎?)這對於 VLC 產生的幾 kB UDP 突發來說還不夠。
有可能使用登錄項目來增加 IP 堆疊傳送/接收緩衝區大小。由於某種原因,我的機器完全丟失了這些鍵,因此大小是預設的。
若要變更傳送/接收緩衝區大小,請更新(或建立)此登錄項目。在我的例子中,設定 64 kB 緩衝區大小解決了這個問題。現在沒有 UDP 出站遺失。
[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Afd \Parameters]
DefaultReceiveWindow = 65536
DefaultSendWindow = 65536
如果您需要建立的話,這兩個值都是 DWORD(32 位元)。
(我還修改了網路控制器中的緩衝區大小設置,但這沒有任何結果。)