UDP数据包的大小
問題來源于日志信息,在這里總結(jié)一下,后續(xù)在補充新的內(nèi)容。
在鏈路層,由以太網(wǎng)的物理特性決定了數(shù)據(jù)幀的長度為(46+18)---(1500+18),其中的18是鏈路層的首部和尾部18Bytes,也就是說數(shù)據(jù)幀的內(nèi)容最大為1500(不包括幀頭和幀尾),事實上,這個1500就是網(wǎng)絡(luò)層的IP數(shù)據(jù)報的長度限制,即MTU(Maximum Transmission Unit)為1500;
在網(wǎng)絡(luò)層,因為IP包的首部要占用20字節(jié),所以這的MTU為1500-20=1480,這個1480就是用來存放TCP傳來的TCP報文段或者UDP傳來的UDP數(shù)據(jù)報的;
在傳輸層,對于UDP包的首部要占用8字節(jié),所以這的MTU為1480-8=1472,也就是用戶可以使用的部分;
所以,在應(yīng)用層,你的Data最大長度為1472。 (當(dāng)我們的UDP包中的數(shù)據(jù)多于MTU(1472)時,發(fā)送方的IP層需要分片fragmentation進行傳輸,而在接收方IP層則需要進行數(shù)據(jù)報重組,由于UDP是不可靠的傳輸協(xié)議,如果分片丟失導(dǎo)致重組失敗,將導(dǎo)致UDP數(shù)據(jù)包被丟棄)。
因此,在普通局域網(wǎng)絡(luò)環(huán)境下,使用UDP傳輸?shù)臅r候,建議將UDP的數(shù)據(jù)控制在1472以下比較好。
IP數(shù)據(jù)包的最大長度為65535,因為在IP包頭中用2個字節(jié)來描述報文長度,2個字節(jié)所能表示的大小就是65535;
就具體函數(shù)而言:
????用UDP協(xié)議發(fā)送時,用sendto函數(shù)最大能發(fā)送數(shù)據(jù)的長度為:65535- IP頭(20) - UDP頭(8)=65507字節(jié)。用sendto函數(shù)發(fā)送數(shù)據(jù)時,如果發(fā)送數(shù)據(jù)長度大于該值,則函數(shù)會返回錯誤。
轉(zhuǎn)載于:https://blog.51cto.com/10324228/1983469
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: 做梦梦到狐狸精是什么征兆
- 下一篇: oh-my-zsh官方教程