• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            馭風(fēng)萬(wàn)里無(wú)垠

            TCP幾個(gè)小選項(xiàng)引起的“古怪”問(wèn)題

            許久不查T(mén)CP相關(guān)的問(wèn)題,今天下班前被一同事攔下要幫忙,說(shuō)他碰到了奇怪的問(wèn)題。

            拿下wireshark抓到的包一看,半天才明白他所說(shuō)的疑惑是指他每次發(fā)送一個(gè)數(shù)據(jù)包,通信對(duì)端就回了一個(gè)ACK包,由此就直接懷疑是否對(duì)方關(guān)閉連接或者建立新的連接了。

            花了半天功夫,總算解釋清楚ACK包其實(shí)是很正常的數(shù)據(jù)包(帶數(shù)據(jù)的包也有ACK標(biāo)志的,wireshark只不過(guò)是把不帶數(shù)據(jù)的純協(xié)議ACK包在描述信息里邊直接標(biāo)出來(lái)了而已),同事也算是個(gè)很老練的Java高手了,對(duì)這點(diǎn)基本的小問(wèn)題有一些疑義,起初是讓我有點(diǎn)疑惑的。

             

            不過(guò)總算討論清楚了這個(gè)ACK沒(méi)有任何問(wèn)題,本以為他遇到的根本不是問(wèn)題,豈料他又拋出了一個(gè)問(wèn)題:

                       既然ACK不是造成問(wèn)題的癥結(jié),為什么我要發(fā)送三個(gè)數(shù)據(jù)包,只有前一個(gè)的ACK收到之后,下一個(gè)包才能發(fā)的出去?每個(gè)數(shù)據(jù)包的發(fā)送和受到ACK的時(shí)間間隔大于15ms,而他們的系統(tǒng)需求規(guī)定那個(gè)間隔必須小于15ms。

            這個(gè)問(wèn)題算是有點(diǎn)深入一點(diǎn)了,即使認(rèn)為15ms的延遲是正常的TCP協(xié)議棧行為,那么他的三個(gè)包只能順序發(fā)出去就有些詫異了,而且據(jù)說(shuō)是上千個(gè)設(shè)備都是如此規(guī)律,那么這種規(guī)律本身就不正常了。

            首先的懷疑當(dāng)然是TCP的buffer滿了,導(dǎo)致send發(fā)送阻塞,不過(guò)TCP的數(shù)據(jù)內(nèi)容倒是顯示沒(méi)有那個(gè)問(wèn)題,因?yàn)樗l(fā)送的三個(gè)包每個(gè)都只有幾十個(gè)字節(jié)。

            剩下的情況大概只有一種,就是應(yīng)用程序手工設(shè)置了buffer大小,甚至是設(shè)置了SND_BUF為0(其實(shí)只要小于他的最小PDU長(zhǎng)度),導(dǎo)致他的協(xié)議交互變成了“停等協(xié)議”了;因?yàn)槊恳淮伟l(fā)送的時(shí)候,buffer緩沖都不夠用,所以send調(diào)用必然是被阻塞,直到收到前一個(gè)包的ACK數(shù)據(jù)然后才能繼續(xù);不熟悉TCP協(xié)議棧的,看到這種現(xiàn)象,就懷疑是那個(gè)ACK回復(fù)的有問(wèn)題了。

             

            最后他又提出了一個(gè)問(wèn)題,為什么有時(shí)候他一次發(fā)送了三個(gè)包,抓包的時(shí)候只有兩個(gè)?恰巧這又是一個(gè)TCP控制選項(xiàng)的問(wèn)題,鼎鼎大名的“Nagle算法“在底下運(yùn)作的結(jié)果了。

            為了確認(rèn)猜測(cè)不是問(wèn)題,讓他Show了一下代碼,確認(rèn)兩種現(xiàn)象對(duì)應(yīng)的是不同的socket,可惜的是后一個(gè)socket的創(chuàng)建代碼是無(wú)法看到了。

             

            這些小選項(xiàng)引起都是非常基本的TCP協(xié)議棧原理性知識(shí),為何習(xí)慣了Java抽象和自帶類庫(kù)的人會(huì)被這種問(wèn)題產(chǎn)生的表面現(xiàn)象所疑惑?

            posted on 2009-10-19 19:18 skyscribe 閱讀(501) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux

            <2009年6月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            亚洲?V乱码久久精品蜜桃| 久久精品国产99久久久| 久久91这里精品国产2020| 麻豆精品久久久久久久99蜜桃 | 国产99久久久国产精品~~牛| 亚洲AV无码1区2区久久| 欧美久久精品一级c片片| 99久久精品免费看国产一区二区三区| 久久久久无码精品国产不卡| 久久强奷乱码老熟女网站| 精品久久久久中文字| 伊人久久大香线蕉av一区| 久久精品99无色码中文字幕| MM131亚洲国产美女久久| 午夜精品久久久久成人| 久久国产精品无码一区二区三区 | 久久亚洲精精品中文字幕| 亚洲欧美日韩精品久久亚洲区| 日本久久久久久中文字幕| 无码人妻精品一区二区三区久久| 人妻中文久久久久| 热99RE久久精品这里都是精品免费| 精品无码久久久久久久久久| 久久er99热精品一区二区| 精品久久久久久无码专区| 久久人人爽人人爽人人片av高请| 色妞色综合久久夜夜| 久久久久久夜精品精品免费啦| 狠狠色婷婷久久综合频道日韩| 亚洲国产精品无码成人片久久| 无码久久精品国产亚洲Av影片 | 中文国产成人精品久久不卡| 久久精品一区二区三区AV| 精品国产乱码久久久久久人妻| 久久99毛片免费观看不卡| 亚洲人AV永久一区二区三区久久| 97精品依人久久久大香线蕉97| 99久久成人国产精品免费| 亚洲а∨天堂久久精品| 色综合久久久久| 亚洲va国产va天堂va久久|