您好,登錄后才能下訂單哦!
在APUE p610頁(yè),send在發(fā)送有邊界的包時(shí)(UDP)時(shí),超過一定大小后會(huì)報(bào)錯(cuò),emsgsize;無(wú)邊界的流式包時(shí),阻塞模式下會(huì)發(fā)完所有數(shù)據(jù)后返回,或者出錯(cuò)返回。
下面是我對(duì)上面話的理解
udp 傳送大包
因udp協(xié)議本身是不可靠的,不提供超時(shí)重傳等機(jī)制,只需要在application中有數(shù)據(jù)緩存buff,在內(nèi)核內(nèi)不需要緩存需要發(fā)送的數(shù)據(jù),SO_SENDBUF參數(shù)調(diào)節(jié)的只是能發(fā)送的最大數(shù)據(jù)包,如果application發(fā)送的數(shù)據(jù)包大于這個(gè)值,則報(bào)EMSGSIZE,
TCP 發(fā)送緩存
TCP號(hào)稱可靠協(xié)議,有超時(shí)重傳機(jī)制,這時(shí)內(nèi)核中需要保存已經(jīng)發(fā)送出去但未收到確認(rèn)的數(shù)據(jù)的副本,也就是發(fā)送緩存(內(nèi)核send buffer),其大小有限制,
可以通過:sysctl -a|grep net.ipv4.tcp_wmem 查看,這是測(cè)試機(jī)的輸出結(jié)果,其中4096 是最小值,16384是默認(rèn)值,4194304是最大值
net.ipv4.tcp_wmem = 4096 16384 4194304
3. TCP MSS
MSS,max segment size
TCP是流式協(xié)議,send函數(shù)中參數(shù)大小理論上是不受限制(受進(jìn)程空間限制),當(dāng)發(fā)送的數(shù)據(jù)包大于內(nèi)核中發(fā)送緩存大小時(shí),分多次發(fā)送,每次發(fā)送MSS(max segment size)大小,
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。