LWIP協(xié)議棧的分析和設(shè)計(jì)_第1頁(yè)
LWIP協(xié)議棧的分析和設(shè)計(jì)_第2頁(yè)
LWIP協(xié)議棧的分析和設(shè)計(jì)_第3頁(yè)
LWIP協(xié)議棧的分析和設(shè)計(jì)_第4頁(yè)
LWIP協(xié)議棧的分析和設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《計(jì)算機(jī)網(wǎng)絡(luò)與控制》論文《計(jì)算機(jī)網(wǎng)絡(luò)與控制》論文LwIP協(xié)議棧的分析《計(jì)算機(jī)網(wǎng)絡(luò)與控制》論文《計(jì)算機(jī)網(wǎng)絡(luò)與控制》論文LwIP協(xié)議棧的分析--#low-level"core"/"callback"or"raw"API.是一種低水平的、基于回調(diào)函數(shù)的API(后面直接稱RAWAPI),整個(gè)通信流程依靠協(xié)議棧里的回調(diào)函數(shù)來(lái)驅(qū)動(dòng)。因?yàn)榛卣{(diào)函數(shù)的調(diào)用不能超越任務(wù)邊界,這樣應(yīng)用程序和TCP/IP協(xié)議棧必須運(yùn)行在同一個(gè)任務(wù)中,而用戶不再增加其它的任務(wù),應(yīng)用程序直接在TCP/IP任務(wù)空間運(yùn)行。因此,就要避免調(diào)用諸如掛起、等待的函數(shù),以防止整個(gè)TCP/IP任務(wù)被掛起。RAWAPI接口函數(shù)不僅在程序代碼的執(zhí)行時(shí)間上更快,而且在運(yùn)行中它也占用更少的內(nèi)存資源。唯一的缺點(diǎn)是應(yīng)用程序的編寫比較困難,并且代碼較難理解。盡管如此,在CODE和RAM都較小的嵌入式系統(tǒng)中,這也是我們優(yōu)先考慮采用的方法。higher-level"sequential"API/LWIPAPI是一種高水平的、連續(xù)的API,LWIPAPI為我們提供了一種通用的方法,它與BSD標(biāo)準(zhǔn)的socketAPI非常相似,程序的執(zhí)行過(guò)程同樣是基于"open-read-write-close"模型的,但操作相對(duì)低級(jí)。API不需要在應(yīng)用程序和協(xié)議棧之間復(fù)制數(shù)據(jù),因?yàn)閼?yīng)用程序可以巧妙的直接處理內(nèi)部緩沖區(qū)。(充分利用LwIP的內(nèi)部結(jié)構(gòu)以實(shí)現(xiàn)其設(shè)計(jì)目標(biāo))因?yàn)锽SDSocketAPI易于理解,并且很多應(yīng)用程序?yàn)樗鴮?,所以LwIP保留一個(gè)BSDSocket兼容層是很有用的。盡管LwIP與BSDSocketAPI非常相似,但是它們之間仍然存在著值得注意的區(qū)別,使用BSDSocketAPI的應(yīng)用程序不必知道普通文件和網(wǎng)絡(luò)連接的差別,而使用LwIPAPI的應(yīng)用程序就必須知道正在使用的是一個(gè)網(wǎng)絡(luò)連接。它不適合于應(yīng)用在比較小的嵌入式系統(tǒng)中,因?yàn)樗膶?shí)現(xiàn)要求應(yīng)用程序必須支持多線程。從本質(zhì)上講,TCP/IP協(xié)議棧的通信過(guò)程是事件驅(qū)動(dòng)的,因此‘TCP/IP的代碼和用戶應(yīng)用程序的代碼,應(yīng)該在不同的線程里面。當(dāng)然,在不同的應(yīng)用程序中,這兩種API我們可以同時(shí)采用。實(shí)際上,sequentialAPI就是一種利用RAWAPI來(lái)實(shí)現(xiàn)的一種屬于協(xié)議本體的應(yīng)用程序。BSDSocketAPIBSDSocketAPI在連續(xù)的內(nèi)存區(qū)域處理數(shù)據(jù)非常便于編寫應(yīng)用程序。因?yàn)閼?yīng)用程序內(nèi)的數(shù)據(jù)處理通常是在這樣的連續(xù)內(nèi)存區(qū)域內(nèi)進(jìn)行的。但是,對(duì)于LwIP,采用這種機(jī)制不具備任何優(yōu)勢(shì)。特別是BSDSocket需要將要發(fā)送的數(shù)據(jù)從應(yīng)用程序復(fù)制到TCP/IP協(xié)議棧的內(nèi)部緩沖區(qū)。復(fù)制數(shù)據(jù)的原因是應(yīng)用程序與TCP/IP協(xié)議棧通常駐留在不同的受保護(hù)空間。大多數(shù)情況是應(yīng)用程序是一個(gè)用戶進(jìn)程,而TCP/IP協(xié)議棧則駐留在操作系統(tǒng)內(nèi)核。通過(guò)避免額外的復(fù)制操作,API的性能可以大幅度提升。同樣,為了復(fù)制數(shù)據(jù),系統(tǒng)還需要為此分配額外的內(nèi)存,這樣每一個(gè)信息包都需要使用雙倍的內(nèi)存。雖然LWIP提供了一些接口函數(shù),但操作相對(duì)低級(jí),使用起來(lái)不方便,不利用于后續(xù)開(kāi)發(fā)。由于BSDSOCKETAPI很容易理解且己經(jīng)有很多人為它寫過(guò)應(yīng)用程序,且應(yīng)用程序使用BSDSOCKETAPI時(shí)候不需要知道普通文件和網(wǎng)絡(luò)連接之間的差別,所以為了便要理解和應(yīng)用,LWI提供了基于LWIP接口函數(shù)的BSDSOCKETAPI,但沒(méi)有任何容錯(cuò)機(jī)制,沒(méi)有select()與poll()函數(shù)。以下就一些重要的SOCKETAPI函數(shù)做一介紹。(1)socket。函數(shù)用于創(chuàng)建網(wǎng)絡(luò)通信的套接字,并返回該套接字的整數(shù)描述符。函數(shù)原型為intsocket(intdomain,inttype,intprotocol),其中參數(shù)domain代表協(xié)議族或地址族,對(duì)于TCP/IP為PF_INET或AF_INET;type代表服務(wù)類型,對(duì)于TCP為SOCK_STREAM(流式),對(duì)于UDP為SOCK—DGRAM(數(shù)據(jù)報(bào));protocol代表使用的協(xié)議號(hào),對(duì)于TCP為IPPROTO_TCP,對(duì)于UDP為IPPROTO_UDP,傳遞0表示根據(jù)協(xié)議族和給定的服務(wù)類型選擇默認(rèn)的協(xié)議號(hào)。若socket成功返回,返回大于或等于0的有效套接字描述符,返回一1表示發(fā)生了差錯(cuò)。⑵bind()函數(shù)將BSDsocket綁定到本地(本機(jī))地址上。在調(diào)用bind()時(shí),本地IP地址和端口號(hào)將被指定。⑶connect()允許調(diào)用者為先前創(chuàng)建的套接字指明遠(yuǎn)程端點(diǎn)的地址。如果套接字使用TCP,該函數(shù)就使用三次握手建立連接;如果套接字使用UDP,則僅指明遠(yuǎn)程端點(diǎn),但不向它傳送任何數(shù)據(jù)報(bào)。⑷listen()使套接字處于被動(dòng)狀態(tài)(即準(zhǔn)備接受傳入的連接請(qǐng)求)。在服務(wù)器處理某個(gè)請(qǐng)求時(shí),協(xié)議軟件應(yīng)將后續(xù)收到的請(qǐng)求排隊(duì)‘listen也設(shè)置排隊(duì)的連接請(qǐng)求的數(shù)目.listen只用于TCP套接字。⑸accept()函數(shù)被用來(lái)等待TCPsocket口上的輸入連接。在此之前,這個(gè)TCPsocket口通過(guò)調(diào)用listen()已經(jīng)被設(shè)置成監(jiān)聽(tīng)狀態(tài),對(duì)accept()調(diào)用一直被阻塞,直到與遠(yuǎn)程主機(jī)建立連接。⑹send()數(shù)在UDP和TCP兩種連接中被用來(lái)發(fā)送數(shù)據(jù)。在調(diào)用send()前,數(shù)據(jù)接收器必須被設(shè)置成正在使用connect。,應(yīng)用程序在調(diào)用send()后可以直接修改發(fā)送的數(shù)據(jù)。sendto()調(diào)用函數(shù)與send()調(diào)用函數(shù)類似,但是在參數(shù)調(diào)用中他們?cè)试S應(yīng)用程序指定數(shù)據(jù)接收器。sendto()僅能在UDP連接中使用,實(shí)現(xiàn)這功能要使用netconnconnect()來(lái)設(shè)置數(shù)據(jù)包接收器。如果以前socket口被連接,必須重設(shè)遠(yuǎn)程IP地址和端口號(hào)。⑻write()調(diào)用函數(shù)通過(guò)連接來(lái)發(fā)送數(shù)據(jù)并且能在UDP和TCP連接中使用。參考文獻(xiàn)W.RichardStevens著.TCP/IP詳解卷1:協(xié)議.范建華等譯.機(jī)械工業(yè)出版社.2000GaryR.Wright,W.RichardStevens著.TCP/IP詳解卷2:實(shí)現(xiàn)..陸雪瑩等譯.機(jī)械工業(yè)出版社.2000W.RichardStevens著.TCP/IP詳解卷三:TCP事務(wù)協(xié)議,HTTP,NNTP和UNIX域協(xié)議.胡谷雨,昊禮發(fā)等譯.機(jī)械工業(yè)出版社.2000JanAxelson.編著.嵌入式Ethernet和internet通信設(shè)計(jì)技術(shù).駱麗,張?jiān)缽?qiáng),歐小龍譯.北京:北京航空航天大學(xué)出版社,2006.1焦海波,劉健康.編著.嵌入式網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì)—基于AtmelARM7,北京:北京航空航天大學(xué)出版社,2008.4AdamDunkels.DesignandImplementationofthelwIPTCP/IPStack,Feb20,2001⑹Jea.Labrosse.編著.嵌入式實(shí)時(shí)操作系統(tǒng)uC/OS-II(第二版).邵貝貝等譯.北京:北京航空航天大學(xué)出版社,2003.5⑺DouglassE.Comer,DavidL.Stevens著.用TCP/IP進(jìn)行網(wǎng)際互連第二卷一設(shè)計(jì)、實(shí)現(xiàn)與內(nèi)核:ANSIC版(第三版).張娟王海等譯北京:電子工業(yè)出版社,2008.10BSDSocketsInterfaceProgrammer'sGuideEdition6.HPCompanyGuidoMoritz,SteffenPruter,WebservicesonDeeplyEmbeddedDeviceswithReal-TimeProcessingProconETFA'08.IEEE邱書(shū)波,陳偉,基于ARM的輕量級(jí)TCP/IP協(xié)議棧的研究及移植計(jì)算機(jī)應(yīng)用與軟件,2009.8王海波,基

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論