計(jì)算機(jī)專業(yè)畢業(yè)論文_第1頁
計(jì)算機(jī)專業(yè)畢業(yè)論文_第2頁
計(jì)算機(jī)專業(yè)畢業(yè)論文_第3頁
計(jì)算機(jī)專業(yè)畢業(yè)論文_第4頁
計(jì)算機(jī)專業(yè)畢業(yè)論文_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

王雄畢業(yè)論文 ` 學(xué)號(hào)1000017962100 密級(jí)________________武漢大學(xué)畢業(yè)論文Linux下HTTP服務(wù)器設(shè)計(jì)院(系)名稱:計(jì)算機(jī)專業(yè)名稱:計(jì)算機(jī)科學(xué)技術(shù)學(xué)生姓名:王雄指導(dǎo)教師:張文濤

鄭重聲明本人呈交的學(xué)位論文,是在導(dǎo)師的指導(dǎo)下,獨(dú)立進(jìn)行研究工作所取得的成果,所有數(shù)據(jù)、圖片資料真實(shí)可靠。盡我所知,除文中已經(jīng)注明引用的內(nèi)容外,本學(xué)位論文的研究成果不包含他人享有著作權(quán)的內(nèi)容。對(duì)本論文所涉及的研究工作做出貢獻(xiàn)的其他個(gè)人和集體,均已在文中以明確的方式標(biāo)明。本學(xué)位論文的知識(shí)產(chǎn)權(quán)歸屬于培養(yǎng)單位。 本人簽名:王雄日期:2012/04/19目錄32424摘要 v132Abstract vi22788前言 vii23417第一章緒論 1321721.1課題背景 1291961.2課題研究的目的和意義 115599第二章HTTP服務(wù)器的相關(guān)理論基礎(chǔ) 3310842.1Linux系統(tǒng)簡(jiǎn)介 3278942.2TCP/IP協(xié)議分析 4220232.2.1TCP/IP協(xié)議概述 4214272.2.2網(wǎng)絡(luò)層協(xié)議(IP協(xié)議) 5256662.2.3傳輸層協(xié)議(TCP和UDP) 7146702.3Linux下網(wǎng)絡(luò)編程介紹 9316612.3.1Socket簡(jiǎn)介 10120252.3.2Socket創(chuàng)建 10105122.3.3Socket配置 11136402.3.4建立連接 13158272.3.5數(shù)據(jù)傳輸 1416782.3.6結(jié)束傳輸 1519152.3.7Socket編程的基本步驟 16114622.3.8I/O復(fù)用介紹 16226252.3.9Linux下的I/O復(fù)用支持 1720602.3.10Linux下EPOLL的使用 1948102.4HTTP協(xié)議分析 22209262.4.1HTTP協(xié)議概述 22128052.4.2HTTP工作原理 23188712.4.3HTTP請(qǐng)求報(bào)文分析 25269442.4.3HTTP響應(yīng)報(bào)文分析 26261742.4.4HTTP/1.0主要特征 27282012.4.5HTTP/1.1簡(jiǎn)介 28257652.5本章小結(jié) 2930120第三章HTTP服務(wù)器設(shè)計(jì) 30183493.1需求分析 30233313.2HTTP服務(wù)器模型 30312663.3HTTP服務(wù)器實(shí)現(xiàn)目標(biāo) 31284653.4HTTP服務(wù)器設(shè)計(jì)思路 31162113.5HTTP服務(wù)器功能模塊圖 3242683.6HTTP服務(wù)器工作流程 32103223.7HTTP服務(wù)器核心設(shè)計(jì)思想 3529403.8本章小結(jié) 3515388第四章HTTP服務(wù)器實(shí)現(xiàn) 36211404.1網(wǎng)絡(luò)連接模塊 36128244.1.1數(shù)據(jù)結(jié)構(gòu)與接口設(shè)計(jì) 3658764.1.2epoll接口實(shí)現(xiàn) 37229364.2HTTP協(xié)議處理模塊 3929964.2.1數(shù)據(jù)結(jié)構(gòu)與接口設(shè)計(jì) 39241194.3HTTP服務(wù)提供模塊 42264624.3.1數(shù)據(jù)結(jié)構(gòu)與接口設(shè)計(jì) 42225994.4HTTP服務(wù)主程序 44299874.5HTTP服務(wù)器運(yùn)行與測(cè)試 45209194.5.1HTTP服務(wù)器運(yùn)行 45237284.5.2HTTP服務(wù)器測(cè)試 46274124.6本章小結(jié) 4915789第五章結(jié)論 5027019第六章總結(jié)與體會(huì) 5125639謝辭 5232287參考文獻(xiàn) 53附錄……………………...54 軟件使用說明……………………...55

摘要Linux操作系統(tǒng)是一個(gè)開放源代碼的免費(fèi)操作系統(tǒng)。它不僅有安全、穩(wěn)定、成本低的特點(diǎn),而且很少發(fā)現(xiàn)有病毒傳播。HTTP服務(wù)器是web服務(wù)器的一種,它是基于超文本傳輸協(xié)議HTTP的服務(wù)器?;贚inux具有穩(wěn)定、可靠、安全和強(qiáng)大的網(wǎng)絡(luò)功能這些優(yōu)點(diǎn),使得其主要應(yīng)用于服務(wù)器領(lǐng)域。所以本文選擇在Linux環(huán)境下實(shí)現(xiàn)一個(gè)HTTP服務(wù)器。本文研究了Linux下HTTP服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)。在Linux系統(tǒng)中采用HTTP協(xié)議和瀏覽器完成數(shù)據(jù)的傳輸。闡述了Linux套接字編程的方法、EPOLL等I/O復(fù)用編程模型。詳細(xì)分析了HTTP協(xié)議內(nèi)容以及客戶端與服務(wù)器之間的通信過程。本文實(shí)現(xiàn)了客戶端瀏覽器和服務(wù)器端以HTTP協(xié)議進(jìn)行請(qǐng)求和響應(yīng)的功能。同時(shí)對(duì)服務(wù)器進(jìn)行了一個(gè)簡(jiǎn)單的壓力測(cè)試。所有程序代碼均為Linux下的C語言編程。關(guān)鍵字:Linux、HTTP服務(wù)器、HTTP協(xié)議、EPOLL

AbstractTheLinuxoperatesystemisafreeoperatesystemwhichopensasourcecode.Notonlyithascharacteristicssuchassafe,stability,andthelowcost,butalsoitseldomdisseminatestheVirus.HTTPserverisoneoftheWebserversanditbasesonHTTPprotocol.AstheLinuxoperatingsystemhasthefunctionofstable,reliable,safeandpowerfulnetwork,itmainlyusedinservers.TorealizeaHTTPserverintheLinuxenvironmentisthebestchoice.ThispaperintroducesdesignandimplementofHTTPserverinLinuxoperatingsystem.IntheLinuxsystemandbrowserusedHTTPprotocolfordatatransmission.ThispaperexpoundsthemethodofLinuxsocketprogrammingandEPOLLI/Omultiplexingprogrammingmodel.DetailedanalysisthecommunicationprocessbetweenclientandserverandHTTPprotocol.ThispaperrealizesthefunctionthattheclientbrowserrequestsandtheserverrespondsbyHTTPagreement.Makeasimplepressuretestontheserver.AllprogramcodeusetheClanguageprogramminginLinuxoperatingsystem.Keyword:Linux,HTTPServer,HTTPprotocol,EPOLL

前言隨著Internet的迅速發(fā)展與普及,網(wǎng)絡(luò)已經(jīng)延伸到世界的各個(gè)角落。在該技術(shù)基礎(chǔ)上發(fā)展起來的www,通過超文本向用戶提供全方位的多媒體、超媒體信息,從而為全世界的Internet用戶提供了一種獲取信息、共享資源的途徑。由于用戶在通過Web瀏覽器訪問信息資源的過程中,無需再關(guān)心一些技術(shù)性的細(xì)節(jié),而且界面非常友好,因而Web在Internet上一推出就受到了熱烈的歡迎,走紅全球,并迅速得到了爆炸性的發(fā)展。所以Web服務(wù)器在網(wǎng)絡(luò)中的地位日益重要。當(dāng)今社會(huì)中已有了許多知名的商用服務(wù)器,如MicrosoftIIS、IBMWebSphere、BEAWebLogic、Apache、Tomcat等。但往往這些功能強(qiáng)大的服務(wù)器其結(jié)構(gòu)也相當(dāng)復(fù)雜,規(guī)模較大,在一些特定應(yīng)用情景下(如嵌入式設(shè)備)就不太適合了。同時(shí)一個(gè)簡(jiǎn)單小巧的服務(wù)器也有利于我們學(xué)習(xí)網(wǎng)絡(luò)編程的相關(guān)知識(shí),對(duì)服務(wù)器原理也能有進(jìn)一步的了解。本文設(shè)計(jì)實(shí)現(xiàn)了一個(gè)功能簡(jiǎn)單、結(jié)構(gòu)小巧的HTTP服務(wù)器,采用EPOLL多路I/O復(fù)用機(jī)制來實(shí)現(xiàn)并發(fā)服務(wù)。網(wǎng)絡(luò)編程采用socket,服務(wù)器端創(chuàng)建套接字、綁定套接口、設(shè)置套接口為監(jiān)聽模式,將該監(jiān)聽套接字加入EPOLL事件列表,然后無限循環(huán)等待EPOLL返回,對(duì)返回事件的套接字進(jìn)行讀或?qū)懙奶幚?。若為新連接,則將其加入到EPOLL事件列表;若為已有連接則讀取其請(qǐng)求或向其發(fā)送響應(yīng);若客戶端已斷開或已發(fā)送完響應(yīng),服務(wù)器端就斷開該連接,并將該套接字從EPOLL事件列表中移除。主要提供對(duì)靜態(tài)請(qǐng)求的處理,解析客戶端請(qǐng)求報(bào)文,回送請(qǐng)求的文件和響應(yīng)報(bào)文的功能。王雄畢業(yè)論文第一章緒論1.1課題背景隨著Internet的迅速發(fā)展與普及,網(wǎng)絡(luò)已經(jīng)延伸到世界的各個(gè)角落。在該技術(shù)基礎(chǔ)上發(fā)展起來的www,通過超文本向用戶提供全方位的多媒體、超媒體信息,從而為全世界的Internet用戶提供了一種獲取信息、共享資源的途徑。隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的發(fā)展,客戶/服務(wù)器(Client/Server)結(jié)構(gòu)逐漸向?yàn)g覽器/服務(wù)器(Browser/Server)結(jié)構(gòu)遷移,B/S方式已成為一種時(shí)尚,大部分網(wǎng)絡(luò)應(yīng)用系統(tǒng)都是以這種B/S方式與網(wǎng)絡(luò)用戶交換信息。B/S的基礎(chǔ)是客戶端要有一個(gè)瀏覽器程序,服務(wù)器端要有一個(gè)與之對(duì)應(yīng)的Web服務(wù)器。所以,Web服務(wù)器在B/S方式下起著決定性的作用,且其應(yīng)用地位日益重要。Linux系統(tǒng)憑借其開源、穩(wěn)定、高效的特點(diǎn),在服務(wù)器市場(chǎng)擁有較大的市場(chǎng)份額。Linux作為網(wǎng)絡(luò)服務(wù)器市場(chǎng)的佼佼者,網(wǎng)絡(luò)服務(wù)應(yīng)用是其精華與核心。當(dāng)前商用的服務(wù)器大都規(guī)模比較大,功能強(qiáng)大的同時(shí)結(jié)構(gòu)也比較復(fù)雜。自己實(shí)現(xiàn)一個(gè)簡(jiǎn)單小巧的HTTP服務(wù)器,對(duì)于理解服務(wù)器工作原理知識(shí),或針對(duì)一些特定情景下的HTTP服務(wù)器應(yīng)用來說,不失為一種比較好的方式。1.2課題研究的目的和意義隨著Internet的普及,網(wǎng)絡(luò)已經(jīng)深入到了我們的生活,跟我們息息相關(guān)。Linux系統(tǒng)作為網(wǎng)絡(luò)應(yīng)用的重要平臺(tái),如何更好的去學(xué)習(xí)和使用Linux系統(tǒng)便是我們要面對(duì)的問題。同時(shí),作為當(dāng)今互聯(lián)網(wǎng)最主要的應(yīng)用——www服務(wù),其為全世界的Internet用戶提供了一種獲取信息、共享資源的途徑。www服務(wù)主要的提供者就是其后端的HTTP服務(wù)器,所以如何更為高效的研究和學(xué)習(xí)Web服務(wù)器的相關(guān)知識(shí),也是我們必須要關(guān)注的。本文在Linux環(huán)境下設(shè)計(jì)和實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的HTTP服務(wù)器。使用socket庫完成網(wǎng)絡(luò)底層的通信,使用HTTP協(xié)議來和客戶端進(jìn)行數(shù)據(jù)傳輸,使用EPOLL多路I/O復(fù)用機(jī)制來完成并發(fā)服務(wù),最后還進(jìn)行了一個(gè)簡(jiǎn)單的并發(fā)性能測(cè)試。通過對(duì)此課題的研究學(xué)習(xí),我們能更好的掌握Linux系統(tǒng)的使用,加深對(duì)HTTP協(xié)議的理解。同時(shí)能對(duì)服務(wù)器設(shè)計(jì)的相關(guān)理論和實(shí)踐有一定了解。

第二章HTTP服務(wù)器的相關(guān)理論基礎(chǔ)本章主要介紹設(shè)計(jì)HTTP服務(wù)器的相關(guān)理論知識(shí)。包括Linux系統(tǒng)簡(jiǎn)介、TCP/IP協(xié)議分析、Linux下網(wǎng)絡(luò)編程介紹、HTTP協(xié)議分析。2.1Linux系統(tǒng)簡(jiǎn)介簡(jiǎn)單地說,Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),它主要用于基于x86系列CPU的計(jì)算機(jī)上。這個(gè)系統(tǒng)是由世界各地的成千上萬的程序員設(shè)計(jì)和實(shí)現(xiàn)的。其目的是建立不受任何商品化軟件的版權(quán)制約的、全世界都能自由使用的Unix兼容產(chǎn)品。Linux以它的高效性和靈活性著稱。Linux模塊化的設(shè)計(jì)結(jié)構(gòu),使得它既能在價(jià)格昂貴的工作站上運(yùn)行,也能夠在廉價(jià)的PC機(jī)上實(shí)現(xiàn)全部的Unix特性,具有多任務(wù)、多用戶的能力。Linux是在GNU(GNU’sNotUnix)公共許可權(quán)限下免費(fèi)獲得的,是一個(gè)符合POSIX標(biāo)準(zhǔn)的操作系統(tǒng)。Linux操作系統(tǒng)軟件包不僅包括完整的Linux操作系統(tǒng),而且還包括了文本編輯器、高級(jí)語言編譯器等應(yīng)用軟件。它還包括帶有多個(gè)窗口管理器的X.Windows圖形用戶界面,如同我們使用WindowsNT一樣,允許我們使用窗口、圖標(biāo)和菜單對(duì)系統(tǒng)進(jìn)行操作。Linux具有Unix的優(yōu)點(diǎn):穩(wěn)定、可靠、安全,有強(qiáng)大的網(wǎng)絡(luò)功能。在相關(guān)軟件的支持下,可實(shí)現(xiàn)WWW、FTP(FileTransferProtoc01)、DNS(DomainNameSystem)、DHCP((DynamicHostConfigureProtocol,動(dòng)態(tài)主機(jī)配置協(xié)議)、Email等服務(wù),還可作為路由器使用,利用ipchains/iptables可構(gòu)建NAT(NetworkAddressTranslation,網(wǎng)絡(luò)地址轉(zhuǎn)換)及功能全面的防火墻。現(xiàn)在,Linux已經(jīng)成為了一種受到廣泛關(guān)注和支持的操作系統(tǒng)。包括國際商用機(jī)器公司和惠普、戴爾在內(nèi)的一些計(jì)算機(jī)業(yè)巨頭也陸續(xù)支持Linux,并且成立了一些組織支持其發(fā)展,如OpenInventionNetwork(OIN)(成員有IBM,索尼,NEC,Philips,Novell,Redhat等)購買了微軟專利,允許任何個(gè)體以開放的原則使用。很多人認(rèn)為,和微軟Windows相比,作為自由軟件的Linux具有低軟件成本,高安全性,更加可信賴等優(yōu)勢(shì),但是同時(shí)卻需要更多的人力成本。2.2TCP/IP協(xié)議分析由于當(dāng)今世界上的絕大部分網(wǎng)絡(luò)程序都是建立TCP/IP(傳輸控制協(xié)議/網(wǎng)際協(xié)議)協(xié)議的基礎(chǔ)上的。所以有必要對(duì)TCP/IP的協(xié)議內(nèi)容有所了解。這一節(jié)主要對(duì)TCP/IP協(xié)議進(jìn)行分析。2.2.1TCP/IP協(xié)議概述TCP/IP協(xié)議并不完全符合OSI的七層參考模型。傳統(tǒng)的開放式系統(tǒng)互連參考模型,是一種通信協(xié)議的7層抽象的參考模型,其中每一層執(zhí)行某一特定任務(wù)。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層和應(yīng)用層。而TCP/IP通訊協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來完成自己的需求。這4層分別為:應(yīng)用層:應(yīng)用程序間溝通的層,如簡(jiǎn)單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議(Telnet)等。傳輸層:在此層中,它提供了節(jié)點(diǎn)間的數(shù)據(jù)傳送,應(yīng)用程序之間的通信服務(wù),主要功能是數(shù)據(jù)格式化、數(shù)據(jù)確認(rèn)和丟失重傳等。如傳輸控制協(xié)議(TCP)、用戶數(shù)據(jù)報(bào)協(xié)議(UDP)等,TCP和UDP給數(shù)據(jù)包加入傳輸數(shù)據(jù)并把它傳輸?shù)较乱粚又?,這一層負(fù)責(zé)傳送數(shù)據(jù),并且確定數(shù)據(jù)已被送達(dá)并接收?;ミB網(wǎng)絡(luò)層:負(fù)責(zé)提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能夠到達(dá)目的主機(jī)(但不檢查是否被正確接收),如網(wǎng)際協(xié)議(IP)。鏈路接口層:接收IP數(shù)據(jù)報(bào)并進(jìn)行傳輸,從網(wǎng)絡(luò)上接收物理幀,抽取IP數(shù)據(jù)報(bào)轉(zhuǎn)交給下一層,對(duì)實(shí)際的網(wǎng)絡(luò)媒體的管理,定義如何使用實(shí)際網(wǎng)絡(luò)(如Ethernet、SerialLine等)來傳送數(shù)據(jù)。HTTP客戶端HTTP客戶端TCPIP以太網(wǎng)驅(qū)動(dòng)HTTP服務(wù)器TCPIP以太網(wǎng)驅(qū)動(dòng)HTTP協(xié)議TCP協(xié)議IP協(xié)議以太網(wǎng)協(xié)議應(yīng)用層傳輸層網(wǎng)絡(luò)層鏈路層圖2-1TCP/IP層次結(jié)構(gòu)圖2.2.2網(wǎng)絡(luò)層協(xié)議(IP協(xié)議)IP協(xié)議是網(wǎng)絡(luò)層的主要協(xié)議,是Internet最重要的協(xié)議。在IP協(xié)議中規(guī)定了在Internet上進(jìn)行通信時(shí)應(yīng)遵守的規(guī)則。例如IP數(shù)據(jù)包的組成、路由器如何將IP數(shù)據(jù)包送到目的主機(jī)等。IP協(xié)議在主機(jī)和網(wǎng)絡(luò)之間尋址和路由數(shù)據(jù)包。IP是一個(gè)無連接的協(xié)議,主要負(fù)責(zé)在主機(jī)間尋址并為數(shù)據(jù)包設(shè)定路由,在交換數(shù)據(jù)前它并不建立會(huì)話。因?yàn)樗槐WC正確傳遞。另一方面,數(shù)據(jù)在被收到時(shí),IP不需要收到確認(rèn),所以它是不可靠的。IP層接收由更低層(網(wǎng)絡(luò)接口層例如以太網(wǎng)設(shè)備驅(qū)動(dòng)程序)發(fā)來的數(shù)據(jù)包,并把該數(shù)據(jù)包發(fā)送到更高層——TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數(shù)據(jù)包傳送到更低層。IP數(shù)據(jù)包中含有發(fā)送它的主機(jī)的地址(源地址)和接收它的主機(jī)的地址(目的地址)。IP協(xié)議的數(shù)據(jù)格式如下:版本號(hào)(4)IHL(4)服務(wù)類型(8)數(shù)據(jù)包長度(16)標(biāo)識(shí)(16)Flag(3)偏移量(13)生存時(shí)間(8)傳輸協(xié)議(8)校驗(yàn)和(16)源地址(32)目的地址(32)選項(xiàng)(8)+填充數(shù)據(jù)圖2-2網(wǎng)際協(xié)議IP數(shù)據(jù)格式版本號(hào):協(xié)議的版本號(hào),不同版本的協(xié)議格式或語言可能不同,現(xiàn)在常用的是IPV4。生存時(shí)間(TimeToLive,TTL):8bit,即IP分組在IP網(wǎng)絡(luò)中的壽命。協(xié)議(Protocol):8bit,指明IP分組中數(shù)據(jù)字段攜帶的是哪種高層協(xié)議的數(shù)據(jù)。首部檢查和(headerchecksum):16bit。此字段只用于檢查IP分組的首部,不包括數(shù)據(jù)字段。源IP地址(sourceIPaddress):32bit,填入源主機(jī)的IP地址。目標(biāo)IP地址(destinationIPaddress):32bit,填入目標(biāo)主機(jī)的IP地址??蛇x字段(IPoptions):可選,可變長,1字節(jié)-40字節(jié),但加上填充字段(填充0)后兩個(gè)字段長度必須為4Bytes的整數(shù)倍。IP地址標(biāo)識(shí)著網(wǎng)絡(luò)中一個(gè)系統(tǒng)的位置。我們知道每個(gè)IP地址都是由兩部分組成的:網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)。其中網(wǎng)絡(luò)號(hào)標(biāo)識(shí)一個(gè)物理的網(wǎng)絡(luò),同一個(gè)網(wǎng)絡(luò)上所有主機(jī)需要同一個(gè)網(wǎng)絡(luò)號(hào),該號(hào)在互聯(lián)網(wǎng)中是唯一的;而主機(jī)號(hào)確定網(wǎng)絡(luò)中的一個(gè)工作端、服務(wù)器、路由器及其它TCP/IP客戶端。對(duì)于同一個(gè)網(wǎng)絡(luò)號(hào)來說,主機(jī)號(hào)是唯一的。每個(gè)TCP/IP主機(jī)由一個(gè)邏輯IP地址確定。2.2.3傳輸層協(xié)議(TCP和UDP)TCP協(xié)議傳輸控制協(xié)議TCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層通信協(xié)議,由IETF的RFC793說明。它在傳送數(shù)據(jù)時(shí)是分段進(jìn)行的,主機(jī)交換數(shù)據(jù)必須建立一個(gè)會(huì)話。它用比特流通信,即數(shù)據(jù)被作為無結(jié)構(gòu)的字節(jié)流。通過每個(gè)TCP傳輸?shù)淖侄沃付樞蛱?hào),以獲得可靠性。如果一個(gè)分段被分解成幾個(gè)小段,接收主機(jī)會(huì)知道是否所有小段都已收到。通過發(fā)送應(yīng)答,用以確認(rèn)別的主機(jī)收到了數(shù)據(jù)。對(duì)于發(fā)送的每一個(gè)小段,接收主機(jī)必須在一個(gè)指定的時(shí)間返回一個(gè)確認(rèn)。如果發(fā)送者未收到確認(rèn),數(shù)據(jù)會(huì)被重新發(fā)送;如果收到的數(shù)據(jù)段損壞,接收主機(jī)會(huì)舍棄它,因?yàn)榇_認(rèn)未被發(fā)送,發(fā)送者會(huì)重新發(fā)送分段。TCP端口為信息的傳送指定端口,端口號(hào)小于256的定義為常用端口。下圖展示了TCP首部的數(shù)據(jù)格式。如果不計(jì)任選(Options)字段,那么,它的大小是20個(gè)字節(jié)。圖2-3TCP包頭格式TCP協(xié)議通過三個(gè)報(bào)文段完成連接的建立,這個(gè)過程稱為三次握手(three-wayhandshake),過程如下圖所示。(1)客戶機(jī)向服務(wù)器發(fā)送一個(gè)TCP數(shù)據(jù)包,表示請(qǐng)求建立連接。(2)服務(wù)器收到了數(shù)據(jù)包,知道這是一個(gè)建立請(qǐng)求的連接,服務(wù)器也通過發(fā)回具有以下項(xiàng)目的數(shù)據(jù)包表示回復(fù):同步標(biāo)志置位、即將發(fā)送的數(shù)據(jù)段的起始字節(jié)的順序號(hào)、應(yīng)答并帶有將收到的下一個(gè)數(shù)據(jù)段的字節(jié)順序號(hào)。(3)客戶機(jī)收到了服務(wù)器的TCP,知道是從服務(wù)器來的確認(rèn)信息。于是客戶機(jī)也向服務(wù)器發(fā)送確認(rèn)信息。至此客戶端完成連接。(4)服務(wù)器收到確認(rèn)信息,也完成連接。圖2-4TCP建立連接(三次握手)TCP協(xié)議建立一個(gè)連接需要三次握手,而終止一個(gè)連接要經(jīng)過四次握手,這是由TCP的半關(guān)閉(half-close)造成的。具體過程如下圖所示。圖2-5TCP斷開連接UDP協(xié)議UDP是UserDatagramProtocol的簡(jiǎn)稱,中文名是用戶數(shù)據(jù)包協(xié)議,是OSI參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。用戶數(shù)據(jù)報(bào)協(xié)議UDP提供了無連接的數(shù)據(jù)報(bào)服務(wù)。它適用于無須應(yīng)答并且通常一次只傳送少量數(shù)據(jù)的應(yīng)用軟件。2.3Linux下網(wǎng)絡(luò)編程介紹Linux下的網(wǎng)絡(luò)編程主要是基于Linux提供的SocketAPI函數(shù)來進(jìn)行的。所以,Linux下的網(wǎng)絡(luò)編程的基礎(chǔ)就是對(duì)socketAPI函數(shù)的掌握,就必須理解和學(xué)會(huì)使用socket接口。同時(shí)針對(duì)并發(fā)服務(wù),Linux下提供了I/O復(fù)用等高效的形式來滿足并發(fā)的要求。2.3.1Socket簡(jiǎn)介Socket接口是TCP/IP網(wǎng)絡(luò)的API。Socket接口定義了許多函數(shù)或例程,程序員可以用它們來開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。要學(xué)習(xí)Internet上的TCP/IP網(wǎng)絡(luò)編程,必須理解Socket接口。Socket接口設(shè)計(jì)者最先是將接口放在Unix操作系統(tǒng)里面的。如果了解Unix系統(tǒng)的輸入和輸出的話,就很容易了解Socket了。網(wǎng)絡(luò)的Socket數(shù)據(jù)傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個(gè)類似于打開文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個(gè)整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該Socket實(shí)現(xiàn)的。常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數(shù)據(jù)報(bào)式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對(duì)于面向連接的TCP服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式Socket是一種無連接的Socket,對(duì)應(yīng)于無連接的UDP服務(wù)應(yīng)用。2.3.2Socket創(chuàng)建為了創(chuàng)建Socket,程序可以調(diào)用Socket函數(shù),該函數(shù)返回一個(gè)類似于文件描述符的句柄。socket函數(shù)原型為:intsocket(intdomain,inttype,intprotocol);domain指明所使用的協(xié)議族,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協(xié)議;protocol通常賦值“0”。Socket()調(diào)用返回一個(gè)整型socket描述符,你可以在后面的調(diào)用使用它。Socket描述符是一個(gè)指向內(nèi)部數(shù)據(jù)結(jié)構(gòu)的指針,它指向描述符表入口。調(diào)用Socket函數(shù)時(shí),socket執(zhí)行體將建立一個(gè)Socket,實(shí)際上"建立一個(gè)Socket"意味著為一個(gè)Socket數(shù)據(jù)結(jié)構(gòu)分配存儲(chǔ)空間。Socket執(zhí)行體為你管理描述符表。兩個(gè)網(wǎng)絡(luò)程序之間的一個(gè)網(wǎng)絡(luò)連接包括五種信息:通信協(xié)議、本地協(xié)議地址、本地主機(jī)端口、遠(yuǎn)端主機(jī)地址和遠(yuǎn)端協(xié)議端口。Socket數(shù)據(jù)結(jié)構(gòu)中包含這五種信息。2.3.3Socket配置通過socket調(diào)用返回一個(gè)socket描述符后,在使用socket進(jìn)行網(wǎng)絡(luò)傳輸以前,必須配置該socket。面向連接的socket客戶端通過調(diào)用Connect函數(shù)在socket數(shù)據(jù)結(jié)構(gòu)中保存本地和遠(yuǎn)端信息。無連接socket的客戶端和服務(wù)端以及面向連接socket的服務(wù)端通過調(diào)用bind函數(shù)來配置本地信息。Bind函數(shù)將socket與本機(jī)上的一個(gè)端口相關(guān)聯(lián),隨后你就可以在該端口監(jiān)聽服務(wù)請(qǐng)求。Bind函數(shù)原型為:intbind(intsockfd,structsockaddr*my_addr,intaddrlen);Sockfd是調(diào)用socket函數(shù)返回的socket描述符,my_addr是一個(gè)指向包含有本機(jī)IP地址及端口號(hào)等信息的sockaddr類型的指針;addrlen常被設(shè)置為sizeof(structsockaddr)。structsockaddr結(jié)構(gòu)類型是用來保存socket信息的:structsockaddr{unsignedshortsa_family;/*地址族,AF_xxx*/ charsa_data[14];/*14字節(jié)的協(xié)議地址*/ };sa_family一般為AF_INET,代表Internet(TCP/IP)地址族;sa_data則包含該socket的IP地址和端口號(hào)。另外還有一種結(jié)構(gòu)類型:structsockaddr_in{shortintsin_family;/*地址族*/unsignedshortintsin_port;/*端口號(hào)*/structin_addrsin_addr;/*IP地址*unsignedcharsin_zero[8];/*填充0以保持與structsockaddr同樣大小*/};這個(gè)結(jié)構(gòu)更方便使用。sin_zero用來將sockaddr_in結(jié)構(gòu)填充到與structsockaddr同樣的長度,可以用bzero()或memset()函數(shù)將其置為零。指向sockaddr_in的指針和指向sockaddr的指針可以相互轉(zhuǎn)換,這意味著如果一個(gè)函數(shù)所需參數(shù)類型是sockaddr時(shí),你可以在函數(shù)調(diào)用的時(shí)候?qū)⒁粋€(gè)指向sockaddr_in的指針轉(zhuǎn)換為指向sockaddr的指針;或者相反。使用bind函數(shù)時(shí),可以用下面的賦值實(shí)現(xiàn)自動(dòng)獲得本機(jī)IP地址和隨機(jī)獲取一個(gè)沒有被占用的端口號(hào):my_addr.sin_port=0;/*系統(tǒng)隨機(jī)選擇一個(gè)未被使用的端口號(hào)*/my_addr.sin_addr.s_addr=INADDR_ANY;/*填入本機(jī)IP地址*/通過將my_addr.sin_port置為0,函數(shù)會(huì)自動(dòng)為你選擇一個(gè)未占用的端口來使用。同樣,通過將my_addr.sin_addr.s_addr置為INADDR_ANY,系統(tǒng)會(huì)自動(dòng)填入本機(jī)IP地址。注意在使用bind函數(shù)是需要將sin_port和sin_addr轉(zhuǎn)換成為網(wǎng)絡(luò)字節(jié)優(yōu)先順序;而sin_addr則不需要轉(zhuǎn)換。計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先和低位字節(jié)優(yōu)先。Internet上數(shù)據(jù)以高位字節(jié)優(yōu)先順序在網(wǎng)絡(luò)上傳輸,所以對(duì)于在內(nèi)部是以低位字節(jié)優(yōu)先方式存儲(chǔ)數(shù)據(jù)的機(jī)器,在Internet上傳輸數(shù)據(jù)時(shí)就需要進(jìn)行轉(zhuǎn)換,否則就會(huì)出現(xiàn)數(shù)據(jù)不一致。下面是幾個(gè)字節(jié)順序轉(zhuǎn)換函數(shù):·htonl():把32位值從主機(jī)字節(jié)序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序·htons():把16位值從主機(jī)字節(jié)序轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序·ntohl():把32位值從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換成主機(jī)字節(jié)序·ntohs():把16位值從網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換成主機(jī)字節(jié)序Bind()函數(shù)在成功被調(diào)用時(shí)返回0;出現(xiàn)錯(cuò)誤時(shí)返回“-1”并將errno置為相應(yīng)的錯(cuò)誤號(hào)。需要注意的是,在調(diào)用bind函數(shù)時(shí)一般不要將端口號(hào)置為小于1024的值,因?yàn)?到1024是保留端口號(hào),你可以選擇大于1024中的任何一個(gè)沒有被占用的端口號(hào)。2.3.4建立連接

第六章總結(jié)與體會(huì)畢業(yè)設(shè)計(jì)最初的時(shí)候,主要是對(duì)相關(guān)資料的收集和理論知識(shí)的學(xué)習(xí)。在這個(gè)階段,最好是同時(shí)結(jié)合資料和源碼一起來看,效果會(huì)比較好,學(xué)習(xí)效率較高。看資料和教程是從細(xì)節(jié)和基礎(chǔ)上去學(xué)習(xí)知識(shí),而看相關(guān)程序的源碼則是從整體和實(shí)現(xiàn)上去了解一個(gè)系統(tǒng)。這樣才能做到“見樹又見林”。學(xué)習(xí)理論知識(shí)可以使我們掌握最基礎(chǔ)的知識(shí),能更深入的了解設(shè)計(jì)的底層實(shí)現(xiàn)。當(dāng)在具體實(shí)現(xiàn)的時(shí)候,可以以模塊或分層次的思想來分析系統(tǒng)。重點(diǎn)掌握核心的模塊,其他模塊可以采用現(xiàn)有的類庫或開源的實(shí)現(xiàn),這樣可以提高開發(fā)的效率。軟件開發(fā)其實(shí)對(duì)于代碼量的積累是很重要的。當(dāng)積累了一定的代碼量后,看問題就會(huì)比較有程序的思想,能夠從層次,模塊的角度來分析問題,這樣思路就比較清晰了。整個(gè)畢業(yè)設(shè)計(jì)的過程其實(shí)就是經(jīng)歷了一個(gè)項(xiàng)目的生命周期。從最初的選題確定后,開始進(jìn)行相關(guān)資料的收集和理論知識(shí)的學(xué)習(xí),接著確定自己的方案設(shè)計(jì)和系統(tǒng)整體結(jié)構(gòu),然后開始編碼實(shí)現(xiàn),調(diào)試代碼,直至順利運(yùn)行,再進(jìn)行性能測(cè)試,最后寫出論文。這些步驟其實(shí)和一個(gè)軟件項(xiàng)目的開發(fā)是很類似的。軟件的開發(fā)同樣會(huì)有這些步驟,需求分析,設(shè)計(jì),編碼,測(cè)試,發(fā)布,文檔撰寫等。當(dāng)完成了整個(gè)畢業(yè)設(shè)計(jì)后,對(duì)如何把握一個(gè)項(xiàng)目的整體有了一點(diǎn)基本的認(rèn)識(shí)。同時(shí)從中體會(huì)到時(shí)間控制和進(jìn)度安排都是很重要的,任何任務(wù)和項(xiàng)目都是有時(shí)間期限的,自己的想法和設(shè)計(jì)都是得基于按時(shí)完成這個(gè)前提的。四年的大學(xué)時(shí)光即將結(jié)束,心中還是有不舍。回顧四年的學(xué)習(xí)時(shí)光,感覺自己還是過的蠻充實(shí)的。做過很多有意思的事,也認(rèn)識(shí)了一幫好友與同窗。無論是做人還是學(xué)習(xí),我的老師和同學(xué)朋友們都給了我很大的幫助,我非常感謝他們。作為即將踏上工作、步入社會(huì)的我,我想我會(huì)更加努力奮斗,不讓我的家人、朋友、老師們失望。最后,愿大家在今后的日子里,一帆風(fēng)順,身體健康。

謝辭四年的讀書生活在這個(gè)季節(jié)即將劃上一個(gè)句號(hào),而于我的人生卻只是一個(gè)逗號(hào),我將面對(duì)又一次征程的開始。四年的求學(xué)生涯在師長、親友的大力支持下,走得辛苦卻也收獲滿囊,在論文即將付梓之際,思緒萬千,心情久久不能平靜。偉人、名人為我所崇拜,可是我更急切地要把我的敬意和贊美獻(xiàn)給一位平凡的人,我的導(dǎo)師。我不是您最出色的學(xué)生,而您卻是我最尊敬的老師。您治學(xué)嚴(yán)謹(jǐn),學(xué)識(shí)淵博,思想深邃,視野雄闊,為我營造了一種良好的精神氛圍。授人以魚不如授人以漁,置身其間,耳濡目染,潛移默化,使我不僅接受了全新的思想觀念,樹立了宏偉的學(xué)術(shù)目標(biāo),領(lǐng)會(huì)了基本的思考方式,從論文題目的選定到論文寫作的指導(dǎo),經(jīng)由您悉心的點(diǎn)撥,再經(jīng)思考后的領(lǐng)悟,常常讓我有“山重水復(fù)疑無路,柳暗花明又一村”。感謝我的爸爸媽媽,焉得諼草,言樹之背,養(yǎng)育之恩,無以回報(bào),你們永遠(yuǎn)健康快樂是我最大的心愿。在論文即將完成之際,我的心情無法平靜,從開始進(jìn)入課題到論文的順利完成,有多少可敬的師長、同學(xué)、朋友給了我無言的幫助,在這里請(qǐng)接受我誠摯謝意!同時(shí)也感謝學(xué)院為我提供良好的做畢業(yè)設(shè)計(jì)的環(huán)境。最后再一次感謝所有在畢業(yè)設(shè)計(jì)中曾經(jīng)幫助過我的良師益友和同學(xué),以及在設(shè)計(jì)中被我引用或參考的論著的作者感謝培養(yǎng)教育我的武漢大學(xué),武漢大學(xué)濃厚的學(xué)術(shù)氛圍,舒適的學(xué)習(xí)環(huán)境我將終生難忘!祝母校蒸蒸日上,永創(chuàng)輝煌!祝校長財(cái)源滾滾,仕途順利!感謝對(duì)我傾囊賜教、鞭策鼓勵(lì)的恩師。祝恩師們身體健康,家庭幸福!

參考文獻(xiàn)[1]JAMESF.KUROSE,KEITHW.ROSS.計(jì)算機(jī)網(wǎng)絡(luò)——自頂向下方法與Internet特色.北京:機(jī)械工業(yè)出版社,2005年[2]W.RICHARDSTEVENS,BILLFENNER,ANDREWM.RUDOFF.UNIX網(wǎng)絡(luò)編程第1卷套接口API.北京:清華大學(xué)出版社,2006年6月第3版[3]W.RICHARDSTEVENS,STEPHENA.RAGO.UNIX環(huán)境高級(jí)編程(第2版).北京:人民郵電出版社,2006年[4]鳥哥.鳥哥的Linux私房菜基礎(chǔ)學(xué)習(xí)篇.北京:人民郵電出版社,2007年9月[5]林宇,郭凌云.Linux網(wǎng)絡(luò)編程.北京:人民郵電出版社,2000.45—65[6]鄭齊,方思行.通用多線程服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).計(jì)算機(jī)工程與應(yīng)用,2003.16:146—147[7]胥光輝等譯.W.RICHARDSTEVENS.TCP/IP詳解(第l卷):協(xié)議.北京:機(jī)械工業(yè)出版社,2000.15—25.[8]張南平,徐靜.基于進(jìn)程池的Linux并發(fā)服務(wù)器的研究.計(jì)算機(jī)與數(shù)字工程,2009.1:159—161[9]邵芬,于國防,張寧.基于多線程的HTTP服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).工礦自動(dòng)化,2007.8:134—136[9]孫霞.基于java的高效多線程HTTP服務(wù)器的研究及實(shí)現(xiàn).福建電腦,2003.11:38—39[10]李磊.嵌入式WEB服務(wù)器軟件的設(shè)計(jì)與實(shí)現(xiàn).計(jì)算機(jī)工程與設(shè)計(jì)2003(10)[11]白小明,邱桃榮.基于Linux的嵌入式實(shí)時(shí)操作系統(tǒng)的研究.微計(jì)算機(jī)信息,2006,2-2:78-7.[12]車飛鋒.基于嵌入式Linux的Web和郵件服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).西安石油大學(xué):計(jì)算機(jī)應(yīng)用技術(shù),2008[13]曲波,吳兆芝.Linux環(huán)境下面向Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn).小型微型計(jì)算機(jī)系統(tǒng),2002[14]DanKegel.TheC10Kproblem./c10k.html[15]JeffDarcy.High-PerformanceServerDesign.http://pl.atyp.us/content/tech/servers.html附錄附錄1軟件使用說明 請(qǐng)查看理論基礎(chǔ)第1天:成都—臥龍—日隆—丹巴(350KM)住宿:丹巴經(jīng)成灌高速到都江堰市,進(jìn)入岷江峽谷,逆流而上至映秀。到臥龍參觀中國大熊貓研究保護(hù)中心,觀賞國寶大熊貓。翻越巴朗山(4523米),運(yùn)氣好的話可以看到四周的云海,在貓鼻梁遠(yuǎn)眺四姑娘山前往長坪溝景區(qū),騎馬或徒步到枯樹灘、唐柏古道、木騾子,近距離的拍攝四姑娘山全景,欣賞四姑娘山獨(dú)具特色的高山草甸、飛瀑、奇石等美景。然后再去雙橋溝景區(qū),乘觀光車游覽陰陽谷、五色山、日月寶鏡、獵人峰等原始美景,來到人參果坪,草地上成群的牦牛,兩邊是高聳的雪峰,夏天野花盛開,一幅天然的畫卷展現(xiàn)在您的面前。經(jīng)小金縣進(jìn)入甘孜州,到達(dá)位于大渡河畔的“千碉之國”丹巴縣。第2天:丹巴—塔公(塔公草原,塔公寺)—新都橋(145KM)住宿:新都橋在大渡河邊觀梭坡古碉群,遙想當(dāng)年的金戈鐵馬。然后去甲居藏寨,頗具嘉絨藏族特色的甲居藏寨位于大渡河陡峭的山坡上,色彩鮮艷的藏寨掩映在大片的果園中,一派田園風(fēng)光,美不勝收。每年三月間桃花和梨花競(jìng)相盛開,沿寨子的小路漫步,猶如置身世外桃源。中午在藏寨午餐,感受一下當(dāng)?shù)氐拿褡逄厣?。沿風(fēng)景秀麗的牦牛河谷行進(jìn),沿途的美景令人流連忘返。行使60公里左右,看到白雪皚皚、高聳如云的雅拉雪山。領(lǐng)略神山雄姿,翻過山梁到達(dá)塔公草原。塔公藏語是“菩薩喜歡的地方”,塔公寺是薩迦派的寺廟,始建于清嘉慶年間,寺內(nèi)供奉著當(dāng)年文成公主進(jìn)藏時(shí)隨身攜帶的釋迦牟尼十二歲等身像。過塔公后繼續(xù)前行33公里就到新都橋,新都橋被稱為“攝影者天堂”,彎彎的小溪、金黃的柏楊,山巒連綿起伏,藏寨散落其間,牛羊安詳?shù)爻圆荨缭娙绠嫷奶镌L(fēng)光。第3天:新都橋——稻城(367KM)住宿:稻城翻越高爾寺山(4412米)到達(dá)雅江縣,經(jīng)剪子彎山(4659米)和卡子拉山(4718米)抵“世界高城”理塘。理塘縣城海拔4014米,是七世達(dá)賴和十世達(dá)賴的出生地。翻越兔兒山(4696米),經(jīng)青藏高原最大的古冰川遺跡,稻城古冰帽——海子山,抵達(dá)“最后的香格里拉”稻城。第4天:稻城—亞?。?10KM)住宿:亞丁營地經(jīng)傍河萬畝楊樹林,翻越波瓦山(4523米),沿赤土河谷前行,在日瓦鄉(xiāng)買過門票后前往亞丁自然保護(hù)區(qū)。中午到達(dá)亞丁營地,午餐后先去沖古寺和珍珠海,路上轉(zhuǎn)千年嘛呢堆,觀夕陽中的仙乃日神山,傍晚回到亞丁營地。5天:亞丁—稻城(110KM)住宿:稻城

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論