停止等待協(xié)議的實(shí)現(xiàn)_第1頁(yè)
停止等待協(xié)議的實(shí)現(xiàn)_第2頁(yè)
停止等待協(xié)議的實(shí)現(xiàn)_第3頁(yè)
停止等待協(xié)議的實(shí)現(xiàn)_第4頁(yè)
停止等待協(xié)議的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(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)介

1、v1.0可編輯可修改福建農(nóng)林大學(xué)計(jì)算機(jī)與信息學(xué)院課程設(shè)計(jì)報(bào)告11課程名稱:計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)題目:停止等待協(xié)議的實(shí)現(xiàn)名:系:業(yè):計(jì)算機(jī)計(jì)算機(jī)科學(xué)與技術(shù)級(jí):口,號(hào):指導(dǎo)教師:稱:2011 年 6 月 10 日福建農(nóng)林大學(xué)計(jì)算機(jī)與信息學(xué)院課程設(shè)計(jì)報(bào)告結(jié)果評(píng)定評(píng)語(yǔ):成績(jī):指導(dǎo)教師簽字:評(píng)定日期:1、課程設(shè)計(jì)的目的和任務(wù)2、 課程設(shè)計(jì)的要求3、課程設(shè)計(jì)的分析與設(shè)計(jì)設(shè)計(jì)任務(wù)分析 設(shè)計(jì)方案論證 詳纟田設(shè)計(jì) 3、系統(tǒng)實(shí)施 4、總結(jié)與體會(huì) 5、參考文獻(xiàn) 附錄:源代碼 45579911停止等待協(xié)議的實(shí)現(xiàn)1、課程設(shè)計(jì)的目的和任務(wù)計(jì)算機(jī)網(wǎng)絡(luò)課程講述計(jì)算機(jī)網(wǎng)絡(luò)的原理,尤其是TCP/IP協(xié)議棧的原理和應(yīng)用,是一門(mén)理論性

2、、應(yīng)用性、實(shí)踐性都比較強(qiáng)的課程。而此次的課程設(shè)計(jì)是在學(xué)習(xí)完計(jì)算機(jī)網(wǎng)絡(luò)課程后進(jìn)行的一次全面的綜合能力的檢驗(yàn)。計(jì)算機(jī)網(wǎng)絡(luò)的課程設(shè)計(jì)是從原理和實(shí)踐的角度,在計(jì)算機(jī)上編程模擬實(shí)現(xiàn)計(jì)算機(jī) 網(wǎng)絡(luò)的基本協(xié)議。通過(guò)本次課程設(shè)計(jì),使我們對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的原理能有更加深刻的認(rèn) 識(shí)和理解,同時(shí)進(jìn)一步鍛煉自己的動(dòng)手能力。在這次課程設(shè)計(jì)中,我設(shè)計(jì)的的是通過(guò)編譯語(yǔ)言,編程模擬實(shí)現(xiàn)數(shù)據(jù)鏈路層協(xié)議 中的停止等協(xié)議。2、課程設(shè)計(jì)的要求通過(guò)雙方的收發(fā)數(shù)據(jù)而達(dá)到相互通信的目的。3、課程設(shè)計(jì)的分析與設(shè)計(jì)設(shè)計(jì)任務(wù)分析停止等待協(xié)議是數(shù)據(jù)鏈路層的幾個(gè)協(xié)議中最簡(jiǎn)單的協(xié)議,是具有最簡(jiǎn)單流量控win sock制的數(shù)據(jù)鏈路層協(xié)議,是數(shù)據(jù)鏈路層各種協(xié)議

3、的基礎(chǔ)。此課程設(shè)計(jì)是基于 編程,是在VC+勺MFC界面下和控制臺(tái)下實(shí)現(xiàn)的。它采用客戶機(jī)/服務(wù)器(C/S)模 型,即發(fā)送數(shù)據(jù)的一端為客戶端,接收數(shù)據(jù)的一端為服務(wù)器端。停止等待協(xié)議就是通 過(guò)雙方的收發(fā)數(shù)據(jù)而達(dá)到相互通信的目的。本課程設(shè)計(jì)通過(guò)編程模擬實(shí)現(xiàn)停止等待協(xié)議, 隨機(jī)的發(fā)送數(shù)據(jù),通過(guò)服務(wù)器的的 接受結(jié)果和客戶端的接受結(jié)果顯示理解停止等待協(xié)議的原理,掌握其應(yīng)用。設(shè)計(jì)方案論證當(dāng)收方收到一個(gè)正確的數(shù)據(jù)幀后,便會(huì)向發(fā)方發(fā)送一個(gè)確認(rèn)幀ACK表示發(fā)送的數(shù)據(jù)正確接收。當(dāng)發(fā)方收到確認(rèn)幀后才能發(fā)送一個(gè)新的數(shù)據(jù)幀,這樣就實(shí)現(xiàn)了接收方 對(duì)發(fā)送方的流量控制。由于通信線路質(zhì)量各方面的影響,數(shù)據(jù)幀從發(fā)送方到接收方傳輸?shù)倪^(guò)

4、程中可能會(huì) 出現(xiàn)差錯(cuò)。為了保證數(shù)據(jù)的正確性和完整性, 接收方在收到數(shù)據(jù)后,會(huì)用一定的方法 對(duì)接收到的數(shù)據(jù)進(jìn)行差錯(cuò)檢驗(yàn),所以接收方很容易檢測(cè)出收到的數(shù)據(jù)幀是否出現(xiàn)差錯(cuò)。當(dāng)接收方發(fā)現(xiàn)收到的數(shù)據(jù)出現(xiàn)差錯(cuò)時(shí),就會(huì)向發(fā)送方發(fā)送一個(gè)否認(rèn)幀NAK表示對(duì)方發(fā)送的數(shù)據(jù)錯(cuò)誤。發(fā)送方會(huì)根據(jù)接收方發(fā)來(lái)的信息做出相應(yīng)的操作。 采用這樣的 有效的檢錯(cuò)機(jī)制,數(shù)據(jù)鏈路層可以對(duì)上面的網(wǎng)絡(luò)層提供了可靠的傳輸?shù)姆?wù)。詳細(xì)設(shè)計(jì)停止等待協(xié)議的算法如下:為了對(duì)停止等待算法有一個(gè)完整而準(zhǔn)確的理解, 下面 給出此協(xié)議的算法。具有最簡(jiǎn)單流量控制的數(shù)據(jù)鏈路層協(xié)議假定1:鏈路是理想的傳輸信道,所傳送的任何數(shù)據(jù)既不會(huì)出差錯(cuò)也不會(huì)丟失。假定2 :不管

5、發(fā)方以多快的速率發(fā)送數(shù)據(jù),收方總是來(lái)得及收下,并及時(shí)上交 主機(jī)。這個(gè)假定就相當(dāng)于認(rèn)為:接收端向主機(jī)交付數(shù)據(jù)的速率永遠(yuǎn)不會(huì)低于發(fā)送端發(fā)送 數(shù)據(jù)的速率。現(xiàn)在去掉上述的第二個(gè)假定。但是,仍然保留第一個(gè)假定,即主機(jī)A向主機(jī)B傳輸數(shù)據(jù)的信道仍然是無(wú)差錯(cuò)的理想信道。 然而現(xiàn)在不能保證接收端向主機(jī)交付數(shù)據(jù) 的速率永遠(yuǎn)不低于發(fā)送端發(fā)送數(shù)據(jù)的速率。由收方控制發(fā)方的數(shù)據(jù)流,乃是計(jì)算機(jī)網(wǎng)絡(luò)中流量控制的一個(gè)基本方法。簡(jiǎn)單解釋?zhuān)菏辗矫拷邮艿桨l(fā)方一幀后,回復(fù)確認(rèn)幀,讓發(fā)方繼續(xù)發(fā)送下一幀,并且 收方將數(shù)據(jù)幀交給上層軟件識(shí)別,出現(xiàn)錯(cuò)誤就將幀丟掉.在接收結(jié)點(diǎn):等待。(2) 若收到由發(fā)送結(jié)點(diǎn)發(fā)過(guò)來(lái)的數(shù)據(jù)幀,則將其放入數(shù)據(jù)鏈路層的

6、接收緩存。(3) 將接收緩存中的數(shù)據(jù)幀上交主機(jī)。(4) 向發(fā)送結(jié)點(diǎn)發(fā)一信息,表示數(shù)據(jù)幀已經(jīng)上交給主機(jī)。轉(zhuǎn)到在發(fā)送結(jié)點(diǎn):(1)從主機(jī)取一個(gè)數(shù)據(jù)幀。將數(shù)據(jù)幀送到數(shù)據(jù)鏈路層的發(fā)送緩存。將發(fā)送緩存中的數(shù)據(jù)幀發(fā)送出去。等待。若收到由接收結(jié)點(diǎn)發(fā)過(guò)來(lái)的信息(此信息的格式與內(nèi)容可由雙方事先商定好),則從主機(jī)取一個(gè)新的數(shù)據(jù)幀,然后轉(zhuǎn)到(2) 0因此,在設(shè)計(jì)編程模擬實(shí)現(xiàn)停止等待協(xié)議時(shí),因具體考慮有關(guān)幀的一些知識(shí)。幀的結(jié)構(gòu):幀的類(lèi)型幀的序號(hào)幀的確認(rèn)號(hào)數(shù)據(jù)信息(可變)校驗(yàn)位幀的結(jié)構(gòu)幀的類(lèi)型(frame_kind )分為數(shù)據(jù)幀(data_frame ),確認(rèn)幀(ack_frame )和 否認(rèn)幀(nak_frame)三種

7、。發(fā)送方向接收方發(fā)送數(shù)據(jù),是以幀為單位的,就稱為數(shù)據(jù)幀。它的數(shù)據(jù)信息是可 變的,但最佳的幀長(zhǎng)為1500個(gè)字節(jié)。接收方接收數(shù)據(jù)后,會(huì)對(duì)收到的數(shù)據(jù)幀進(jìn)行差錯(cuò)校驗(yàn),當(dāng)數(shù)據(jù)正確時(shí),就會(huì)向發(fā) 送方發(fā)送一個(gè)確認(rèn)幀,以表示發(fā)送方發(fā)送的數(shù)據(jù)正確接收了, 反之,就會(huì)向發(fā)送方發(fā) 送一個(gè)否認(rèn)幀,并把這個(gè)出錯(cuò)的數(shù)據(jù)幀丟棄。幀的序號(hào)(seq):由于采用的是單工通信,幀的結(jié)構(gòu)中用的控制域也很少,這個(gè)域會(huì)隨著幀類(lèi)型的 不同而不同:對(duì)數(shù)據(jù)幀來(lái)說(shuō):序號(hào)(seq)表示的是發(fā)送端發(fā)送的幀的序號(hào)。它表示seq對(duì)確認(rèn)幀來(lái)說(shuō):序號(hào)(seq)表示的是接收方希望接收到的幀的序號(hào),以前的各幀都已經(jīng)正確接收,希望收到序號(hào)為seq的幀。對(duì)否認(rèn)幀來(lái)

8、說(shuō):序號(hào)(seq)也是表示接收方希望收到的數(shù)據(jù)幀的序號(hào),表示接 收方已經(jīng)收到序號(hào)為seq的幀,但是這個(gè)幀出現(xiàn)錯(cuò)誤,希望發(fā)送方重新發(fā)送該數(shù)據(jù)幀。停止等待協(xié)議采用的是單工通信, 接收端向發(fā)送端發(fā)送的確認(rèn)幀和否認(rèn)幀中沒(méi)有 數(shù)據(jù)信息,它們的數(shù)據(jù)域?yàn)榭铡S捎谑菃喂ねㄐ?,發(fā)送方只發(fā)送數(shù)據(jù),所以發(fā)送方幀 的“幀的確認(rèn)號(hào)”中并沒(méi)有包含任何的確認(rèn)信息。3、系統(tǒng)實(shí)施此次課程設(shè)計(jì)通過(guò)C+編程基本上模擬實(shí)現(xiàn)了數(shù)據(jù)鏈路層中的停止等待協(xié)議,但是程序中存在一定的不足,沒(méi)有能夠完全的體現(xiàn)停止等待協(xié)議的的工作原理。在此課 程設(shè)計(jì)中,數(shù)據(jù)的發(fā)送是隨機(jī)生成的。運(yùn)行結(jié)果截圖如下所示:服務(wù)器端的運(yùn)行截圖:叭''C Da

9、currients and Settings Admin istrator 面©建玄件夾',謝£口卅斗.目回Uaitinsr for client connecting* tips : Ctrl-c t:D quit f客戶端的運(yùn)行截圖:結(jié)果如下所示:客戶端:武"CDocuments and 3ettingsAdministratorV 面料建文件Visual+*.pacFet racket packet £end<) paclte t paclfet pAclct packet senil< > racket98 lias b

10、een sent* 5? lias been sent! 160 lias been succcssed甲liaslias las liassentiIBl162163164been been been beensent? sentT senti sentsuGcessed165 tiAS beensent?Press an key to continue.服務(wù)器端:曲 T:Documents and Sctt1ngs Adniniratar4laitin9 fo護(hù) client connectinsrt bips r Cti*l+c to quitTAccepted client: 127.

11、0,0,1:373 recuO A success"?i*ecu<> b successdf i*e c u ( >c successd!Fight pftchutfrecw<> d rec> e recw(> f recw<> gsuccessdf successdT successdT succ essd?packet!recwO h £uccefisdfPpess arty kgy to continue4、總結(jié)與體會(huì)經(jīng)過(guò)這幾天的課程設(shè)計(jì),通過(guò)查閱相關(guān)的資料和以前的學(xué)習(xí)以及和同學(xué)之間的交 流最終能夠較成功的實(shí)現(xiàn)該課

12、程設(shè)計(jì)。停止等待協(xié)議是數(shù)據(jù)鏈路層的一個(gè)重要協(xié)議, 也是計(jì)算機(jī)網(wǎng)絡(luò)中的一個(gè)重要協(xié)議。 在進(jìn)行課程設(shè)計(jì)時(shí)我遇到了不少的困難, 通過(guò)同 學(xué)的幫助和查閱相關(guān)的資料,最終解決了問(wèn)題,模擬實(shí)現(xiàn)了停止等待協(xié)議。在設(shè)計(jì)過(guò)程中,剛開(kāi)始時(shí),沒(méi)有能夠?qū)崿F(xiàn)客戶端和服務(wù)器的連接, 最終導(dǎo)致客戶 端發(fā)送數(shù)據(jù)的失敗,從而導(dǎo)致服務(wù)器端的接收失敗。經(jīng)過(guò)查閱相關(guān)的資料,找到了錯(cuò) 誤的所在,并實(shí)現(xiàn)了停止等待協(xié)議的功能。 此外,此次課程設(shè)計(jì)中的一個(gè)難點(diǎn)就是客 戶端發(fā)送數(shù)據(jù)采用的是隨機(jī)函數(shù)rand()產(chǎn)生隨機(jī)發(fā)送的數(shù)據(jù)。5、參考文獻(xiàn)謝希仁計(jì)算機(jī)網(wǎng)絡(luò)電子工業(yè)出版社v1.0可編輯可修改13附錄:源代碼發(fā)送端:()#in elude <

13、;> #in elude <> #in elude <> #p ragma eomme nt(lib,"") #define SERVER_PORT 7300 / 偵聽(tīng)端口客戶端向服務(wù)器傳送的結(jié)構(gòu):struct BAG char p acket;void main (i nt argc, char *argv)WORD wVersio nRequested;WSADATA wsaData;int ret,i,ra,data=0;地址信息SOCKET sClie nt,sListe n;struct sockaddr_i n saServer;/

14、struct BAG bag;char *ptr = (char *)&bag;BOOL fSuccess = TRUE;Win Sock初始化:wVersio nRequested = MAKEWORD(2, 2);/ 希望使用的 Win Sock DLL 的版本ret = WSAStartu p( wVersio nRequested, &wsaData );if (ret != 0)prin tf("WSAStartu p() failed!n");return;確認(rèn) Win Sock DLL支持版本:if (LOBYTE != 2 | HIBYTE(

15、 ) != 2 )WSAClea nup();prin tf("I nvalid Win sock vers ion!n");return;創(chuàng)建socket,使用TCP協(xié)議:sClie nt = socket(AF_INET, SOCK_STREAM, IPP ROTO_TC P);sListen = socket(AF_INET, SOCK_STREAM, IPP ROTO_TC P);if(sClie nt = INVALID_SOCKET)WSAClea nup();prin tf("socket() failed!n");return;構(gòu)建服務(wù)器

16、地址信息:=AF_INET;/地址家族=htons(SERVER_PORT);/轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序連接服務(wù)器:ret = conn ect(sClie nt, (struct sockaddr *)&saServer, sizeof(saServer);if (ret = SOCKET_ERROR)prin tf("c onn ect() successed!n");closesocket(sClie nt);/ 關(guān)閉套接字WSACIea nup();return;按照預(yù)定協(xié)議,客戶端將發(fā)送一個(gè)數(shù)字:for(i=97;iv=104;i+)ra = ran d()%11

17、;if(ra%5 = 1) data+=i;else data=i;=data;ret = sen d(sClie nt, (char *)&bag, sizeof(bag), 0);ret = recv(sListe n, ptr, sizeof(bag), 0);if!=i)prin tf("se nd()successed!n");con ti nue;else if=i)prin tf(" packet %d has bee n sen t!n",i+1);closesocket(sClie nt);WSAClea nup ();接受端(

18、):#in clude <> #in clude <>v1.0可編輯可修改#in elude <> #in elude <> #p ragma eomme nt(lib,"") #define SERVER_PORT 7300 / 偵聽(tīng)端口客戶端向服務(wù)器傳送的結(jié)構(gòu):struct BAGchar p acket;void mai n()WORD wVersio nRequested;WSADATA wsaData;int ret, nLeft,le ngth;地址信息SOCKET sListe n, sServer; /偵聽(tīng)套接

19、字,連接套接字struct sockaddr_i n saServer, saClie nt;/struct BAG bag;char *p tr,* pp;Win Sock初始化:wVersio nRequested = MAKEWORD(2, 2);/ 希望使用的 Win Sock DLL 的版本ret = WSAStartu p( wVersio nRequested, &wsaData);if (ret != 0)prin tf("WSAStartu p() failed!n");return;確認(rèn) Win Sock DLL支持版本:if (LOBYTE !

20、= 2 | HIBYTE( ) != 2 )#v1.0可編輯可修改WSACIea nup();prin tf("l nvalid Win sock versio n!n");return;創(chuàng)建Socket,使用TCP協(xié)議:sListen = socket(AF_INET, SOCK_STREAM, IPP ROTO_TC P);if(sListen = INVALID_SOCKET)WSAClea nup();prin tf("socket() failed!n");return;構(gòu)建本地地址信息:=AF_INET;/地址家族=htons(SERVER_

21、PORT);/轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序=htonl(INADDR_ANY);/ 使用 INADDR_AN指示任意地址綁定:ret = bind(sListen,(struct sockaddr *)&saServer, sizeof(saServer);if (ret = SOCKET_ERROR)prin tf("bi nd() failed! code:%dn", WSAGetLastError();closesocket(sListe n);/關(guān)閉套接字WSAClea nup();return;偵聽(tīng)連接請(qǐng)求:15v1.0可編輯可修改ret = liste n( sLi

22、ste n, 5);if (ret = SOCKET_ERROR)prin tf("liste n() failed! code:%dn", WSAGetLastError();closesocket(sListe n);/關(guān)閉套接字WSAClea nup();return;prin tf("Waiti ng for clie nt conn ecti ng!n");prin tf("ti ps : Ctrl+c to quit!n");阻塞等待接受客戶端連接:len gth = sizeof(saClie nt);sServer = acce pt(sListe n, (struct sockaddr *)&saClie nt, & le ngth);if(sServe

溫馨提示

  • 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)論