嵌入式Linux編程 課件 第七章 Linux高性能網(wǎng)絡(luò)編程_第1頁(yè)
嵌入式Linux編程 課件 第七章 Linux高性能網(wǎng)絡(luò)編程_第2頁(yè)
嵌入式Linux編程 課件 第七章 Linux高性能網(wǎng)絡(luò)編程_第3頁(yè)
嵌入式Linux編程 課件 第七章 Linux高性能網(wǎng)絡(luò)編程_第4頁(yè)
嵌入式Linux編程 課件 第七章 Linux高性能網(wǎng)絡(luò)編程_第5頁(yè)
已閱讀5頁(yè),還剩38頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7講高性能網(wǎng)絡(luò)編程主講:學(xué)習(xí)目標(biāo)及要求學(xué)會(huì)TCP協(xié)議服務(wù)器端和客戶(hù)端工作流程。掌握基于套接字的網(wǎng)絡(luò)編程方法。掌握多進(jìn)程、多線(xiàn)程、線(xiàn)程池和高效I/O多路復(fù)用網(wǎng)絡(luò)服務(wù)器的設(shè)計(jì)。掌握高性能網(wǎng)絡(luò)服務(wù)器編程。能力目標(biāo)和要求

嵌入式終端通常需要與外部通信,接收控制指令,傳輸運(yùn)行狀態(tài)和采集的數(shù)據(jù)。嵌入式Linux系統(tǒng)能夠驅(qū)動(dòng)各種網(wǎng)絡(luò)設(shè)備,并通過(guò)網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)通信。每一位嵌入式軟件工程師,都需要熟練掌握網(wǎng)絡(luò)通信編程方法。項(xiàng)目導(dǎo)入目錄:7.1網(wǎng)絡(luò)編程基本知識(shí)7.2基于套接字的網(wǎng)絡(luò)編程7.3高性能網(wǎng)絡(luò)服務(wù)器編程7.4

基于多路復(fù)用的網(wǎng)絡(luò)通信7.5項(xiàng)目實(shí)錄7.1網(wǎng)絡(luò)編程基本知識(shí)41.TCP/IP分層模型7.1網(wǎng)絡(luò)編程基本知識(shí)5(2)

網(wǎng)絡(luò)層(InternetLayer)網(wǎng)絡(luò)層負(fù)責(zé)在主機(jī)之間的通信中選擇數(shù)據(jù)報(bào)的傳輸路徑,即路由。當(dāng)網(wǎng)絡(luò)層接收到傳輸層的請(qǐng)求后,傳輸某個(gè)具有目的地址信息的分組。該層把分組封裝在IP數(shù)據(jù)報(bào)中,填入數(shù)據(jù)報(bào)的首部,使用路由算法來(lái)確定是直接交付數(shù)據(jù)報(bào),還是把它傳遞給路由器,然后把數(shù)據(jù)報(bào)交給適當(dāng)?shù)木W(wǎng)絡(luò)接口進(jìn)行傳輸。(1)

網(wǎng)絡(luò)接口層(NetworkInterfaceLayer)網(wǎng)絡(luò)接口層是TCP/IP協(xié)議軟件的最底層,負(fù)責(zé)將二進(jìn)制流轉(zhuǎn)換為數(shù)據(jù)幀,并進(jìn)行數(shù)據(jù)幀的發(fā)送和接收。數(shù)據(jù)幀是網(wǎng)絡(luò)傳輸?shù)幕締卧?.1網(wǎng)絡(luò)編程基本知識(shí)6(3)

傳輸層(TransportLayer)傳輸層負(fù)責(zé)提供應(yīng)用程序之間的通信服務(wù)。這種通信又稱(chēng)為端到端通信。傳輸層要系統(tǒng)地管理信息的流動(dòng),還要提供可靠的傳輸服務(wù),以確保數(shù)據(jù)到達(dá)無(wú)差錯(cuò)、無(wú)亂序。為了達(dá)到這個(gè)目的,傳輸層協(xié)議軟件要進(jìn)行協(xié)商,讓接收方回送確認(rèn)信息及讓發(fā)送方重發(fā)丟失的分組。傳輸層協(xié)議軟件把要傳輸?shù)臄?shù)據(jù)流劃分為分組,把每個(gè)分組連同目的地址交給網(wǎng)絡(luò)層去發(fā)送。7.1網(wǎng)絡(luò)編程基本知識(shí)7(4)應(yīng)用層(ApplicationLayer)應(yīng)用層是分層模型的最高層,在這個(gè)最高層中,用戶(hù)調(diào)用應(yīng)用程序通過(guò)TCP/IP互聯(lián)網(wǎng)來(lái)訪(fǎng)問(wèn)可行的服務(wù)。與各個(gè)傳輸層協(xié)議交互的應(yīng)用程序負(fù)責(zé)接收和發(fā)送數(shù)據(jù)。每個(gè)應(yīng)用程序選擇適當(dāng)?shù)膫鬏敺?wù)類(lèi)型,把數(shù)據(jù)按照傳輸層的格式要求封裝好向下層傳輸。7.1網(wǎng)絡(luò)編程基本知識(shí)82.TCP/IP模型邊界特性7.2

基于套接字的網(wǎng)絡(luò)編程93.討論(1)TCP和UDP的最大區(qū)別是什么?分別應(yīng)用于什么場(chǎng)合?(2)socket是什么?套接字是什么?目錄:7.1網(wǎng)絡(luò)編程基本知識(shí)7.2基于套接字的網(wǎng)絡(luò)編程7.3高性能網(wǎng)絡(luò)服務(wù)器編程7.4

基于多路復(fù)用的網(wǎng)絡(luò)通信7.5項(xiàng)目實(shí)錄7.2

基于套接字的網(wǎng)絡(luò)編程111.網(wǎng)絡(luò)編程——套接字套接字(Socket)是一種特殊的I/O接口,可以使網(wǎng)絡(luò)中不同主機(jī)上的應(yīng)用實(shí)現(xiàn)雙向通信。套接字提供了一套訪(fǎng)問(wèn)底層TCP/IP通信服務(wù)的標(biāo)準(zhǔn)API接口,在嵌入式Linux系統(tǒng)中應(yīng)用十分廣泛。利用二元組<IP,Port>來(lái)描述一個(gè)套接字。套接字的類(lèi)型主要有以下三種:7.2

基于套接字的網(wǎng)絡(luò)編程12(1)流式套接字(SOCK_STREAM)流式套接字提供可靠的、面向連接的通信流;它使用TCP協(xié)議,從而保證了數(shù)據(jù)傳輸?shù)目煽啃院晚樞蛐浴#?)數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)數(shù)據(jù)報(bào)套接字定義了一種無(wú)可靠、面向無(wú)連接的服務(wù),數(shù)據(jù)通過(guò)相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無(wú)序的,并且不保證是可靠、無(wú)差錯(cuò)的。它使用數(shù)據(jù)報(bào)協(xié)議UDP。(3)原始套接字(SOCK_RAW)原始套接字允許對(duì)底層協(xié)議如IP或ICMP進(jìn)行直接訪(fǎng)問(wèn),它功能強(qiáng)大但使用較為不便,主要用于一些協(xié)議的開(kāi)發(fā)。7.2

基于套接字的網(wǎng)絡(luò)編程132.工作流程7.2

基于套接字的網(wǎng)絡(luò)編程14(1)

socket()函數(shù)語(yǔ)法:7.2

基于套接字的網(wǎng)絡(luò)編程15(2)

bind()函數(shù)語(yǔ)法:7.2

基于套接字的網(wǎng)絡(luò)編程16(3)listen()函數(shù)語(yǔ)法:7.2

基于套接字的網(wǎng)絡(luò)編程17(4)

accept()函數(shù)語(yǔ)法:7.2

基于套接字的網(wǎng)絡(luò)編程18(5)

connect()函數(shù)語(yǔ)法:7.2

基于套接字的網(wǎng)絡(luò)編程19(6)send()函數(shù)語(yǔ)法:7.2

基于套接字的網(wǎng)絡(luò)編程20(7)

recv()函數(shù)語(yǔ)法:7.2

基于套接字的網(wǎng)絡(luò)編程21(8)

recvfrom()函數(shù)語(yǔ)法:7.2

基于套接字的網(wǎng)絡(luò)編程22(9)

sendto()函數(shù)語(yǔ)法:233.簡(jiǎn)單的服務(wù)器與客戶(hù)端(代碼講解):教師演示學(xué)生訓(xùn)練7.2

基于套接字的網(wǎng)絡(luò)編程7.2

基于套接字的網(wǎng)絡(luò)編程244.討論本節(jié)的服務(wù)器實(shí)例只能順序處理客戶(hù)的服務(wù)請(qǐng)求,而不能并發(fā)處理多客戶(hù)的同時(shí)任務(wù)請(qǐng)求,無(wú)法滿(mǎn)足多任務(wù)、實(shí)時(shí)的應(yīng)用場(chǎng)景。(1)你所知道的提高網(wǎng)絡(luò)服務(wù)器性能的方法有哪些?(2)服務(wù)器具有哪些特性是高性能?目錄:7.1網(wǎng)絡(luò)編程基本知識(shí)7.2基于套接字的網(wǎng)絡(luò)編程7.3高性能網(wǎng)絡(luò)服務(wù)器編程7.4

基于多路復(fù)用的網(wǎng)絡(luò)通信7.5項(xiàng)目實(shí)錄7.3高性能網(wǎng)絡(luò)服務(wù)器編程26在Linux軟件開(kāi)發(fā)領(lǐng)域,高性能的網(wǎng)絡(luò)服務(wù)器是開(kāi)發(fā)的重點(diǎn)。實(shí)現(xiàn)高性能的網(wǎng)絡(luò)服務(wù)器需要從底層的網(wǎng)絡(luò)協(xié)議到操作系統(tǒng)對(duì)服務(wù)器性能進(jìn)行優(yōu)化。我們可以應(yīng)用哪些操作系統(tǒng)運(yùn)行機(jī)制進(jìn)行高性能網(wǎng)絡(luò)服務(wù)器的開(kāi)發(fā)?1.高性能網(wǎng)絡(luò)服務(wù)器編程7.3高性能網(wǎng)絡(luò)服務(wù)器編程27如何應(yīng)用以下操作系統(tǒng)運(yùn)行機(jī)制進(jìn)行高性能網(wǎng)絡(luò)服務(wù)器的開(kāi)發(fā)?(1)多進(jìn)程、(2)多線(xiàn)程、(3)線(xiàn)程池2.討論7.3高性能網(wǎng)絡(luò)服務(wù)器編程283.基于多線(xiàn)程的網(wǎng)絡(luò)通信示例在基于多線(xiàn)程的高性能服務(wù)器實(shí)現(xiàn)中,通過(guò)accept()函數(shù)接收來(lái)自客戶(hù)端的連接請(qǐng)求后,需要?jiǎng)?chuàng)建新的線(xiàn)程。在新的線(xiàn)程中,接收來(lái)自客戶(hù)端的數(shù)據(jù),并進(jìn)行數(shù)據(jù)處理,最后將處理結(jié)果返回客戶(hù)端。7.3高性能網(wǎng)絡(luò)服務(wù)器編程293.運(yùn)行結(jié)果7.3高性能網(wǎng)絡(luò)服務(wù)器編程30運(yùn)行中的模擬客戶(hù)端314.高性能網(wǎng)絡(luò)服務(wù)器編程(代碼講解):教師演示學(xué)生訓(xùn)練7.3高性能網(wǎng)絡(luò)服務(wù)器編程目錄:7.1網(wǎng)絡(luò)編程基本知識(shí)7.2基于套接字的網(wǎng)絡(luò)編程7.3高性能網(wǎng)絡(luò)服務(wù)器編程7.4

基于多路復(fù)用的網(wǎng)絡(luò)通信7.5項(xiàng)目實(shí)錄7.4基于多路復(fù)用的網(wǎng)絡(luò)通信33高性能的服務(wù)器往往通過(guò)I/O多路復(fù)用服務(wù)大量客戶(hù)端的連接請(qǐng)求,并為客戶(hù)提供數(shù)據(jù)服務(wù)。我們可以應(yīng)用哪些I/O多路復(fù)用技術(shù)實(shí)現(xiàn)高性能網(wǎng)絡(luò)服務(wù)器的開(kāi)發(fā)?它們之間有什么不同?

1.討論7.4基于多路復(fù)用的網(wǎng)絡(luò)通信341)基于select機(jī)制的網(wǎng)絡(luò)服務(wù)器

雖然select能夠監(jiān)控輸入文件描述符集合、輸出文件描述符集合以及錯(cuò)誤處理文件描述符集合,但本示例程序?qū)⑺械木W(wǎng)絡(luò)通信的套接字放入輸入文件描述符集合進(jìn)行監(jiān)控。7.4基于多路復(fù)用的網(wǎng)絡(luò)通信352)基于poll機(jī)制的網(wǎng)絡(luò)服務(wù)器

在基于poll機(jī)制的網(wǎng)絡(luò)服務(wù)器中,將服務(wù)器套接字和accept函數(shù)返回的套接字封裝成相對(duì)應(yīng)的輸入或輸出事件。然后,通過(guò)poll函數(shù)對(duì)事件進(jìn)行監(jiān)控,一旦事件發(fā)生,Linux內(nèi)核將設(shè)置結(jié)構(gòu)體structpollfd的成員revents。最后,循環(huán)掃描結(jié)構(gòu)體structpollfd數(shù)組并對(duì)發(fā)生對(duì)應(yīng)事件的套接字進(jìn)行處理7.4基于多路復(fù)用的網(wǎng)絡(luò)通信363)基于epoll機(jī)制的網(wǎng)絡(luò)服務(wù)器

epoll是Linux內(nèi)核為處理大批量句柄而作了改進(jìn)的poll,是Linux下多路復(fù)用IO接口select/poll的增強(qiáng)版本,它能顯著減少程序在大量并發(fā)連續(xù)中只有少量活躍的情況下的系統(tǒng)CPU利用率。7.4基于多路復(fù)用的網(wǎng)絡(luò)通信37通過(guò)以下I/O多路復(fù)用技術(shù)實(shí)現(xiàn)高性能網(wǎng)絡(luò)通信:(1)基于select機(jī)制的網(wǎng)絡(luò)服務(wù)器(2)基于poll機(jī)制的網(wǎng)絡(luò)服務(wù)器(3)基于epoll機(jī)制的網(wǎng)絡(luò)服務(wù)器

2.學(xué)生練習(xí):38該代碼文件名network_select.c,通過(guò)gcc將其編譯為可執(zhí)行程序network_select。在測(cè)試過(guò)程中,兩個(gè)客戶(hù)端連接的服務(wù)器均為192.168.3.166,其端口號(hào)為4321。兩個(gè)客戶(hù)端均能夠連接到select的服務(wù)器,并能夠?qū)崿F(xiàn)數(shù)據(jù)的收發(fā)工作,運(yùn)行穩(wěn)定。7.4.1基于select機(jī)制的網(wǎng)絡(luò)服務(wù)器3.運(yùn)行結(jié)果39運(yùn)行中的模擬客戶(hù)端7.4.1基于select機(jī)制的網(wǎng)絡(luò)服務(wù)器401.基于多路復(fù)用的網(wǎng)絡(luò)通信服務(wù)器(代碼講解):教師演示學(xué)生訓(xùn)練7.4基于多路復(fù)用的網(wǎng)絡(luò)通信思考題411.在網(wǎng)絡(luò)通信中,流式和數(shù)據(jù)報(bào)兩種套接字類(lèi)型有什么不同?2.在基于套接字的網(wǎng)絡(luò)通信實(shí)例中,關(guān)閉服務(wù)器程序,并再次運(yùn)行服務(wù)器時(shí),可能出現(xiàn)綁定IP和端口錯(cuò)誤,地址已經(jīng)被占用的提示信息,試分析原因并給與解決。3.簡(jiǎn)述使用TCP協(xié)議的網(wǎng)絡(luò)通信流程。4.在TCP服務(wù)器程序中,accept函數(shù)的作用?

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論