日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

一個(gè)nagel算法的例子,Nagle算法( 三 )


UDP不會(huì)出現(xiàn)粘包問(wèn)題 。UDP支持的是一對(duì)多的模式,不會(huì)使用塊的合并優(yōu)化算法,所以接收端的skbuff(套接字緩沖區(qū))采用了鏈?zhǔn)浇Y(jié)構(gòu)來(lái)記錄每一個(gè)到達(dá)的UDP包,在每個(gè)UDP包中就有了消息頭(包含消息來(lái)源地址,端口等信息),接收端很容易就能進(jìn)行區(qū)分處理了 。粘包出現(xiàn)原因出現(xiàn)粘包現(xiàn)象的原因有很多方面,它既可能由發(fā)送方造成的,也可能是由接收方造成的 。
發(fā)送方原因TCP需要盡可能高效和可靠,默認(rèn)采用Nagle算法,發(fā)送方往往要收集到足夠多的數(shù)據(jù)后合并相連的小數(shù)據(jù)包,才發(fā)送一包數(shù)據(jù),這樣接收方就收到了粘包數(shù)據(jù) 。但接收方并不知曉發(fā)送方合并數(shù)據(jù)包,并數(shù)據(jù)包的合并在TCP協(xié)議中是沒有分界線的,就會(huì)導(dǎo)致接收方不能還原其本來(lái)的數(shù)據(jù)包 。接收方原因TCP是基于“流”的 。
網(wǎng)絡(luò)傳輸數(shù)據(jù)的速度可能會(huì)快過(guò)接收方處理數(shù)據(jù)的速度,這時(shí)候就會(huì)導(dǎo)致,接收方在讀取緩沖區(qū)時(shí),緩沖區(qū)存在多個(gè)數(shù)據(jù)包 。在TCP協(xié)議中接收方是一次讀取緩沖區(qū)中的所有內(nèi)容,就不能反映原本的數(shù)據(jù)信息 。粘包情況有兩種:一種是粘在一起的包都是完整的數(shù)據(jù)包;一種是粘在一起的包有不完整的包;不是所有的粘包現(xiàn)象都需要處理如果傳輸?shù)臄?shù)據(jù)為不帶結(jié)構(gòu)的連續(xù)流數(shù)據(jù)(如文件傳輸),就不必把粘連的包分開(簡(jiǎn)稱分包) 。
但實(shí)際工程應(yīng)用中一般為帶結(jié)構(gòu)的數(shù)據(jù),這時(shí)就需要做分包處理 。在處理定長(zhǎng)結(jié)構(gòu)數(shù)據(jù)的粘包問(wèn)題時(shí),分包算法比較簡(jiǎn)單;在處理不定長(zhǎng)結(jié)構(gòu)數(shù)據(jù)的粘包問(wèn)題時(shí),分包算法就比較復(fù)雜 。特別是粘在一起的包有不完整的包的粘包情況,一包數(shù)據(jù)內(nèi)容被分在了兩個(gè)連續(xù)的接收包中,處理起來(lái)難度較大 。實(shí)際工程應(yīng)用中應(yīng)盡量避免出現(xiàn)粘包現(xiàn)象 。為了避免粘包現(xiàn)象,可采取以下幾種措施:(1)發(fā)送方引起的粘包可通過(guò)編程設(shè)置來(lái)避免 。
如:PUSH標(biāo)志是TCP提供了強(qiáng)制數(shù)據(jù)立即傳送的操作指令,TCP軟件收到該操作指令后,就立即將本段數(shù)據(jù)發(fā)送出去,而不必等待發(fā)送緩沖區(qū)滿 。缺點(diǎn):雖然可以避免發(fā)送方引起的粘包,但關(guān)閉了Negle優(yōu)化算法,降低了網(wǎng)絡(luò)發(fā)送效率,影響應(yīng)用程序的性能,一般不建議使用 。(2)接收方引起的粘包,可通過(guò)優(yōu)化程序設(shè)計(jì)、精簡(jiǎn)接收進(jìn)程工作量、提高接收進(jìn)程優(yōu)先級(jí)等措施來(lái)及時(shí)接收數(shù)據(jù),盡量避免出現(xiàn)粘包現(xiàn)象 。
【一個(gè)nagel算法的例子,Nagle算法】缺點(diǎn):只能減少出現(xiàn)粘包的可能性,但并不能完全避免粘包,當(dāng)發(fā)送頻率較高或某個(gè)時(shí)間段數(shù)據(jù)包到達(dá)接收方較快,接收方還是有可能來(lái)不及接收,導(dǎo)致粘包 。(3)由接收方控制,將一包數(shù)據(jù)按結(jié)構(gòu)字段,人為控制分多次接收,然后合并,通過(guò)這種手段來(lái)避免粘包 。缺點(diǎn):應(yīng)用程序的效率較低,對(duì)實(shí)時(shí)應(yīng)用的場(chǎng)合不適合 。一種比較周全的對(duì)策是:接收方創(chuàng)建一預(yù)處理線程,對(duì)接收到的數(shù)據(jù)包進(jìn)行預(yù)處理,將粘連的包分開 。

推薦閱讀