最近又重寫TCP部分APP程序,其中發(fā)現(xiàn)幾處問題第一處是網(wǎng)卡的吞吐量和應(yīng)用程序所能達到的最高效率處理率的沖突問題,這個問題毫無疑問在網(wǎng)絡(luò)空閑時數(shù)據(jù)輸入進來,中斷繁忙的進出,BUF頻繁的分配釋放,由于使用了堆內(nèi)存,所以效率比構(gòu)建的結(jié)構(gòu)內(nèi)存要快,然后輸入?yún)f(xié)議棧,那么這樣下來協(xié)議棧要處理的包就遠遠的超過了CPU時間片給他的時間導(dǎo)致了數(shù)據(jù)的擠壓,以至于有些響應(yīng)出問題,重發(fā)和轉(zhuǎn)發(fā)包的問題。這里應(yīng)該加一層過濾,不屬于自己的統(tǒng)統(tǒng)丟掉。有的硬件有數(shù)據(jù)過濾,有的沒有需要軟件構(gòu)成。這樣可以大大的屏蔽不需要的報文處理上,減少CPU負擔(dān)。這是提速A+第二處是網(wǎng)卡驅(qū)動問題,首先你應(yīng)該有一個很穩(wěn)定的網(wǎng)卡驅(qū)動,也就是要在拋去協(xié)議棧的時候測試那段DEV代碼,看中斷收發(fā),收發(fā)可以構(gòu)建一些簡單的包,比如ARP,和廣播包等!這是B+。再者就是TCP的SYN信號處理,這信號對程序員來說陌生!那是因為沒看TCPIP協(xié)議,SYN發(fā)送始于socket 的connect host ip ,然后由于TCP的控制塊控制狀態(tài)變?yōu)镾YNSEND,此時可能鏈接不成功,不在線或者故障阻塞等,不要試圖關(guān)閉,等待TCP SEND SYN ==MAXSYN,這個間隔在1左右,或者更短一些,發(fā)送完畢之后host還是不在,則關(guān)閉鏈接,這時候上層關(guān)閉端口才是正確的�。�!這里處理不好也是要命的!現(xiàn)象時bind端口不成功,表面上看是綁定的不成功其實深層的原因是過早的關(guān)閉了控制塊,殊不知協(xié)議棧并不會按照你的意愿去做,因為你違背了他的意愿,他還有任務(wù)沒有完成呢,所以他會掛起這個繼續(xù)等待,這個等待就長了,于是乎你在建立一個則增加一堆內(nèi)存,在一次往復(fù),最終內(nèi)存爆掉或者協(xié)議棧用完他的堆。再也不能工作為止!GAME OVER!