基于OMAP平臺(tái)的TCP/IP開發(fā)及實(shí)現(xiàn)
處理TCP層函數(shù),判斷接收包的類型,如果是TCP包,則調(diào)用TCP接收函數(shù),TCP接收函數(shù)用指定條件進(jìn)行過(guò)濾,找到該包所屬的連接或完成一個(gè)新連接的被動(dòng)打開,根據(jù)TCP的狀態(tài)轉(zhuǎn)換則完成11種狀態(tài)的轉(zhuǎn)移,并且實(shí)現(xiàn)了多路數(shù)據(jù)同時(shí)、雙向的傳輸。
本文引用地址:http://2s4d.com/article/247106.htmTCP的發(fā)送函數(shù)包括主動(dòng)打開、主動(dòng)關(guān)閉(由上層調(diào)用完成新連接的主動(dòng)打開,或主動(dòng)關(guān)閉一個(gè)已建立的連接)和發(fā)送控制包(用于TCP連接的建立與終止,會(huì)在TCP接收函數(shù)中調(diào)用,從而實(shí)現(xiàn)TCP的轉(zhuǎn)換)三個(gè)函數(shù)。
TCP層還實(shí)現(xiàn)了兩個(gè)定時(shí)器,TCP重傳定時(shí)器函數(shù)可提供服務(wù)可靠性的有效保障;TCP?;疃〞r(shí)器能夠避免資源的浪費(fèi)。
3.2 程序特點(diǎn)分析
(1)簡(jiǎn)單性:4.4BSD-Lite版的完整TCP/IP內(nèi)核實(shí)現(xiàn)大約有15 000行,而本程序源代碼約有1 400行,更適合嵌入式系統(tǒng)的應(yīng)用。
(2)可重用性:本程序分層清晰。對(duì)于不同的嵌入式系統(tǒng),可能使用的CPU和以太網(wǎng)卡不同,這就需要針對(duì)其特點(diǎn)的以太網(wǎng)層設(shè)計(jì),而ARP、IP、UDP、TCP則不需要改動(dòng)。
(3)可拓展性:TCP/IP協(xié)議是底層網(wǎng)絡(luò)協(xié)議,本程序留有很好的接口,可在其上構(gòu)件更高層的網(wǎng)絡(luò)協(xié)議,包括H.323協(xié)議、ftp、telnet。
4 在OMAP平臺(tái)上的移植
4.1 單片以太網(wǎng)控制器LAN91C96
LAN91C96是SMSC公司生產(chǎn)的專門用于嵌入式產(chǎn)品的10Mbps以太網(wǎng)控制器,具有性能優(yōu)良,功耗低及尺寸小的特點(diǎn),如圖4所示。
6KB的RAM:用來(lái)存放數(shù)據(jù)包。
MMU:對(duì)RAM進(jìn)行有效管理,為接收和發(fā)送包在RAM中分配存儲(chǔ)空間。
ARBITE:使MMU和RAM與CPU、CSMA很好地連接。
CSMA/CD模塊:集成了IEEE 802.3 MAC層協(xié)議,負(fù)責(zé)監(jiān)聽(tīng)網(wǎng)絡(luò)情況和地址過(guò)濾。若目的地址是LAN91C96的地址、廣播地址或多播地址,則接收此數(shù)據(jù)包,否則拋棄。
ENDEC:負(fù)責(zé)與10Mbps為以太網(wǎng)物理媒體的連接。
LAN91C96 采用地址映射方式,通過(guò)訪問(wèn)Innovator為的指定地址對(duì)其存儲(chǔ)器訪問(wèn)。LAN91C96的寄存器在Innovator內(nèi)存中的地址分配為:0x08000300-0x0800030F。寄存器共有4組(BANK0-BANK3),使用相同的地址,通過(guò)BANK_SELECT寄存器選擇。
4.2 移植過(guò)程
先實(shí)現(xiàn)該網(wǎng)卡芯片的驅(qū)動(dòng)程序,再用它替換PC模擬器的以太網(wǎng)層,程序驅(qū)動(dòng)主要包括以下三個(gè)部分:
(1)初始化:主要為L(zhǎng)an91C96的各寄存器填入正確的初始值使其正常工作。
(2)接收:如圖5所示,由CSMA(載波偵聽(tīng)模塊)接收到符合地址要求的后,MMU(存儲(chǔ)器管理單元)為其請(qǐng)求在RAM中分配存儲(chǔ)空間并分配一個(gè)編號(hào),DMA 將其存入RAM。接著在接收數(shù)據(jù)的前面封裝STATUS的化COUNT字節(jié)信息,如果CRC檢測(cè)正確,則將其編號(hào)放入接收FIFO,如果接收FIFO不為空,則RCV_INT(接收中斷標(biāo)識(shí))被設(shè)置。檢查接收中斷寄存器狀態(tài),如果就接收中斷,對(duì)應(yīng)其編號(hào),上層協(xié)議便可以取出數(shù)據(jù)了,取出后,將該數(shù)據(jù)編號(hào)從 FIFO中清除。
狀態(tài)字可以從RCR寄存器中讀取,它反應(yīng)了接收過(guò)程出現(xiàn)的各種措施,如CRC錯(cuò)誤、接收幀過(guò)長(zhǎng)等,數(shù)據(jù)包的編號(hào)從FIFO_PORTS寄存器中獲得,而數(shù)據(jù)指針可從POINTER寄存器中獲得,數(shù)據(jù)信息從DATA寄存器中得到,根據(jù)這些信息將接收數(shù)據(jù)包復(fù)制到CPU內(nèi)存,供上層使用,接收函數(shù)的主要流程如圖6。
(3)發(fā)送:圖7描述了發(fā)送數(shù)據(jù)包FIFO中的排隊(duì)過(guò)程,首先MMU在RAM中分配一定字節(jié)的存儲(chǔ)空間,然后,將分配結(jié)果寄存器中的編號(hào)放入PNR 寄存器,寫數(shù)據(jù)指針寄存器POINTER并將上層數(shù)據(jù)封裝后拷入DATA寄存器,根據(jù)其編號(hào)放入發(fā)送FIFO,排隊(duì)的包將自動(dòng)發(fā)出,發(fā)出包的編號(hào)接著進(jìn)入發(fā)送完成FIFO。如果發(fā)送成功,則存儲(chǔ)空間自動(dòng)釋放;否則釋放存儲(chǔ)空間并將其重新排隊(duì)。
5 實(shí)驗(yàn)結(jié)果
5.1 內(nèi)存資源占用量
運(yùn)行該TCP/IP協(xié)議棧需要3MB內(nèi)存,而Innovator體32MB SDRAM 和32MB Flash,內(nèi)存占用率為:3M/64M=4.7%,完全適用于嵌入式系統(tǒng)。
5.2 數(shù)據(jù)傳輸可靠性
TCP 利用以下機(jī)制糾錯(cuò)。數(shù)據(jù)的傳輸過(guò)程中的誤碼:檢驗(yàn)和機(jī)制與重傳機(jī)制,數(shù)據(jù)的重復(fù),在接收端會(huì)自動(dòng)舍棄已經(jīng)接收過(guò)的數(shù)據(jù)包,并且不發(fā)ACK,故不會(huì)發(fā)生一個(gè)數(shù)據(jù)包接收多次的情況,數(shù)據(jù)包的丟失,接收端在接收完一段數(shù)據(jù)后,會(huì)計(jì)算下一個(gè)預(yù)期數(shù)據(jù)的序號(hào),如果不符合就不發(fā)ACK,從而導(dǎo)致發(fā)端重發(fā),避免了數(shù)據(jù)包的丟失,經(jīng)測(cè)試,在未發(fā)生擁塞情況下,傳輸?shù)恼`碼率幾乎為0。
5.3文件最大平均傳輸速率
下面就本程序所實(shí)現(xiàn)的利用TCP進(jìn)行文件傳輸功能,給出不同情況下的最大傳輸速率,實(shí)驗(yàn)環(huán)境為10Mbps以太網(wǎng)。
理想狀態(tài)下的理論最大吞吐量:假定發(fā)送方傳輸兩個(gè)背對(duì)背、滿長(zhǎng)度的TCP數(shù)據(jù),接收方為其發(fā)出兩個(gè)ACK,每包中用戶數(shù)據(jù)量為1460位,總數(shù)據(jù)量為1538位,故最大的用戶數(shù)據(jù)吞吐量為:
本實(shí)驗(yàn)測(cè)得文件的平均傳輸速率隨著TCP連接數(shù)的增多有如圖8所示的曲線變化,前半段隨著連接數(shù)的增加成線性增長(zhǎng),后半段由于出現(xiàn)了網(wǎng)絡(luò)擁塞,整體的平均速率反而有所下降。
實(shí)驗(yàn)結(jié)果與理論最大吞吐量有所差距,原因在于:
(1)理論上只是一種理想的狀態(tài),現(xiàn)實(shí)中難以達(dá)到。
(2)受CPU處理速度及文件傳輸過(guò)程的讀、寫文件操作的限制。
(3)本程序采用的數(shù)據(jù)傳輸機(jī)制是當(dāng)收到上一個(gè)包的ACK之后再發(fā)送下一個(gè)數(shù)據(jù)包,這樣避免了對(duì)接收數(shù)據(jù)的排序,提高了可靠性,但數(shù)據(jù)的傳輸速度會(huì)受到制約。
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論