網絡編程之UDP中一個包的大小最大能多大


讀書筆記:here

結論1:局域網環境下,建議將UDP數據控制在1472字節以下

一定要知道

因為鏈路層的傳輸單元(MTU)是1500字節,1500字節中並不包含鏈路層的首尾18個字節。1500字節是鏈路層的數據區。 udp數據包就是放在這個數據區中,
網絡層是數據鏈路層的上層,所以,網絡層IP數據報長度就是1500字節。 這1500字節包含了IP數據報首部+IP數據報的數據區。 1500-20=1480,這1480的長度專門存放TCP傳來的數據報: TCP或者UDP數據報。
由上可知,UDP數據報的長度為1480字節(含有報頭),而UDP首部占有8個字節,故UDP的數據區長度為1472字節(1480-8=1472).

注意,上面這些都是理論數據

丟包或者重組

因為UDP不保證數據的可靠性。那么,當傳給UDP數據區的長度大於1472時,此時,IP數據報的長度已經大於1500字節。這時,IP層就需要將這個數據包分片發送並在接收端重組。 但是,如果分片傳輸的過程中出現丟包,怎么處理? 比如,IP層需要將一個2000字節的數據包分為兩個包A和B發出,接收端沒有收到B僅收到A。那么,IP層將會丟棄整個數據包,當然也就不會有重組了。

結論2:Internet編程時,建議將UDP數據控制在548字節以下

網絡中的設備繁多,可能設定的傳輸控制單元(MTU)的大小也不盡相同。這樣,同一段數據經歷不同的設備,設備需要做很多繁瑣的工作。
根據Internet的協議,MTU設置576字節。 實際中,我們應該盡量控制UDP數據報中的數據區的長度為548(576-8(首部長度)=548)字節以下。

unix網絡編程第一卷里說:ipv4協議規定ip層的最小重組緩沖區大小為576!所以,建議udp包不要超過這個大小,而不是因為internet的標准MTU是576!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM