Windows網(wǎng)絡(luò)編程基礎(chǔ)習題解答_第1頁
Windows網(wǎng)絡(luò)編程基礎(chǔ)習題解答_第2頁
Windows網(wǎng)絡(luò)編程基礎(chǔ)習題解答_第3頁
Windows網(wǎng)絡(luò)編程基礎(chǔ)習題解答_第4頁
Windows網(wǎng)絡(luò)編程基礎(chǔ)習題解答_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Windows網(wǎng)絡(luò)編程基礎(chǔ)課后習題作業(yè)軟件1202羅偉(1205290203)第一章:1. TCP/IP協(xié)議棧的五個層次是什么?在這些層次中,每層的主要任務(wù)是什么?解答:TCP/IP參考模型分為五個層次:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層和物理層。以下分別介紹各層的主要功能。應(yīng)用層是網(wǎng)絡(luò)應(yīng)用程序及其應(yīng)用層協(xié)議存留的層次。該層包括了所有與網(wǎng)絡(luò)相關(guān)的高層協(xié)議,如文件傳輸協(xié)議(File Transfer Protocol,F(xiàn)TP)、超文本傳輸協(xié)議(Hypertext Transfer Protocol,HTTP)、Telent(遠程終端協(xié)議)、簡單郵件傳送協(xié)議(Simple Mail Transfer

2、Protocol,SMTP)、因特網(wǎng)中繼聊天(Internet Relay Chat,IRC)、網(wǎng)絡(luò)新聞傳輸協(xié)議(Network News Transfer Protocol,NNTP)等。傳輸層的功能是使源端主機和目標端主機上的對等實體可以進行會話。在傳輸層定義了兩種服務(wù)質(zhì)量不同的協(xié)議,即:傳輸控制協(xié)議(Transmission Control Protocol,TCP)和用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP)。網(wǎng)絡(luò)層是整個TCP/IP協(xié)議棧的核心。它的功能是通過路徑選擇把分組發(fā)往目標網(wǎng)絡(luò)或主機,進行網(wǎng)絡(luò)擁塞控制以及差錯控制。鏈路層負責物理層和網(wǎng)絡(luò)層之間的通信

3、,將網(wǎng)絡(luò)層接收到的數(shù)據(jù)分割成特定的可被物理層傳輸?shù)膸?,并交付物理層進行實際的數(shù)據(jù)傳送。物理層的任務(wù)是將該幀中的一個一個比特從一個節(jié)點移動到下一個節(jié)點。該層中的協(xié)議仍然是鏈路相關(guān)的,并且進一步與鏈路(如雙絞線、單模光纖)的實際傳輸媒體相關(guān)。對應(yīng)于不同的傳輸媒體,跨越這些鏈路移動一個比特的方式不同。2. 請分析路由器、鏈路層交換機和主機分別處理TCP/IP協(xié)議棧中的哪些層次?解答:路由器處理TCP/IP協(xié)議棧的物理層、鏈路層和網(wǎng)絡(luò)層;鏈路層交換機處理TCP/IP協(xié)議棧的物理層和鏈路層;主機處理TCP/IP協(xié)議棧的物理層、鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。3. 請闡述NAT技術(shù)的主要實現(xiàn)方式,并思考N

4、AT技術(shù)對網(wǎng)絡(luò)應(yīng)用程序的使用帶來哪些影響?解答:網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation,NAT)是接入廣域網(wǎng)(WAN)的一種技術(shù),能夠?qū)⑺接校ūA簦┑刂忿D(zhuǎn)化為合法的IP地址,它被廣泛應(yīng)用于各種類型Internet接入方式和各種類型的網(wǎng)絡(luò)中。NAT的實現(xiàn)方式有三種,即靜態(tài)轉(zhuǎn)換、動態(tài)轉(zhuǎn)換和端口多路復用。NAT有效解決了IP地址短缺的問題,但是它也帶來了一些新的問題。主要體現(xiàn)在:處于NAT后面的主機不能充當服務(wù)器直接接收外部主機的連接請求,必須對NAT設(shè)備進行相應(yīng)的配置才能完成外部地址與內(nèi)部服務(wù)器地址的映射;處于不同NAT之后的兩臺主機無法建立直接的UDP或TCP連接,

5、必須使用中介服務(wù)器來幫助它們完成初始化的工作。4. 某業(yè)務(wù)要求實現(xiàn)一個局域網(wǎng)上網(wǎng)行為監(jiān)控的軟件,能夠?qū)钟蚓W(wǎng)內(nèi)用戶的上網(wǎng)行為(包括訪問站點、使用聊天工具、發(fā)布言論等)進行截獲和分析,請選擇一個合適的網(wǎng)絡(luò)程序設(shè)計方法,并說明該軟件設(shè)計的主要流程。解答:選擇使用具有較強數(shù)據(jù)捕獲能力的網(wǎng)絡(luò)編程方法,如WinPcap編程或WinSock編程中的原始套接字。局域網(wǎng)上網(wǎng)行為監(jiān)控軟件的主要流程包括:1) 通過交換機的鏡像端口或分光方式,搭建局域網(wǎng)流量截獲環(huán)境,能夠?qū)⒕钟蚓W(wǎng)上下行的網(wǎng)絡(luò)流量復制出來進行后續(xù)分析;2)對鏡像出的網(wǎng)絡(luò)流量進行捕獲,得到原始數(shù)據(jù);3)對原始數(shù)據(jù)進行過濾,識別并保留與上網(wǎng)行為監(jiān)控相關(guān)的

6、協(xié)議數(shù)據(jù),如HTTP、SMTP、QQ通信協(xié)議等;4)提取不同協(xié)議中監(jiān)控者感興趣的信息,如訪問網(wǎng)址、聊天對象、發(fā)布言論等;5)分析數(shù)據(jù),進行重點用戶監(jiān)控和異常行為檢測。第二章 網(wǎng)絡(luò)程序通信模型習題1. 面向少量客戶持續(xù)請求的服務(wù)器和面向大量客戶短期請求的服務(wù)器在設(shè)計中有哪些區(qū)別?解答:面向少量客戶持續(xù)請求的服務(wù)器在單位時間內(nèi)處理的客戶請求數(shù)量是有限的,但服務(wù)器與每個客戶端之間的交互時間和頻率是持續(xù)的。在這種情況下,服務(wù)器一般設(shè)計為并發(fā)服務(wù)器,為每個客戶端分配專門的線程以處理其復雜的業(yè)務(wù)需求。面向大量客戶短期請求的服務(wù)器在同一時間可能面臨成百上千個客戶的大量請求,但每個客戶端的請求與響應(yīng)比較簡單。

7、在這種情況下,服務(wù)器需要根據(jù)客戶的具體業(yè)務(wù)需求來設(shè)計。如果是類似于時間服務(wù)的單次查詢-響應(yīng)服務(wù),可選擇循環(huán)服務(wù)器串行響應(yīng)每個客戶端的請求,避免線程膨脹和維護的復雜性;如果是類似于Web訪問較復雜的服務(wù),可選擇基于完成端口的異步I/O,與線程池聯(lián)合管理多個客戶端的請求。2. 某業(yè)務(wù)需要實現(xiàn)一個文件服務(wù)器,請給出該文件服務(wù)器的設(shè)計要點。解答:文件服務(wù)器主要處理文件的上傳與下載業(yè)務(wù),在設(shè)計時需要考慮以下要點:1) 用戶鑒別與權(quán)限管理。文件服務(wù)器應(yīng)具備一定的用戶登錄和權(quán)限管理能力,以辨別用戶身份,保護文件訪問的合法性。2) 數(shù)據(jù)傳輸可靠性。為了確保文件服務(wù)器的傳輸可靠性,在傳輸協(xié)議選擇上,可以使用TC

8、P協(xié)議自定義文件傳輸過程,完成數(shù)據(jù)傳輸;或者使用FTP協(xié)議,用控制流進行用戶授權(quán)和傳輸管理,用數(shù)據(jù)流具體傳送文件。3) 數(shù)據(jù)傳輸?shù)男???紤]到用戶上傳和下載大數(shù)據(jù)的現(xiàn)實體驗,文件服務(wù)器應(yīng)提供高效的數(shù)據(jù)傳輸能力,比如使用多線程機制提高效率,使用P2P模型支持多點下載等。4) 斷點續(xù)傳文件服務(wù)器應(yīng)提供斷點續(xù)傳能力,確保在用戶下載過程中斷并恢復后,能夠保存之前的數(shù)據(jù)和狀態(tài)并繼續(xù)后續(xù)的下載任務(wù)。實驗1. 結(jié)合Wireshark網(wǎng)絡(luò)流量分析工具對網(wǎng)頁郵件登錄過程進行捕獲和分析,說明其基本的工作流程。解答:分析流程具體見Windows網(wǎng)絡(luò)編程實驗。2. 結(jié)合Wireshark網(wǎng)絡(luò)流量分析工具對迅雷登錄和文

9、件下載過程進行捕獲和分析,說明其基本的工作流程。解答:分析流程具體見Windows網(wǎng)絡(luò)編程實驗。第三章 網(wǎng)絡(luò)數(shù)據(jù)的內(nèi)容與形態(tài)習題1. 假設(shè)應(yīng)用程序使用有符號短整型給端口號賦值,當端口號大于32768時,端口號的具體值為多少?是否合理?解答:有符號短整型能夠表示的數(shù)據(jù)范圍是-3276832767,當端口號n大于32768時,短整型最左邊一位為1,端口號的值為負數(shù),即-(216-n),這樣表示是不合理的,應(yīng)該選用無符號短整型來描述端口號。2. 大端字節(jié)順序和小端字節(jié)順序是CPU處理多字節(jié)數(shù)的不同方式。例如“漢”字的Unicode編碼是0x6C49。那么存儲在內(nèi)存中時數(shù)據(jù)是如何存儲呢?請在自己的系統(tǒng)

10、平臺下觀察字節(jié)在內(nèi)存中的具體存儲方式。解答:在基于X86平臺的PC機中,漢字的Unicode編碼是6C49,存儲在內(nèi)存中是小端字節(jié)序的,具體存儲順序如下:3. 試考慮一個15字節(jié)的消息結(jié)構(gòu):struct integerMessage uint8_t onebyte;uint16_ttwobytes;uint32_tfourbytes;uint64_teightbytes;請問,該消息結(jié)構(gòu)在內(nèi)存中的實際布置如何?該結(jié)構(gòu)的長度為多少?解答:由于字節(jié)對齊的原因,該消息結(jié)構(gòu)在內(nèi)存中的實際布置如下:該消息結(jié)構(gòu)的長度為16.4. 假設(shè)一個端口掃描應(yīng)用程序被設(shè)計為遞增IP地址和TCP端口,并手工構(gòu)造和發(fā)送T

11、CP掃描包給目標方,那么在每次發(fā)送數(shù)據(jù)前,TCP掃描包的哪些字段需要修改,如何修改?解答:TCP端口掃描程序面向給定的目的主機,對指定的端口范圍進行掃描,掃描過程一般是向目標主機的端口號發(fā)送SYN請求,并接收對方的應(yīng)答,如果對方反饋了SYN應(yīng)答包則說明該端口開放,否則認為端口不開放。手工構(gòu)造TCP掃描包涉及到IP首部和TCP首部的構(gòu)造,那么在探測過程中,每次TCP掃描包需要修改的字段主要有:IP首部中目的IP地址、IP首部的校驗和清零后重新計算、TCP首部的目標端口號、TCP首部的校驗和清零后重新計算。5. 請設(shè)計一個遠程投票系統(tǒng)的消息傳送協(xié)議,具體內(nèi)容包括:1)投票協(xié)議標識2)投票消息類型3

12、)投票候選人標識4)投票結(jié)果使用文本串和二進制兩種方式設(shè)計投票消息以滿足以上需求。解答:基于文本串的消息描述方式需要定義一些固定含義的文本串來標識消息內(nèi)容。比如:“VOT”指明投票協(xié)議,“TYPE:”指明消息類型,“CANDIDATE:”指明候選人,“RESULT:”指明結(jié)果。則一個具體的消息可以表示為由消息標識聲明的文本串,如“VOT TYPE:2;CANDIDATE:peter;RESULT:true”,假設(shè)投票消息傳送協(xié)議基于TCP協(xié)議承載,在具體傳輸過程中,使用一種編碼方式(如:Unicode編碼)對該文本串進行描述,并作為TCP協(xié)議的數(shù)據(jù)部分傳輸?;诙M制的消息描述方式使用固定大小

13、的數(shù)據(jù)區(qū)域存儲消息內(nèi)容,比如設(shè)計投票消息傳送協(xié)議格式如下:定義:協(xié)議標識0x01代表投票協(xié)議 消息類型0x02代表投票消息 候選人標識0x05代表候選人“peter”的唯一標識 投票結(jié)果0x01代表投票,0x02代表反對那么一次對候選人peter的贊成投票的投票消息為:0x01020501.假設(shè)投票消息傳送協(xié)議基于TCP協(xié)議承載,在具體傳輸過程中,二進制描述的投票消息可以直接作為TCP協(xié)議的數(shù)據(jù)部分傳輸。第四章 協(xié)議軟件接口習題1 闡述使用Windows Sockets編程的環(huán)境配置過程。解答:Windows Sockets實現(xiàn)一般由兩部分組成:開發(fā)組件和運行組件。開發(fā)組件是供程序員開發(fā)Win

14、dows Sockets應(yīng)用程序使用的,它包括介紹Windows Sockets實現(xiàn)的文檔、Windows Sockets應(yīng)用程序接口(API)引入庫和一些頭文件。頭文件winsock.h、winsock2.h分別對應(yīng)于WinSock 1.1和WinSock2.2,是Windows Sockets最重要的頭文件,它們包括了Windows Sockets實現(xiàn)所定義的宏、常數(shù)值、數(shù)據(jù)結(jié)構(gòu)和函數(shù)調(diào)用接口原型。運行組件是Windows Sockets應(yīng)用程序接口的動態(tài)鏈接庫(DLL),應(yīng)用程序在執(zhí)行時通過裝入它實現(xiàn)網(wǎng)絡(luò)通信功能。兩個版本的動態(tài)鏈接庫以及與其對應(yīng)的接口引入庫和頭文件如下所示。表4-1 W

15、indows Sockets 版本中相應(yīng)的動態(tài)鏈接庫版本頭文件靜態(tài)鏈接庫文件動態(tài)鏈接庫文件1.1winsock.hwinsock.libwinsock.dll2.2winsock2.hws2_32.libws2_32.dll對動態(tài)鏈接的使用,需要在程序編譯前將對應(yīng)的頭文件引入源文件,以便編譯環(huán)境可以找到相應(yīng)函數(shù)和變量的聲明,并在項目中引入靜態(tài)鏈接庫文件,以便在程序編譯通過后,連接時可以找到套接字函數(shù)的執(zhí)行地址。以Windows Sockets 2.2版本為例,對頭文件的引入使用以下代碼段:#include “winsock2.h”對靜態(tài)鏈接庫的引入使用以下代碼段:#pragma comment

16、(lib,"ws2_32.lib")或者在開發(fā)環(huán)境中的項目菜單中配置增加對“ws2_32.lib”文件的引入,如下圖所示。2 考慮一種提供消息傳遞的操作系統(tǒng),闡述如何擴展應(yīng)用程序接口使其適用于網(wǎng)絡(luò)通信?解答:提供消息傳遞的操作系統(tǒng)典型的例子是Windows操作系統(tǒng),該系統(tǒng)最大的特點是圖形化的操作界面,其圖形化界面是建立在消息處理機制這個基礎(chǔ)之上的。程序不斷等待,等待任何可能的輸入,然后做判斷,根據(jù)不同的消息調(diào)用消息處理函數(shù)進行適當?shù)奶幚怼_@種輸入是操作系統(tǒng)捕捉到后以消息形式(一種數(shù)據(jù)結(jié)構(gòu))進入程序之中的。有了消息機制的推動,套接字接口也可以借助消息機制來通知應(yīng)用程序網(wǎng)絡(luò)事件

17、滿足,具體思路是:首先為應(yīng)用程序創(chuàng)建消息傳遞所需的消息接收窗口和消息隊列;然后定義與網(wǎng)絡(luò)事件相關(guān)聯(lián)的消息;之后通過系統(tǒng)調(diào)用注冊網(wǎng)絡(luò)事件與消息的對應(yīng)關(guān)系;最后,當網(wǎng)絡(luò)事件發(fā)生時,系統(tǒng)觸發(fā)消息通知應(yīng)用程序處理。通過以上基本步驟實現(xiàn)了基于消息機制的異步網(wǎng)絡(luò)操作。 3 闡述程序、套接字、端口和協(xié)議之間的關(guān)系。解答:程序和套接字的關(guān)系:一個程序可以同時使用多個套接字,不同套接字完成不同的傳輸任務(wù)。多個應(yīng)用程序可以同時使用同一個套接字,不過這種情況并不常見。套接字和端口的關(guān)系:每個套接字都有一個關(guān)聯(lián)的本地TCP或UDP端口,它用于把傳入的分組指引到應(yīng)該接收它們的應(yīng)用程序。一個端口上可能關(guān)聯(lián)多個套接字,流式

18、套接字的服務(wù)器上可能同時有監(jiān)聽套接字和連接套接字,它們都與一個TCP的端口號相關(guān)聯(lián);一個套接字一般只會關(guān)聯(lián)一個唯一的本地端口號。端口和協(xié)議的關(guān)系:TCP和UDP的端口號是獨立使用的。實驗1調(diào)用Windows Sockets的API函數(shù)獲得本地主機和遠端域名的IP地址,如果一個主機名稱對應(yīng)了多個IP地址,請依次打印。解答:實現(xiàn)過程具體見Windows網(wǎng)絡(luò)編程實驗。第五章 流式套接字編程習題1. 思考套接字接口層與TCP實現(xiàn)之間的關(guān)系,結(jié)合數(shù)據(jù)發(fā)送和接收分析數(shù)據(jù)的傳遞過程以及兩個層次的具體工作。解答:對應(yīng)于TCP數(shù)據(jù)的發(fā)送和接收,套接字實現(xiàn)設(shè)計了兩個獨立的緩沖區(qū),分別用于緩存應(yīng)用程序請求發(fā)送的數(shù)據(jù)

19、和等待接收的數(shù)據(jù)(一般以先進先出隊列的形式保存)。從應(yīng)用程序?qū)崿F(xiàn)、套接口實現(xiàn)和協(xié)議實現(xiàn)三個層次來觀察數(shù)據(jù)發(fā)送的過程,數(shù)據(jù)發(fā)送在實施過程中主要涉及到兩個緩沖區(qū):一個是應(yīng)用程序發(fā)送緩沖區(qū),即調(diào)用send()函數(shù)時由用戶申請并填充的緩沖區(qū),這個緩沖區(qū)保存了用戶即將使用協(xié)議棧發(fā)送的TCP數(shù)據(jù);另一個是TCP套接口的發(fā)送緩沖區(qū),在這個緩沖區(qū)中保存了TCP協(xié)議尚未發(fā)送的數(shù)據(jù)和已發(fā)送但未得到確認的數(shù)據(jù)。數(shù)據(jù)發(fā)送涉及到兩個層次的寫操作:從應(yīng)用程序發(fā)送緩沖區(qū)拷貝數(shù)據(jù)到TCP套接口的發(fā)送緩沖區(qū),和從TCP套接口的發(fā)送緩存將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)中。數(shù)據(jù)接收在實施過程中主要涉及到另外兩個緩沖區(qū),一個是TCP套接口的接收緩沖

20、區(qū),在這個緩沖區(qū)中保存了TCP協(xié)議從網(wǎng)絡(luò)中接收到的與該套接口相關(guān)的數(shù)據(jù);另一個是應(yīng)用程序的接收緩沖區(qū),即調(diào)用recv()函數(shù)時由用戶分配的緩沖區(qū),這個緩沖區(qū)用于保存從TCP套接口的接收緩存收到并提交給應(yīng)用程序的網(wǎng)絡(luò)數(shù)據(jù)。數(shù)據(jù)接收也涉及到兩個層次的寫操作:從網(wǎng)絡(luò)上接收數(shù)據(jù)保存到TCP套接口的接收緩沖區(qū),和從TCP套接口的接收緩沖區(qū)拷貝數(shù)據(jù)到應(yīng)用程序的接收緩沖區(qū)中。2. 在基于流式套接字的網(wǎng)絡(luò)應(yīng)用程序設(shè)計中,假設(shè)客戶端以8字節(jié)-12字節(jié)-8字節(jié)-12字節(jié)的順序交替發(fā)送數(shù)據(jù)給服務(wù)器,請思考,服務(wù)器的接收操作每次能夠接收到多少字節(jié)的數(shù)據(jù)?為什么?解答:服務(wù)器接收操作每次能夠接收到的數(shù)據(jù)長度是不確定的,

21、這是因為TCP傳送數(shù)據(jù)的形態(tài)是沒有間隔的字節(jié)流,數(shù)據(jù)接收僅與接收調(diào)用的時間和當前主機內(nèi)核緩存中尚未提交應(yīng)用程序的數(shù)據(jù)有關(guān),與發(fā)送端發(fā)送多少次和TCP如何傳送沒有直接的關(guān)系,我們不能準確地預測一個特定的接收操作到底返回多少字節(jié)。3. 思考使用TCP進行數(shù)據(jù)傳輸?shù)膽?yīng)用程序是否一定不會出現(xiàn)數(shù)據(jù)丟失?應(yīng)用程序應(yīng)在哪些具體操作上考慮可靠性問題?解答:使用TCP進行數(shù)據(jù)傳輸?shù)膽?yīng)用程序也可能會出現(xiàn)數(shù)據(jù)丟失,這是因為TCP是一個端到端的協(xié)議,這意味著通信的雙方只關(guān)心自己提供了一個可靠的傳輸機制,“端”是對等方的TCP協(xié)議實現(xiàn),而不是對等方的應(yīng)用程序。應(yīng)用程序的可靠性需要應(yīng)用程序自己提供。導致TCP傳輸出現(xiàn)失敗

22、的現(xiàn)象有:在正常的TCP連接上,TCP確認的數(shù)據(jù)實際上有可能不會到達它的目的應(yīng)用程序,服務(wù)器的TCP實現(xiàn)不確認接收到了數(shù)據(jù),如:發(fā)生永久的或暫時的網(wǎng)絡(luò)紊亂,對等方的應(yīng)用程序崩潰,對等方的應(yīng)用程序運行的主機崩潰等。網(wǎng)絡(luò)程序設(shè)計人員應(yīng)注意到這些失敗模式對TCP應(yīng)用程序的影響,在數(shù)據(jù)發(fā)送、接收、連接關(guān)閉等操作上,注意函數(shù)調(diào)用時機,關(guān)注函數(shù)調(diào)用結(jié)果,盡可能全面地處理TCP傳輸中可能遇到的失敗模式。實驗1. 使用流式套接字編程設(shè)計一個并發(fā)的回射服務(wù)器,該服務(wù)器具有并發(fā)處理客戶請求的功能,當多個客戶端同時請求服務(wù)器回射時,服務(wù)器能夠同時接收到多個客戶端的請求并相應(yīng)做出回射響應(yīng)。解答:實現(xiàn)過程具體見Wind

23、ows網(wǎng)絡(luò)編程實驗。2. 設(shè)計一個網(wǎng)絡(luò)測試程序,客戶端能夠模擬“發(fā)送-發(fā)送-接收”的操作序列,采用send()和WSASend()兩種發(fā)送方式進行請求發(fā)送,測試在這兩種發(fā)送操作下服務(wù)器的響應(yīng)時間有何差別,并說明原因。解答:實現(xiàn)過程具體見Windows網(wǎng)絡(luò)編程實驗。第六章 數(shù)據(jù)報套接字編程習題3. 思考套接字接口層與UDP實現(xiàn)之間的關(guān)系,結(jié)合數(shù)據(jù)發(fā)送和接收分析數(shù)據(jù)的傳遞過程以及兩個層次的具體工作。解答:數(shù)據(jù)發(fā)送過程和接收過程類似,以數(shù)據(jù)接收為例,從應(yīng)用程序?qū)崿F(xiàn)、套接口實現(xiàn)和協(xié)議實現(xiàn)三個層次來觀察接收的過程,數(shù)據(jù)接收在實施過程中主要涉及到兩個緩沖區(qū),一個是UDP套接口的接收緩沖區(qū),在這個緩沖區(qū)中保

24、存了UDP協(xié)議從網(wǎng)絡(luò)中接收到的與該套接口相關(guān)的數(shù)據(jù);另一個是應(yīng)用程序的接收緩沖區(qū),即調(diào)用recvfrom()函數(shù)時由用戶分配的緩沖區(qū)recvbuf,這個緩沖區(qū)用于保存從UDP套接口的接收緩存收到并提交給應(yīng)用程序的網(wǎng)絡(luò)數(shù)據(jù)。數(shù)據(jù)接收涉及到兩個層次的寫操作:從網(wǎng)絡(luò)上接收數(shù)據(jù)保存到UDP套接口的接收緩沖區(qū),和從UDP套接口的接收緩沖區(qū)拷貝數(shù)據(jù)到應(yīng)用程序的接收緩沖區(qū)中,如下圖所示。4. 在基于數(shù)據(jù)報套接字的網(wǎng)絡(luò)應(yīng)用程序設(shè)計中,假設(shè)客戶端向服務(wù)器發(fā)送了兩個數(shù)據(jù)報,一個報文長度為800字節(jié),另一個報文長度為1200字節(jié),設(shè)置服務(wù)器端的接收緩沖區(qū)為1000字節(jié),進行三次接收操作,請思考,服務(wù)器在三次接收操作

25、時各發(fā)生何種現(xiàn)象,實際接收到的字節(jié)長度為多少? 解答:第一次接收操作接收到完整的800字節(jié)的報文,recvfrom()函數(shù)返回800;第二次接收操作接收1000字節(jié)的報文,recvfrom()函數(shù)返回1000,第二個報文后續(xù)的200字節(jié)內(nèi)容被截斷丟棄;第三次接收操作依賴于套接字的工作模式,如果是阻塞模式,則接收函數(shù)阻塞,如果設(shè)置了接收超時,則在超時時間到時返回接收超時錯誤;如果是非阻塞模式,則接收函數(shù)立刻返回,錯誤類型是WSAEWOULDBLOCK.5. 總結(jié)使用UDP進行數(shù)據(jù)傳輸?shù)膽?yīng)用程序應(yīng)在哪些具體操作上考慮可靠性問題?解答:由于UDP協(xié)議是一個不可靠的協(xié)議,使用UDP進行數(shù)據(jù)傳輸?shù)膽?yīng)用程

26、序會因為網(wǎng)絡(luò)環(huán)境、主機環(huán)境的差異帶來數(shù)據(jù)傳遞過程中發(fā)生丟失、亂序、重復等問題,那么在程序運行過程中需要考慮:發(fā)送操作:發(fā)送出去的數(shù)據(jù)可能會丟失,需要考慮超時重傳問題;發(fā)送目的地可能并不存在,需要判斷目的應(yīng)用程序的狀態(tài)。接收操作:接收到的數(shù)據(jù)可能重復,需要判斷重復數(shù)據(jù);接收到的數(shù)據(jù)可能是噪音,需要排除噪音;接收到的數(shù)據(jù)可能亂序,需要考慮重組;可能無法接收到預期的數(shù)據(jù),需要考慮反饋確認和流量控制問題。實驗1. 設(shè)計一個網(wǎng)絡(luò)測試程序,客戶端能夠高速發(fā)送數(shù)據(jù),服務(wù)器端接收數(shù)據(jù)并統(tǒng)計接收到的數(shù)據(jù)報文個數(shù),測試當前系統(tǒng)和網(wǎng)絡(luò)環(huán)境下,服務(wù)器的丟包率為多少?解答:實現(xiàn)過程具體見Windows網(wǎng)絡(luò)編程實驗。2.

27、 在上題的測試程序基礎(chǔ)上,修改系統(tǒng)接收緩存,測試系統(tǒng)接收緩存的大小與程序丟包率之間的關(guān)系,并解釋原因。解答:實現(xiàn)過程具體見Windows網(wǎng)絡(luò)編程實驗。第七章 原始套接字編程習題1. 原始套接字在處理數(shù)據(jù)發(fā)送和接收時與流式套接字和數(shù)據(jù)報套接字有哪些不同?解答:在使用原始套接字進行數(shù)據(jù)傳輸?shù)木幊踢^程中,增加了諸多操作,如套接字選項的設(shè)置、傳輸協(xié)議首部的構(gòu)造、網(wǎng)卡工作模式的設(shè)定以及接收數(shù)據(jù)的過濾與判斷等。使用原始套接字發(fā)送數(shù)據(jù)需要填寫的數(shù)據(jù)內(nèi)容更加復雜,根據(jù)應(yīng)用的不同,原始套接字可以有兩種數(shù)據(jù)填充的選擇:僅構(gòu)造IP數(shù)據(jù)或構(gòu)造IP首部和IP數(shù)據(jù)。此時程序設(shè)計人員需要根據(jù)實際需要對套接字選項IP_HDR

28、INCL進行配置。使用原始套接字接收數(shù)據(jù)時,網(wǎng)絡(luò)接口提交給原始套接字的數(shù)據(jù)并不一定是網(wǎng)卡接收到的所有數(shù)據(jù),如果希望得到特定類型的數(shù)據(jù)包,應(yīng)用程序需要對套接字的接收進行控制,設(shè)定接收選項SIO_RCVALL,或者通過bind()、connect()函數(shù)明確端點地址。由于原始套接字的數(shù)據(jù)傳輸也是無連接的,網(wǎng)絡(luò)接口提交給原始套接字的數(shù)據(jù)很可能存在噪音,因此在接收到數(shù)據(jù)后,需要對數(shù)據(jù)進行一定條件的過濾。2. 某程序員在Windows 7環(huán)境下,使用原始套接字構(gòu)造TCP的SYN請求實現(xiàn)半開端口掃描,但結(jié)果發(fā)現(xiàn)網(wǎng)絡(luò)中并沒有看到SYN請求的發(fā)送,請分析原因并給出解決思路。解答:在Windows環(huán)境下,原始套

29、接字的支持一直是個備受爭議的問題,不同版本的Windows環(huán)境對原始套接字給出了一些限制。在Windows7、Windows Vista、Windows XP SP2和Windows XP SP3中,通過原始套接字發(fā)送數(shù)據(jù)的能力受到了諸多限制,其中對TCP的限制是TCP的數(shù)據(jù)不能通過原始套接字發(fā)送。因此,如果仍要在Windows7環(huán)境下開發(fā)SYN半開端口掃描,那么需要選擇其它的編程方法,如WinPcap編程。實驗1. 使用原始套接字編程,實現(xiàn)UDP回射客戶端的主要功能。該客戶端具備IP原始數(shù)據(jù)包的構(gòu)造、發(fā)送和接收功能,能夠從控制臺獲取用戶輸入,將用戶輸入的字符串作為UDP的數(shù)據(jù)填充回射請求,發(fā)

30、送給回射服務(wù)器,接收服務(wù)器發(fā)回的響應(yīng),并將響應(yīng)打印到命令行中。解答:實現(xiàn)過程具體見Windows網(wǎng)絡(luò)編程實驗。2. 設(shè)計一個路徑探測器,能夠?qū)崿F(xiàn)類似于traceroute功能,獲取從探測源到達目的主機的路由器路徑和延遲。解答:實現(xiàn)過程具體見Windows網(wǎng)絡(luò)編程實驗。第八章 網(wǎng)絡(luò)通信中的I/O操作習題1. 簡述阻塞與非阻塞、同步與異步的區(qū)別。解答:同步和異步概念與消息的通知機制有關(guān)。對于消息處理者而言,在同步的情況下,由處理消息者自己去等待消息是否被觸發(fā);在異步的情況下,由觸發(fā)機制來通知處理消息者,然后進行消息的處理。同步和異步僅僅是關(guān)于所關(guān)注的消息如何通知的機制,而不是處理消息的機制。阻塞和

31、非阻塞與消息的處理機制有關(guān)。阻塞模式是指在指定套接字上調(diào)用函數(shù)執(zhí)行操作時,在沒有完成操作之前,函數(shù)不會立即返回。非阻塞模式是指在指定套接字上調(diào)用函數(shù)執(zhí)行操作時,無論操作是否完成,函數(shù)都會立即返回。同步與阻塞,異步與非阻塞并不是兩對相同的概念,要注意消息的通知和消息的處理是不同的。2. 簡述WSAAsyncSelect模型和WSAEventSelect模型的主要區(qū)別和各自在使用中的優(yōu)缺點。解答:WSAAsyncSelect模型和WSAEventSelect模型都是Windows Sockets引入的異步處理網(wǎng)絡(luò)I/O的基本方法。WSAEventSelect模型與基于WSAAsyncSelect的

32、異步I/O模型的最主要的區(qū)別是網(wǎng)絡(luò)事件發(fā)生時系統(tǒng)通知應(yīng)用程序的方式不同。WSAAsyncSelect模型依賴消息通知,而WSAEventSelect模型允許在多個套接字上接收以事件為基礎(chǔ)的網(wǎng)絡(luò)事件的通知。WSAAsyncSelect模型基于Windows消息機制實現(xiàn),其優(yōu)點是:在系統(tǒng)開銷不大的情況下可以較簡單地同時處理多個客戶端的網(wǎng)絡(luò)I/O。其缺點是:消息的運轉(zhuǎn)需要有消息隊列,為了支持消息機制,就必須創(chuàng)建一個窗口來接收消息,另外,在一個窗口中處理大量的消息也可能成為性能的瓶頸。WSAEventSelect模型不依賴于消息,所以可以在沒有窗口的環(huán)境下比較簡單地實現(xiàn)對網(wǎng)絡(luò)通信的異步操作。該模型的缺

33、點是等待的事件對象的總數(shù)是有限制的(每次只能等待64個事件),在有些應(yīng)用中可能會因此受到限制。3. 假設(shè)某Web服務(wù)器使用TCP協(xié)議通信,在同一時間會有上萬個客戶端同時在線訪問,試選擇一種網(wǎng)絡(luò)I/O通信的模型,使其能夠充分發(fā)揮服務(wù)器所在系統(tǒng)的性能,并闡明原因。解答:選擇使用完成端口模型處理網(wǎng)絡(luò)I/O,該模型內(nèi)部提供了線程池的管理,可以避免反復創(chuàng)建線程的開銷,同時可以根據(jù)CPU的個數(shù)靈活地決定線程個數(shù),減少線程調(diào)度的次數(shù),從而提高了程序的并行處理能力。由于其穩(wěn)定、高效的并發(fā)通信能力,該模型適合于具有大量并發(fā)用戶請求的場合。4. 假設(shè)某時間服務(wù)器使用UDP協(xié)議通信,同一時間僅有少量客戶端請求,每次請求的主要過程是建立連接后獲取時間,之后斷開連接,試選擇一種適合的網(wǎng)絡(luò)I/O通信模型,并闡明原因。解答:選擇使用WSAAsyncSelect模型或WSAEventSelect模型處理網(wǎng)絡(luò)I/O,這兩個模型使用異步方式進行I/O事件通知,不會使應(yīng)用程序阻塞于網(wǎng)絡(luò)事件的等待上,靈活性較好,同時程序的實現(xiàn)比較簡單,可

溫馨提示

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

最新文檔

評論

0/150

提交評論