1. 程式人生 > >UDP數據包的大小

UDP數據包的大小

ip 層 網絡

問題來源於日誌信息,在這裏總結一下,後續在補充新的內容。


  1. 在鏈路層,由以太網的物理特性決定了數據幀的長度為(46+18)---(1500+18),其中的18是鏈路層的首部和尾部18Bytes,也就是說數據幀的內容最大為1500(不包括幀頭和幀尾),事實上,這個1500就是網絡層的IP數據報的長度限制,即MTU(Maximum Transmission Unit)為1500;  

  2. 在網絡層,因為IP包的首部要占用20字節,所以這的MTU為1500-20=1480,這個1480就是用來存放TCP傳來的TCP報文段或者UDP傳來的UDP數據報的;

  3. 在傳輸層,對於UDP包的首部要占用8字節,所以這的MTU為1480-8=1472,也就是用戶可以使用的部分;

     
    所以,在應用層,你的Data最大長度為1472。 (當我們的UDP包中的數據多於MTU(1472)時,發送方的IP層需要分片fragmentation進行傳輸,而在接收方IP層則需要進行數據報重組,由於UDP是不可靠的傳輸協議,如果分片丟失導致重組失敗,將導致UDP數據包被丟棄)。  


因此,在普通局域網絡環境下,使用UDP傳輸的時候,建議將UDP的數據控制在1472以下比較好。


IP數據包的最大長度為65535,因為在IP包頭中用2個字節來描述報文長度,2個字節所能表示的大小就是65535;


就具體函數而言:

用UDP協議發送時,用sendto函數最大能發送數據的長度為:65535- IP頭(20) - UDP頭(8)=65507字節。用sendto函數發送數據時,如果發送數據長度大於該值,則函數會返回錯誤。


本文出自 “七百七十七快” 博客,請務必保留此出處http://10324228.blog.51cto.com/10314228/1983469

UDP數據包的大小