2012-12-08 100 views
2

我一直在使用UDP進行C#網絡的一些工作。我越來越精細,但需要回答幾個我有問題,根本問題測試:UDP網絡基礎知識

  • 目前我在1〜16000字節的數據包,而根據Wireshark是得到分成發送數據幾個1500字節的數據包(由於最大數據包大小限制),然後在另一端重新組合。

我對理解數據報的權利將在另一端收到完整或根本沒有收到。 IE是一個全部或沒有任何東西。由於數據包丟失,沒有機會結束碎片數據報?

因此,我只需要每個數據報應答,而不是確保我的數據報是< 1500字節和ACK每個?

我看着在很多地方,但似乎有大量的數據包和基礎包之間的差異之間的混亂......

感謝您的幫助!

回答

2

由於數據包丟失,沒有機會結束碎片數據報嗎?

我相信這是真實的:即碎裂和碎片重組由下面UDP協議層處理,即,它是由「IP」層,如果它未能重新組裝分組片段引入到其中將出錯處理數據報(例如,在RFC 792中搜索「片段」)。

http://www.pcvr.nl/tcpip/udp_user.htm#11_5說,

「在目的地IP層執行重新組裝。該目標是使分段和重組透明的傳輸層(TCP和UDP),這是,除了可能的性能下降「。

1

正如您現在可能的16位UDP長度字段表示您可以發送總共65535字節。然而,理論上數據可以是(sizeof(IP Header)+ sizeof(UDP Header))= 65535-(20 + 8)= 65507字節。

但是,這並不意味着所有使用UDP的應用程序都會將此數量的數據作爲示例將DNS數據包限制發送到512字節。這是因爲你沒有收到來自服務器的ACK數據包。這是數據包在網絡中丟失的一個原因(數據包傳輸問題和丟失)。其次,中間節點可以將數據報封裝在另一個協議中,例如IPSEC或其他協議。

對於UDP,沒有ACK數據包,所以在你的情況下,如果底層應用程序使用UDP,你不應該看到任何ACK數據包。其次,一些服務器根據應用程序將它們的大小限制爲最大UDP數據包,所以如果您有從客戶端到服務器的數據傳輸,則應該看到相同的字節,例如512字節。回到wireshark。大多數情況下,源使得請求和目標返回X字節的UDP數據報。

這些鏈接可能是你的問題很好:

  1. Wireshark UDP analysis
  2. RFC 1122(說576是最小最大重組緩衝區大小)
+1

我認爲OP正在討論通過UDP發送應用級ACK。 – ChrisW

+0

是的,我發送自己的ACK作爲一個數據包號碼(uint 16)和一組ack標誌(int32位掩碼中的前32位) –

-1

我說得對理解數據報將在另一端收到或完全收到。 IE是一個全部或沒有任何東西。由於數據包丟失,沒有機會結束碎片數據報?

這是正確的。

因此,我只需要每個數據報的ACK,而不是確保我的數據報是< 1500字節和ACK每個?

我不明白這個問題。您需要確認每個數據報,不管其大小如何,您應該使它們成爲< 1500字節,以便它們不會被分段。否則,如果重複發生碎片並且片段重複丟失,則您可​​能永遠無法傳輸任何特定的數據報。

+0

@downvoter您的解釋請。這裏沒有錯誤。 – EJP