簡體   English   中英

無法使用 C# UdpClient 使用 Windows Build 1809 發送大於 MTU 的 UDP 數據包

[英]Unable to send UDP packets larger than the MTU with Windows Build 1809 using C# UdpClient

下面的簡短版本 - 在運行 Windows 的 Build 1809 時,我們似乎無法成功發送大於 1472 字節的 UDP 數據包,盡管它在以前的版本中工作正常。

我們有一個現有的 C# 應用程序(實際上是一組應用程序),它運行在本地有線網絡上,該網絡定期發送 UDP 數據包以將狀態傳達給網絡上不同計算機上的其他應用程序。 其中一些數據包很小,但有些相當大,接近 UDP 的 64k 限制。 此應用程序是使用 .NET 4.5.1 用 C# 編寫的,並使用 UdpClient 類來廣播和接收廣播。 在使用 Windows 10 build 1809 / Windows Server 2019 build 1809 進行測試之前,一切正常 - 我們發送和接收更大的數據包沒有問題。 但是,從build 1809開始,我們似乎無法再成功發送大數據包。 以下是我們所做的一些測試:

系統 1:Windows 10 Build 1803(MTU 為 1500)

系統 2:Windows 10 Build 1809(MTU 為 1500)

我編寫了一個測試程序,它使用 UdpClient 發送一個小(200 字節左右)和大(8000 字節左右)UDP 數據包,同時還偵聽這些數據包。 這是我從每個系統發送時發生的情況:

- 從系統 1 發送:

-System 1 sees both packets

-System 2 sees both packets

- 從系統 2 發送:

 -System 1 sees only the small packet

 -System 2 sees both packets

這種情況每次都會發生 - 大數據包永遠不會成功到達。 進一步的測試表明,幻數是 1472 字節。 這或更少的工作,而且更多的是失敗。 這就是為什么我懷疑帶有碎片化/MTU 的東西不能正常工作。 我們以前從未見過這個問題,所以我啟動了 Wireshark 來看看可能會發生什么。 然而,這就是奇怪的地方,在 Build 1809 系統上啟動 Wireshark 突然使它能夠發送數據包,即使我退出 Wireshark。 但是,重新啟動系統會將其恢復到無法成功發送的原始狀態。 我應該注意到,無論它們是否正常工作,我總是在 Wireshark 中看到這些數據包的“分段 IP 協議”在事物的接收端。

我在網上做了一些閱讀,發現基於 UDP 的 RDP 在 Build 1809 中進行了大修,但我沒有看到任何大於 MTU 的 UDP 數據包有問題,我也找不到其他人報告這個特定問題。

很長一段時間以來,我們都沒有對這部分代碼進行任何代碼更改 - 在構建 1809 之前,它適用於 Windows 7、Server 2012R2、Server 2016 和 Windows 10。Build 1809 中是否有一些新的東西需要我們設置一個在某處標記或在網絡適配器上配置某些東西? 我不知道 Wireshark 在啟動時做了什么,但它似乎以某種方式“修復”了一些東西,所以如果有人知道這可能是什么,這也可能有所幫助。

去年年初,我最終就此事聯系了微軟,並一直推動直到他們承認這是一個問題。 該問題影響 1809、1903、1909、2004 和 20H2。 他們終於在“2021-03 Windows 10 累積更新”中公開發布了該修復程序。 修復可用於 1903 及更高版本。 我已經確認此更新確實為我們解決了問題。

請參閱: https : //www.catalog.update.microsoft.com/Search.aspx?q=KB5001649

在我可以找到的任何地方都沒有在此 KB 中專門提到它,但這是支持人員給我的版本,並且在應用此更新后已修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM