基于嵌入式TCP/IP軟件體系結(jié)構(gòu)的優(yōu)化設(shè)計(jì)與實(shí)現(xiàn)(06-100)
整序、重發(fā)和窗口控制的實(shí)現(xiàn)
本文引用地址:http://www.ex-cimer.com/article/81179.htm對于嵌入式TCP/IP系統(tǒng),可以使用隊(duì)列緩存的方式來實(shí)現(xiàn)整序、重發(fā)和窗口控制。隊(duì)列的一個(gè)元素指向一個(gè)數(shù)據(jù)包,隊(duì)列的最大長度沒有限制。
對于整序,使用ooSeq隊(duì)列,如果發(fā)現(xiàn)接收的TCP包序號并不是期望的,但序號在接收窗口內(nèi),此時(shí)不能立刻接收這個(gè)包也不應(yīng)丟棄,可先將這個(gè)包放入ooSeq隊(duì)列。當(dāng)期望TCP包被接收后,再查看ooSeq隊(duì)列現(xiàn)在是否有TCP包成為了期望的數(shù)據(jù)包,如果有則將其取出并處理。
對于重發(fā),使用unacked隊(duì)列,每一個(gè)需要被應(yīng)答的TCP數(shù)據(jù)包發(fā)送以后都要放入unacked隊(duì)列,等到被應(yīng)答以后才從隊(duì)列中刪除。TCP重發(fā)定時(shí)只針對unacked隊(duì)列第一個(gè)TCP包,如果定時(shí)超出,重新發(fā)送,重發(fā)次數(shù)超出規(guī)定值,則報(bào)錯(cuò)。
對于窗口控制,使用unsend隊(duì)列,如果發(fā)現(xiàn)對方的窗口過小無法接收這個(gè)數(shù)據(jù)包,則只發(fā)送部分?jǐn)?shù)據(jù),將多余部分放入unsend隊(duì)列,等待對方發(fā)來TCP包通知新的窗口大小時(shí),再次判斷是否可以發(fā)送。如果在unsend隊(duì)列不為空的情況下,需要發(fā)送的數(shù)據(jù)包都應(yīng)插入unsend隊(duì)列。
嵌入式TCP/IP的性能分析
圖5給出了將優(yōu)化設(shè)計(jì)后的TCP/IP移植到ARM9處理器、CS8900A網(wǎng)絡(luò)控制器中,時(shí)鐘頻率為133MHz下,與Internet連接的情況。
系統(tǒng)支持最大發(fā)起連接數(shù)約為380,最大并發(fā)連接率約為170cps。隨著呼叫數(shù)的增加,平均分組到達(dá)也隨之增加,導(dǎo)致網(wǎng)絡(luò)傳輸數(shù)據(jù)的增加,從而最大建立時(shí)間變長。但最小的建立連接時(shí)間基本保持不變,說明系統(tǒng)具有良好的性能。
tcp/ip相關(guān)文章:tcp/ip是什么
評論