您好,登錄后才能下訂單哦!
問題來源于日志信息,在這里總結一下,后續在補充新的內容。
在鏈路層,由以太網的物理特性決定了數據幀的長度為(46+18)---(1500+18),其中的18是鏈路層的首部和尾部18Bytes,也就是說數據幀的內容最大為1500(不包括幀頭和幀尾),事實上,這個1500就是網絡層的IP數據報的長度限制,即MTU(Maximum Transmission Unit)為1500;
在網絡層,因為IP包的首部要占用20字節,所以這的MTU為1500-20=1480,這個1480就是用來存放TCP傳來的TCP報文段或者UDP傳來的UDP數據報的;
在傳輸層,對于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函數發送數據時,如果發送數據長度大于該值,則函數會返回錯誤。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。