卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

Windows網(wǎng)絡(luò)編程基礎(chǔ)-習(xí)題解答

Windows 網(wǎng)絡(luò)編程基礎(chǔ)課后習(xí)題作業(yè)軟件1202 羅偉(1205290203)第一章:1. TCP/IP協(xié)議棧的五個(gè)層次是什么?在這些層次中,每層的主要任務(wù)是什么?解答:TCP/IP參考模型

Windows 網(wǎng)絡(luò)編程基礎(chǔ)課后習(xí)題作業(yè)

軟件1202 羅偉(1205290203)

第一章:

1. TCP/IP協(xié)議棧的五個(gè)層次是什么?在這些層次中,每層的主要任務(wù)是什么?

解答:TCP/IP參考模型分為五個(gè)層次:應(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 (遠(yuǎn)程終端協(xié)議)、簡(jiǎn)單郵件傳送協(xié)議(Simple Mail Transfer Protocol,SMTP )、因特網(wǎng)中繼聊天(Internet Relay Chat ,IRC )、網(wǎng)絡(luò)新聞傳輸協(xié)議(Network News Transfer Protocol,NNTP )等。

傳輸層的功能是使源端主機(jī)和目標(biāo)端主機(jī)上的對(duì)等實(shí)體可以進(jìn)行會(huì)話(huà)。在傳輸層定義了兩種服務(wù)質(zhì)量不同的協(xié)議,即:傳輸控制協(xié)議(Transmission Control Protocol ,TCP )和用戶(hù)數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol,UDP )。

網(wǎng)絡(luò)層是整個(gè)TCP/IP協(xié)議棧的核心。它的功能是通過(guò)路徑選擇把分組發(fā)往目標(biāo)網(wǎng)絡(luò)或主機(jī),進(jìn)行網(wǎng)絡(luò)擁塞控制以及差錯(cuò)控制。

鏈路層負(fù)責(zé)物理層和網(wǎng)絡(luò)層之間的通信,將網(wǎng)絡(luò)層接收到的數(shù)據(jù)分割成特定的可被物理層傳輸?shù)膸?,并交付物理層進(jìn)行實(shí)際的數(shù)據(jù)傳送。

物理層的任務(wù)是將該幀中的一個(gè)一個(gè)比特從一個(gè)節(jié)點(diǎn)移動(dòng)到下一個(gè)節(jié)點(diǎn)。該層中的協(xié)議

,

仍然是鏈路相關(guān)的,并且進(jìn)一步與鏈路(如雙絞線(xiàn)、單模光纖)的實(shí)際傳輸媒體相關(guān)。對(duì)應(yīng)于不同的傳輸媒體,跨越這些鏈路移動(dòng)一個(gè)比特的方式不同。

2. 請(qǐng)分析路由器、鏈路層交換機(jī)和主機(jī)分別處理TCP/IP協(xié)議棧中的哪些層次?

解答:路由器處理TCP/IP協(xié)議棧的物理層、鏈路層和網(wǎng)絡(luò)層;

鏈路層交換機(jī)處理TCP/IP協(xié)議棧的物理層和鏈路層;

主機(jī)處理TCP/IP協(xié)議棧的物理層、鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。

3. 請(qǐng)闡述NAT 技術(shù)的主要實(shí)現(xiàn)方式,并思考NAT 技術(shù)對(duì)網(wǎng)絡(luò)應(yīng)用程序的使用帶來(lái)哪些影

響?

解答:網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation,NAT )是接入廣域網(wǎng)(W AN )的一種技術(shù),能夠?qū)⑺接校ūA簦┑刂忿D(zhuǎn)化為合法的IP 地址,它被廣泛應(yīng)用于各種類(lèi)型Internet 接入方式和各種類(lèi)型的網(wǎng)絡(luò)中。NA T 的實(shí)現(xiàn)方式有三種,即靜態(tài)轉(zhuǎn)換、動(dòng)態(tài)轉(zhuǎn)換和端口多路復(fù)用。

NA T 有效解決了IP 地址短缺的問(wèn)題,但是它也帶來(lái)了一些新的問(wèn)題。主要體現(xiàn)在: 處于NAT 后面的主機(jī)不能充當(dāng)服務(wù)器直接接收外部主機(jī)的連接請(qǐng)求,必須對(duì)NAT 設(shè)備進(jìn)行相應(yīng)的配置才能完成外部地址與內(nèi)部服務(wù)器地址的映射;

處于不同NA T 之后的兩臺(tái)主機(jī)無(wú)法建立直接的UDP 或TCP 連接,必須使用中介服務(wù)器來(lái)幫助它們完成初始化的工作。

4. 某業(yè)務(wù)要求實(shí)現(xiàn)一個(gè)局域網(wǎng)上網(wǎng)行為監(jiān)控的軟件,能夠?qū)钟蚓W(wǎng)內(nèi)用戶(hù)的上網(wǎng)行為(包

括訪(fǎng)問(wèn)站點(diǎn)、使用聊天工具、發(fā)布言論等)進(jìn)行截獲和分析,請(qǐng)選擇一個(gè)合適的網(wǎng)絡(luò)程序設(shè)計(jì)方法,并說(shuō)明該軟件設(shè)計(jì)的主要流程。

解答:選擇使用具有較強(qiáng)數(shù)據(jù)捕獲能力的網(wǎng)絡(luò)編程方法,如WinPcap 編程或WinSock 編程中的原始套接字。局域網(wǎng)上網(wǎng)行為監(jiān)控軟件的主要流程包括:

1) 通過(guò)交換機(jī)的鏡像端口或分光方式,搭建局域網(wǎng)流量截獲環(huán)境,能夠?qū)⒕钟蚓W(wǎng)上下行的網(wǎng)絡(luò)流量復(fù)制出來(lái)進(jìn)行后續(xù)分析;

2)對(duì)鏡像出的網(wǎng)絡(luò)流量進(jìn)行捕獲,得到原始數(shù)據(jù);

,

3)對(duì)原始數(shù)據(jù)進(jìn)行過(guò)濾,識(shí)別并保留與上網(wǎng)行為監(jiān)控相關(guān)的協(xié)議數(shù)據(jù),如HTTP 、SMTP 、QQ 通信協(xié)議等;

4)提取不同協(xié)議中監(jiān)控者感興趣的信息,如訪(fǎng)問(wèn)網(wǎng)址、聊天對(duì)象、發(fā)布言論等;

5)分析數(shù)據(jù),進(jìn)行重點(diǎn)用戶(hù)監(jiān)控和異常行為檢測(cè)。

第二章 網(wǎng)絡(luò)程序通信模型

習(xí)題

1. 面向少量客戶(hù)持續(xù)請(qǐng)求的服務(wù)器和面向大量客戶(hù)短期請(qǐng)求的服務(wù)器在設(shè)計(jì)中有哪些區(qū)

別?

解答:面向少量客戶(hù)持續(xù)請(qǐng)求的服務(wù)器在單位時(shí)間內(nèi)處理的客戶(hù)請(qǐng)求數(shù)量是有限的,但服務(wù)器與每個(gè)客戶(hù)端之間的交互時(shí)間和頻率是持續(xù)的。在這種情況下,服務(wù)器一般設(shè)計(jì)為并發(fā)服務(wù)器,為每個(gè)客戶(hù)端分配專(zhuān)門(mén)的線(xiàn)程以處理其復(fù)雜的業(yè)務(wù)需求。

面向大量客戶(hù)短期請(qǐng)求的服務(wù)器在同一時(shí)間可能面臨成百上千個(gè)客戶(hù)的大量請(qǐng)求,但每個(gè)客戶(hù)端的請(qǐng)求與響應(yīng)比較簡(jiǎn)單。在這種情況下,服務(wù)器需要根據(jù)客戶(hù)的具體業(yè)務(wù)需求來(lái)設(shè)計(jì)。如果是類(lèi)似于時(shí)間服務(wù)的單次查詢(xún)-響應(yīng)服務(wù),可選擇循環(huán)服務(wù)器串行響應(yīng)每個(gè)客戶(hù)端的請(qǐng)求,避免線(xiàn)程膨脹和維護(hù)的復(fù)雜性;如果是類(lèi)似于Web 訪(fǎng)問(wèn)較復(fù)雜的服務(wù),可選擇基于完成端口的異步I/O,與線(xiàn)程池聯(lián)合管理多個(gè)客戶(hù)端的請(qǐng)求。

2. 某業(yè)務(wù)需要實(shí)現(xiàn)一個(gè)文件服務(wù)器,請(qǐng)給出該文件服務(wù)器的設(shè)計(jì)要點(diǎn)。

解答:文件服務(wù)器主要處理文件的上傳與下載業(yè)務(wù),在設(shè)計(jì)時(shí)需要考慮以下要點(diǎn):

1) 用戶(hù)鑒別與權(quán)限管理。

文件服務(wù)器應(yīng)具備一定的用戶(hù)登錄和權(quán)限管理能力,以辨別用戶(hù)身份,保護(hù)文件訪(fǎng)問(wèn)的合法性。

2) 數(shù)據(jù)傳輸可靠性。

,

為了確保文件服務(wù)器的傳輸可靠性,在傳輸協(xié)議選擇上,可以使用TCP 協(xié)議自定義文件傳輸過(guò)程,完成數(shù)據(jù)傳輸;或者使用FTP 協(xié)議,用控制流進(jìn)行用戶(hù)授權(quán)和傳輸管理,用數(shù)據(jù)流具體傳送文件。

3) 數(shù)據(jù)傳輸?shù)男省?/p>

考慮到用戶(hù)上傳和下載大數(shù)據(jù)的現(xiàn)實(shí)體驗(yàn),文件服務(wù)器應(yīng)提供高效的數(shù)據(jù)傳輸能力,比如使用多線(xiàn)程機(jī)制提高效率,使用P2P 模型支持多點(diǎn)下載等。

4) 斷點(diǎn)續(xù)傳

文件服務(wù)器應(yīng)提供斷點(diǎn)續(xù)傳能力,確保在用戶(hù)下載過(guò)程中斷并恢復(fù)后,能夠保存之前的數(shù)據(jù)和狀態(tài)并繼續(xù)后續(xù)的下載任務(wù)。

實(shí)驗(yàn)

1. 結(jié)合Wireshark 網(wǎng)絡(luò)流量分析工具對(duì)網(wǎng)頁(yè)郵件登錄過(guò)程進(jìn)行捕獲和分析,說(shuō)明其基本的

工作流程。

解答:分析流程具體見(jiàn)《Windows 網(wǎng)絡(luò)編程實(shí)驗(yàn)》。

2. 結(jié)合Wireshark 網(wǎng)絡(luò)流量分析工具對(duì)迅雷登錄和文件下載過(guò)程進(jìn)行捕獲和分析,說(shuō)明其

基本的工作流程。

解答:分析流程具體見(jiàn)《Windows 網(wǎng)絡(luò)編程實(shí)驗(yàn)》。

第三章 網(wǎng)絡(luò)數(shù)據(jù)的內(nèi)容與形態(tài)

習(xí)題

1. 假設(shè)應(yīng)用程序使用有符號(hào)短整型給端口號(hào)賦值,當(dāng)端口號(hào)大于32768時(shí),端口號(hào)的具體

值為多少?是否合理?

解答:有符號(hào)短整型能夠表示的數(shù)據(jù)范圍是-32768~32767,當(dāng)端口號(hào)n 大于32768時(shí),短整型最左邊一位為1,端口號(hào)的值為負(fù)數(shù),即-(216-n ),這樣表示是不合理的,應(yīng)該選用無(wú)符號(hào)短整型來(lái)描述端口號(hào)。

,

2. 大端字節(jié)順序和小端字節(jié)順序是CPU 處理多字節(jié)數(shù)的不同方式。例如“漢”字的Unicode

編碼是0x6C49。那么存儲(chǔ)在內(nèi)存中時(shí)數(shù)據(jù)是如何存儲(chǔ)呢?請(qǐng)?jiān)谧约旱南到y(tǒng)平臺(tái)下觀(guān)察字節(jié)在內(nèi)存中的具體存儲(chǔ)方式。

解答:在基于X86平臺(tái)的PC 機(jī)中,漢字的Unicode 編碼是6C49,存儲(chǔ)在內(nèi)存中是小端字節(jié)序的,具體存儲(chǔ)順序如下:

數(shù)值: 0x6c49015小端字節(jié)順序0x490x6c

3. 試考慮一個(gè)15字節(jié)的消息結(jié)構(gòu):

struct integerMessage {

uint8_t onebyte;

uint16_t twobytes;

uint32_t fourbytes;

uint64_t eightbytes;

}

請(qǐng)問(wèn),該消息結(jié)構(gòu)在內(nèi)存中的實(shí)際布置如何?該結(jié)構(gòu)的長(zhǎng)度為多少?

解答:由于字節(jié)對(duì)齊的原因,該消息結(jié)構(gòu)在內(nèi)存中的實(shí)際布置如下:

4. 假設(shè)一個(gè)端口掃描應(yīng)用程序被設(shè)計(jì)為遞增IP 地址和TCP 端口,并手工構(gòu)造和發(fā)送TCP 掃描包給目標(biāo)方,那么在每次發(fā)送數(shù)據(jù)前,TCP 掃描包的哪些字段需要修改,如何修改?

解答:TCP 端口掃描程序面向給定的目的主機(jī),對(duì)指定的端口范圍進(jìn)行掃描,掃描過(guò)程一般是向目標(biāo)主機(jī)的端口號(hào)發(fā)送SYN 請(qǐng)求,并接收對(duì)方的應(yīng)答,如果對(duì)方反饋了SYN 應(yīng)答包則說(shuō)明該端口開(kāi)放,否則認(rèn)為端口不開(kāi)放。

手工構(gòu)造TCP 掃描包涉及到IP 首部和TCP 首部的構(gòu)造,那么在探測(cè)過(guò)程中,每次TCP 掃描包需要修改的字段主要有:IP 首部中目的IP 地址、IP 首部的校驗(yàn)和清零后重新計(jì)算、TCP 首部的目標(biāo)端口號(hào)、TCP 首部的校驗(yàn)和清零后重新計(jì)算。

5. 請(qǐng)?jiān)O(shè)計(jì)一個(gè)遠(yuǎn)程投票系統(tǒng)的消息傳送協(xié)議,具體內(nèi)容包括:

,

1)投票協(xié)議標(biāo)識(shí)

2)投票消息類(lèi)型

3)投票候選人標(biāo)識(shí)

4)投票結(jié)果

使用文本串和二進(jìn)制兩種方式設(shè)計(jì)投票消息以滿(mǎn)足以上需求。

解答:基于文本串的消息描述方式需要定義一些固定含義的文本串來(lái)標(biāo)識(shí)消息內(nèi)容。比如:“VOT ”指明投票協(xié)議,“TYPE :”指明消息類(lèi)型,“CANDIDATE :”指明候選人,“RESULT :”指明結(jié)果。則一個(gè)具體的消息可以表示為由消息標(biāo)識(shí)聲明的文本串,如“VOT TYPE :2;CANDIDATE :peter ;RESULT :true ”,假設(shè)投票消息傳送協(xié)議基于TCP 協(xié)議承載,在具體傳輸過(guò)程中,使用一種編碼方式(如:Unicode 編碼)對(duì)該文本串進(jìn)行描述,并作為T(mén)CP 協(xié)議的數(shù)據(jù)部分傳輸。

基于二進(jìn)制的消息描述方式使用固定大小的數(shù)據(jù)區(qū)域存儲(chǔ)消息內(nèi)容,比如設(shè)計(jì)投票消息傳送協(xié)議格式如下:

015

定義:協(xié)議標(biāo)識(shí)0x01代表投票協(xié)議

消息類(lèi)型0x02代表投票消息

候選人標(biāo)識(shí)0x05代表候選人“peter ”的唯一標(biāo)識(shí)

投票結(jié)果0x01代表投票,0x02代表反對(duì)

那么一次對(duì)候選人peter 的贊成投票的投票消息為:0x01020501.

假設(shè)投票消息傳送協(xié)議基于TCP 協(xié)議承載,在具體傳輸過(guò)程中,二進(jìn)制描述的投票消息可以直接作為T(mén)CP 協(xié)議的數(shù)據(jù)部分傳輸。

,

第四章 協(xié)議軟件接口

習(xí)題

1. 闡述使用Windows Sockets編程的環(huán)境配置過(guò)程。

解答:Windows Sockets實(shí)現(xiàn)一般由兩部分組成:開(kāi)發(fā)組件和運(yùn)行組件。

開(kāi)發(fā)組件是供程序員開(kāi)發(fā)Windows Sockets 應(yīng)用程序使用的,它包括介紹Windows Sockets 實(shí)現(xiàn)的文檔、Windows Sockets 應(yīng)用程序接口(API )引入庫(kù)和一些頭文件。頭文件winsock.h 、winsock2.h 分別對(duì)應(yīng)于WinSock 1.1和WinSock2.2,是Windows Sockets最重要的頭文件,它們包括了Windows Sockets實(shí)現(xiàn)所定義的宏、常數(shù)值、數(shù)據(jù)結(jié)構(gòu)和函數(shù)調(diào)用接口原型。

運(yùn)行組件是Windows Sockets 應(yīng)用程序接口的動(dòng)態(tài)鏈接庫(kù)(DLL ),應(yīng)用程序在執(zhí)行時(shí)通過(guò)裝入它實(shí)現(xiàn)網(wǎng)絡(luò)通信功能。兩個(gè)版本的動(dòng)態(tài)鏈接庫(kù)以及與其對(duì)應(yīng)的接口引入庫(kù)和頭文件如下所示。

表4-1 Windows Sockets 版本中相應(yīng)的動(dòng)態(tài)鏈接庫(kù)

對(duì)動(dòng)態(tài)鏈接的使用,需要在程序編譯前將對(duì)應(yīng)的頭文件引入源文件,以便編譯環(huán)境可以找到相應(yīng)函數(shù)和變量的聲明,并在項(xiàng)目中引入靜態(tài)鏈接庫(kù)文件,以便在程序編譯通過(guò)后,連接時(shí)可以找到套接字函數(shù)的執(zhí)行地址。

以Windows Sockets 2.2版本為例,對(duì)頭文件的引入使用以下代碼段:

#include “winsock2.h ”

對(duì)靜態(tài)鏈接庫(kù)的引入使用以下代碼段:

#pragma comment(lib,"ws2_32.lib")

,

或者在開(kāi)發(fā)環(huán)境中的項(xiàng)目菜單中配置增加對(duì)“ws2_32.lib”文件的引入,如下圖所示。

2. 考慮一種提供消息傳遞的操作系統(tǒng),闡述如何擴(kuò)展應(yīng)用程序接口使其適用于網(wǎng)絡(luò)通信?

解答:提供消息傳遞的操作系統(tǒng)典型的例子是Windows 操作系統(tǒng),該系統(tǒng)最大的特點(diǎn)是圖形化的操作界面,其圖形化界面是建立在消息處理機(jī)制這個(gè)基礎(chǔ)之上的。程序不斷等待,等待任何可能的輸入,然后做判斷,根據(jù)不同的消息調(diào)用消息處理函數(shù)進(jìn)行適當(dāng)?shù)奶幚?。這種輸入是操作系統(tǒng)捕捉到后以消息形式(一種數(shù)據(jù)結(jié)構(gòu))進(jìn)入程序之中的。

有了消息機(jī)制的推動(dòng),套接字接口也可以借助消息機(jī)制來(lái)通知應(yīng)用程序網(wǎng)絡(luò)事件滿(mǎn)足,具體思路是:首先為應(yīng)用程序創(chuàng)建消息傳遞所需的消息接收窗口和消息隊(duì)列;然后定義與網(wǎng)絡(luò)事件相關(guān)聯(lián)的消息;之后通過(guò)系統(tǒng)調(diào)用注冊(cè)網(wǎng)絡(luò)事件與消息的對(duì)應(yīng)關(guān)系;最后,當(dāng)網(wǎng)絡(luò)事件發(fā)生時(shí),系統(tǒng)觸發(fā)消息通知應(yīng)用程序處理。通過(guò)以上基本步驟實(shí)現(xiàn)了基于消息機(jī)制的異步網(wǎng)絡(luò)操作。

3. 闡述程序、套接字、端口和協(xié)議之間的關(guān)系。

解答:程序和套接字的關(guān)系:一個(gè)程序可以同時(shí)使用多個(gè)套接字,不同套接字完成不同的傳輸任務(wù)。多個(gè)應(yīng)用程序可以同時(shí)使用同一個(gè)套接字,不過(guò)這種情況并不常見(jiàn)。

套接字和端口的關(guān)系:每個(gè)套接字都有一個(gè)關(guān)聯(lián)的本地TCP 或UDP 端口,它用于把傳入的分組指引到應(yīng)該接收它們的應(yīng)用程序。一個(gè)端口上可能關(guān)聯(lián)多個(gè)套接字,流式套接字的

,

服務(wù)器上可能同時(shí)有監(jiān)聽(tīng)套接字和連接套接字,它們都與一個(gè)TCP 的端口號(hào)相關(guān)聯(lián);一個(gè)套接字一般只會(huì)關(guān)聯(lián)一個(gè)唯一的本地端口號(hào)。

端口和協(xié)議的關(guān)系:TCP 和UDP 的端口號(hào)是獨(dú)立使用的。

實(shí)驗(yàn)

1.調(diào)用Windows Sockets的API 函數(shù)獲得本地主機(jī)和遠(yuǎn)端域名的IP 地址,如果一個(gè)主機(jī)名稱(chēng)對(duì)應(yīng)了多個(gè)IP 地址,請(qǐng)依次打印。

解答:實(shí)現(xiàn)過(guò)程具體見(jiàn)《Windows 網(wǎng)絡(luò)編程實(shí)驗(yàn)》。

第五章 流式套接字編程

習(xí)題

1. 思考套接字接口層與TCP 實(shí)現(xiàn)之間的關(guān)系,結(jié)合數(shù)據(jù)發(fā)送和接收分析數(shù)據(jù)的傳遞過(guò)程

以及兩個(gè)層次的具體工作。

解答:對(duì)應(yīng)于TCP 數(shù)據(jù)的發(fā)送和接收,套接字實(shí)現(xiàn)設(shè)計(jì)了兩個(gè)獨(dú)立的緩沖區(qū),分別用于緩存應(yīng)用程序請(qǐng)求發(fā)送的數(shù)據(jù)和等待接收的數(shù)據(jù)(一般以先進(jìn)先出隊(duì)列的形式保存)。

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

數(shù)據(jù)接收在實(shí)施過(guò)程中主要涉及到另外兩個(gè)緩沖區(qū),一個(gè)是TCP 套接口的接收緩沖區(qū),在這個(gè)緩沖區(qū)中保存了TCP 協(xié)議從網(wǎng)絡(luò)中接收到的與該套接口相關(guān)的數(shù)據(jù);另一個(gè)是應(yīng)用程序的接收緩沖區(qū),即調(diào)用recv()函數(shù)時(shí)由用戶(hù)分配的緩沖區(qū),這個(gè)緩沖區(qū)用于保存從TCP

,

套接口的接收緩存收到并提交給應(yīng)用程序的網(wǎng)絡(luò)數(shù)據(jù)。數(shù)據(jù)接收也涉及到兩個(gè)層次的寫(xiě)操作:從網(wǎng)絡(luò)上接收數(shù)據(jù)保存到TCP 套接口的接收緩沖區(qū),和從TCP 套接口的接收緩沖區(qū)拷貝數(shù)據(jù)到應(yīng)用程序的接收緩沖區(qū)中。

2. 在基于流式套接字的網(wǎng)絡(luò)應(yīng)用程序設(shè)計(jì)中,假設(shè)客戶(hù)端以8字節(jié)-12字節(jié)-8字節(jié)-12字

節(jié)的順序交替發(fā)送數(shù)據(jù)給服務(wù)器,請(qǐng)思考,服務(wù)器的接收操作每次能夠接收到多少字節(jié)的數(shù)據(jù)?為什么?

解答:服務(wù)器接收操作每次能夠接收到的數(shù)據(jù)長(zhǎng)度是不確定的,這是因?yàn)門(mén)CP 傳送數(shù)據(jù)的形態(tài)是沒(méi)有間隔的字節(jié)流,數(shù)據(jù)接收僅與接收調(diào)用的時(shí)間和當(dāng)前主機(jī)內(nèi)核緩存中尚未提交應(yīng)用程序的數(shù)據(jù)有關(guān),與發(fā)送端發(fā)送多少次和TCP 如何傳送沒(méi)有直接的關(guān)系,我們不能準(zhǔn)確地預(yù)測(cè)一個(gè)特定的接收操作到底返回多少字節(jié)。

3. 思考使用TCP 進(jìn)行數(shù)據(jù)傳輸?shù)膽?yīng)用程序是否一定不會(huì)出現(xiàn)數(shù)據(jù)丟失?應(yīng)用程序應(yīng)在哪

些具體操作上考慮可靠性問(wèn)題?

解答:使用TCP 進(jìn)行數(shù)據(jù)傳輸?shù)膽?yīng)用程序也可能會(huì)出現(xiàn)數(shù)據(jù)丟失,這是因?yàn)門(mén)CP 是一個(gè)端到端的協(xié)議,這意味著通信的雙方只關(guān)心自己提供了一個(gè)可靠的傳輸機(jī)制,“端”是對(duì)等方的TCP 協(xié)議實(shí)現(xiàn),而不是對(duì)等方的應(yīng)用程序。應(yīng)用程序的可靠性需要應(yīng)用程序自己提供。

導(dǎo)致TCP 傳輸出現(xiàn)失敗的現(xiàn)象有:在正常的TCP 連接上,TCP 確認(rèn)的數(shù)據(jù)實(shí)際上有可能不會(huì)到達(dá)它的目的應(yīng)用程序,服務(wù)器的TCP 實(shí)現(xiàn)不確認(rèn)接收到了數(shù)據(jù),如:發(fā)生永久的或暫時(shí)的網(wǎng)絡(luò)紊亂,對(duì)等方的應(yīng)用程序崩潰,對(duì)等方的應(yīng)用程序運(yùn)行的主機(jī)崩潰等。

網(wǎng)絡(luò)程序設(shè)計(jì)人員應(yīng)注意到這些失敗模式對(duì)TCP 應(yīng)用程序的影響,在數(shù)據(jù)發(fā)送、接收、連接關(guān)閉等操作上,注意函數(shù)調(diào)用時(shí)機(jī),關(guān)注函數(shù)調(diào)用結(jié)果,盡可能全面地處理TCP 傳輸中可能遇到的失敗模式。

實(shí)驗(yàn)

1. 使用流式套接字編程設(shè)計(jì)一個(gè)并發(fā)的回射服務(wù)器,該服務(wù)器具有并發(fā)處理客戶(hù)請(qǐng)求的功

能,當(dāng)多個(gè)客戶(hù)端同時(shí)請(qǐng)求服務(wù)器回射時(shí),服務(wù)器能夠同時(shí)接收到多個(gè)客戶(hù)端的請(qǐng)求并相應(yīng)做出回射響應(yīng)。

標(biāo)簽: