下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、青島農(nóng)業(yè)大學(xué)理學(xué)與信息科學(xué)學(xué)院計(jì)算機(jī)網(wǎng)絡(luò)與通信課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目停止等待協(xié)議的編程模擬學(xué)生專(zhuān)業(yè)班級(jí)計(jì)本05學(xué)生姓名(學(xué)號(hào))指導(dǎo)教師完成時(shí)間2007年10月17日實(shí)習(xí)(設(shè)計(jì))地點(diǎn)機(jī)房2007年10月17日停止等待協(xié)議的編程模擬一、課程設(shè)計(jì)目的和任務(wù)計(jì)算機(jī)網(wǎng)絡(luò)與通信課程講述計(jì)算機(jī)網(wǎng)絡(luò)的原理,尤其是TCP/IP協(xié)議棧的原理和應(yīng)用,是一門(mén)理論性、應(yīng)用性、實(shí)踐性都比較強(qiáng)的課程。計(jì)算機(jī)網(wǎng)絡(luò)與通信實(shí)習(xí)是學(xué)習(xí)完計(jì)算機(jī)網(wǎng)絡(luò)與通信課程后進(jìn)行的一次全面的綜合實(shí)習(xí),是本專(zhuān)業(yè)實(shí)踐性重要環(huán)節(jié)之一。計(jì)算機(jī)網(wǎng)絡(luò)與通信實(shí)習(xí)是從原理和實(shí)踐的角度,在計(jì)算機(jī)上編程模擬實(shí)現(xiàn)計(jì)算機(jī)網(wǎng)絡(luò)的基本協(xié)議。通過(guò)本實(shí)習(xí),使我們對(duì)計(jì)算機(jī)網(wǎng)絡(luò)的原理能
2、有更加深刻的認(rèn)識(shí)和理解,同時(shí)進(jìn)一步鍛煉自己的動(dòng)手能力。在這次課程設(shè)計(jì)中,我設(shè)計(jì)的的是通過(guò)編譯語(yǔ)言,編程模擬實(shí)現(xiàn)數(shù)據(jù)鏈路層協(xié)議中的停止等協(xié)議。二、分析與設(shè)計(jì)1. 設(shè)計(jì)任務(wù)分析:停止等待協(xié)議是數(shù)據(jù)鏈路層的幾個(gè)協(xié)議中最簡(jiǎn)單的協(xié)議,是具有最簡(jiǎn)單流量控制的數(shù)據(jù)鏈路層協(xié)議,是數(shù)據(jù)鏈路層各種協(xié)議的基礎(chǔ)。此課程設(shè)計(jì)是基于winsock編程,是在VC+6.0的MFC界面下和控制臺(tái)下實(shí)現(xiàn)的。它采用客戶(hù)機(jī)/服務(wù)器(C/S)模型,即發(fā)送數(shù)據(jù)的一端為客戶(hù)端,接收數(shù)據(jù)的一端為服務(wù)器端。停止等待協(xié)議就是通過(guò)雙方的收發(fā)數(shù)據(jù)而達(dá)到相互通信的目的。本課程設(shè)計(jì)通過(guò)編程模擬實(shí)現(xiàn)停止等待協(xié)議,隨機(jī)的發(fā)送數(shù)據(jù),通過(guò)服務(wù)器的的接受結(jié)果和客
3、戶(hù)端的接受結(jié)果顯示理解停止等待協(xié)議的原理,掌握其應(yīng)用。2. 設(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ā)送方的流量控制。由于通信線(xiàn)路質(zhì)量各方面的影響,數(shù)據(jù)幀從發(fā)送方到接收方傳輸?shù)倪^(guò)程中可能會(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)的操作。采用這樣的
4、有效的檢錯(cuò)機(jī)制,數(shù)據(jù)鏈路層可以對(duì)上面的網(wǎng)絡(luò)層提供了可靠的傳輸?shù)姆?wù)。3詳細(xì)設(shè)計(jì)停止等待協(xié)議的算法如下:為了對(duì)停止等待算法有一個(gè)完整而準(zhǔn)確的理解,下面給出此協(xié)議的算法。具有最簡(jiǎn)單流量控制的數(shù)據(jù)鏈路層協(xié)議假定1:鏈路是理想的傳輸信道,所傳送的任何數(shù)據(jù)既不會(huì)出差錯(cuò)也不會(huì)丟失。假定2:不管發(fā)方以多快的速率發(fā)送數(shù)據(jù),收方總是來(lái)得及收下,并及時(shí)上交主機(jī)。這個(gè)假定就相當(dāng)于認(rèn)為:接收端向主機(jī)交付數(shù)據(jù)的速率永遠(yuǎn)不會(huì)低于發(fā)送端發(fā)送數(shù)據(jù)的速率?,F(xiàn)在去掉上述的第二個(gè)假定。但是,仍然保留第一個(gè)假定,即主機(jī)A向主機(jī)B傳輸數(shù)據(jù)的信道仍然是無(wú)差錯(cuò)的理想信道。然而現(xiàn)在不能保證接收端向主機(jī)交付數(shù)據(jù)的速率永遠(yuǎn)不低于發(fā)送端發(fā)送數(shù)據(jù)的
5、速率。由收方控制發(fā)方的數(shù)據(jù)流,乃是計(jì)算機(jī)網(wǎng)絡(luò)中流量控制的一個(gè)基本方法。簡(jiǎn)單解釋:收方每接受到發(fā)方一幀后,回復(fù)確認(rèn)幀,讓發(fā)方繼續(xù)發(fā)送下一幀,并且收方將數(shù)據(jù)幀交給上層軟件識(shí)別,出現(xiàn)錯(cuò)誤就將幀丟掉.在接收結(jié)點(diǎn):(1) 等待。(2) 若收到由發(fā)送結(jié)點(diǎn)發(fā)過(guò)來(lái)的數(shù)據(jù)幀,則將其放入數(shù)據(jù)鏈路層的接收緩存。(3) 將接收緩存中的數(shù)據(jù)幀上交主機(jī)。(4) 向發(fā)送結(jié)點(diǎn)發(fā)一信息,表示數(shù)據(jù)幀已經(jīng)上交給主機(jī)。(5) 轉(zhuǎn)到(1)在發(fā)送結(jié)點(diǎn):(1) 從主機(jī)取一個(gè)數(shù)據(jù)幀。(2) 將數(shù)據(jù)幀送到數(shù)據(jù)鏈路層的發(fā)送緩存。(3) 將發(fā)送緩存中的數(shù)據(jù)幀發(fā)送出去。(4) 等待。(5) 若收到由接收結(jié)點(diǎn)發(fā)過(guò)來(lái)的信息(此信息的格式與內(nèi)容可由雙方事
6、先商定好),則從主機(jī)取一個(gè)新的數(shù)據(jù)幀,然后轉(zhuǎn)到(2)。因此,在設(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)三種。發(fā)送方向接收方發(fā)送數(shù)據(jù),是以幀為單位的,就稱(chēng)為數(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ù)
7、據(jù)幀丟棄。幀的序號(hào)(seq):由于采用的是單工通信,幀的結(jié)構(gòu)中用的控制域也很少,這個(gè)域會(huì)隨著幀類(lèi)型的不同而不同:對(duì)數(shù)據(jù)幀來(lái)說(shuō):序號(hào)(seq)表示的是發(fā)送端發(fā)送的幀的序號(hào)。對(duì)確認(rèn)幀來(lái)說(shuō):序號(hào)(seq)表示的是接收方希望接收到的幀的序號(hào),它表示seq以前的各幀都已經(jīng)正確接收,希望收到序號(hào)為seq的幀。對(duì)否認(rèn)幀來(lái)說(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)榭?。由于是單工通信,發(fā)送方只發(fā)送數(shù)據(jù),所以發(fā)送方幀的“幀的
8、確認(rèn)號(hào)”中并沒(méi)有包含任何的確認(rèn)信息。4源代碼:發(fā)送端:(client.cpp)#include<stdio.h>#include<winsock2.h>#include<time.h>#pragmacomment(lib,"Ws2_32.lib")#defineSERVER_PORT7300structBAGcharpacket;voidmain(intargc,char*argv)WORDwVersionRequested;WSADATAwsaData;intret,i,ra,data=0;SOCKETsClient,sListen;s
9、tructsockaddr_insaServer;structBAGbag;char*ptr=(char*)&bag;BOOLfSuccess=TRUE;WinSock初始化:wVersionRequested=MAKEWORD(2,2);ret=WSAStartup(wVersionRequested,&wsaData);if(ret!=0)printf("WSAStartup()failed!n");return;if(LOBYTE(wsaData.wVersion)!=2|HIBYTE(wsaData.wVersion)!=2)WSACleanup()
10、;printf("InvalidWinsockversion!n");return;sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(sClient=INVALID_SOCKET)WSACleanup();printf("socket()failed!n");return;saServer.sin_family=AF_INET;saServer.sin_port=htons(SERVER_PORT);ret=
11、connect(sClient,(structsockaddr*)&saServer,sizeof(saServer);if(ret=SOCKET_ERROR)printf("connect()successed!n");closesocket(sClient);WSACleanup();return;for(i=97;i<=104;i+)ra=rand()%11;if(ra%5=1)data+=i;elsedata=i;bag.packet=data;ret=send(sClient,(char*)&bag,sizeof(bag),0);ret=re
12、cv(sListen,ptr,sizeof(bag),0);if(bag.packet!=i)i-;printf("send()failed!n");continue;elseif(bag.packet=i)printf("packet%dhasbeensent!n",i+1);closesocket(sClient);WSACleanup();接受端(server.cpp):#include<stdio.h>#include<winsock2.h>#include<windows.h>#include<time
13、.h>#pragmacomment(lib,"Ws2_32.lib")#defineSERVER_PORT7300structBAGcharpacket;voidmain()WORDwVersionRequested;WSADATAwsaData;intret,nLeft,length;SOCKETsListen,sServer;structsockaddr_insaServer,saClient;structBAGbag;char*ptr,*pp;wVersionRequested=MAKEWORD(2,2);ret=WSAStartup(wVersionReque
14、sted,&wsaData);if(ret!=0)printf("WSAStartup()failed!n");return;!=2)!=2)if(LOBYTE(wsaData.wVersion)!=2|HIBYTE(wsaData.wVersion)WSACleanup();printf("InvalidWinsockversion!n");return;sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(sListen=INVALID_SOCKET)WSACleanup();printf(&q
15、uot;socket()failed!n");return;saServer.sin_family=AF_INET;saServer.sin_port=htons(SERVER_PORT);=htonl(INADDR_ANY);ret=bind(sListen,(structsockaddr*)&saServer,sizeof(saServer);if(ret=SOCKET_ERROR)printf("bind()failed!code:%dn",WSAGetLastError();closesocket(sListen);WSACleanup();ret
16、urn;ret=listen(sListen,5);if(ret=SOCKET_ERROR)printf("listen()failed!code:%dn",WSAGetLastError();closesocket(sListen);WSACleanup();return;printf("Waitingforclientconnecting!n");printf("tips:Ctrl+ctoquit!n");length=sizeof(saClient);sServer=accept(sListen,(structsockaddr*
17、)&saClient,&length);if(sServer=INVALID_SOCKET)printf("accept()failed!code:%dn",WSAGetLastError();closesocket(sListen);WSACleanup();return;printf("Acceptedclient:%s:%dn",inet_ntoa(saClient.sin_addr),ntohs(saClient.sin_port);nLeft=sizeof(bag);ptr=(char*)&bag;for(inti=97
18、;i<=104;i+)pp=ptr;ret=recv(sServer,ptr,nLeft,0);if(ret=SOCKET_ERROR)printf("recv()failed!n");break;elseif(bag.packet!=i)printf("wrongpacket!n");i-;ret=send(sServer,pp,nLeft,0);continue;elseif(bag.packet=i)printf("recv()%csuccessd!n",i);ret=send(sServer,ptr,nLeft,0);i
19、f(ret=0)printf("clienthasclosedtheconnection!n");break;closesocket(sListen);closesocket(sServer);WSACleanup();三、系統(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)行截圖:圖1客戶(hù)端的運(yùn)行截圖:圖2結(jié)果如下所示:客戶(hù)端:圖3服務(wù)器端:圖4四、總結(jié)與體會(huì)“停止等待”就是每發(fā)送完一個(gè)分組就停止發(fā)送,等待對(duì)方的確認(rèn)。是一種簡(jiǎn)單的可靠通信協(xié)議。可靠傳輸協(xié)議是這樣設(shè)計(jì)的:發(fā)送方只要超過(guò)了一段時(shí)間仍然沒(méi)有收到確認(rèn),就認(rèn)為剛才發(fā)送的分組丟失了,因而重傳前面發(fā)送過(guò)的分組。這里應(yīng)注意三點(diǎn):第一,發(fā)送方在發(fā)送完一個(gè)分組后,必須暫時(shí)保留已發(fā)送的分組副本(以發(fā)生超時(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)村房屋轉(zhuǎn)讓合同(含土地流轉(zhuǎn)服務(wù))
- 二零二五年度公寓樓出租合同樣本(精裝修物業(yè)費(fèi)家具家電)3篇
- 2025年度美容院投資入股合作協(xié)議模板3篇
- 2025年度兼職軟件開(kāi)發(fā)外包合同3篇
- 二零二五年度綠色能源項(xiàng)目公司貸款協(xié)議書(shū)3篇
- 二零二五年度全新教育機(jī)構(gòu)兼職教師職稱(chēng)評(píng)定合同3篇
- 二零二五年度公司與員工數(shù)字貨幣合作合伙協(xié)議3篇
- 2025年度全日制勞務(wù)合同書(shū)(環(huán)保能源設(shè)施運(yùn)維)3篇
- 2025年度綠色有機(jī)農(nóng)產(chǎn)品直供合作購(gòu)銷(xiāo)合同協(xié)議3篇
- 2025年度水果店轉(zhuǎn)讓及供應(yīng)鏈管理合同模板3篇
- 噎食風(fēng)險(xiǎn)評(píng)估和預(yù)防措施
- 幼兒繪本故事:小福變成大漢堡
- 常寶精特能源概況
- 政治經(jīng)濟(jì)學(xué)結(jié)構(gòu)圖解
- 服裝品質(zhì)管理人員工作手冊(cè)
- 國(guó)家開(kāi)放大學(xué)電大專(zhuān)科《獸醫(yī)基礎(chǔ)》2023-2024期末試題及答案試卷編號(hào):2776
- 初三畢業(yè)班后期管理措施
- 示教機(jī)械手控制系統(tǒng)設(shè)計(jì)
- 氧化鋁生產(chǎn)工藝教學(xué)(拜耳法)
- 選礦學(xué)基礎(chǔ)PPT課件
- 安利食品經(jīng)銷(xiāo)商合同協(xié)議范本模板
評(píng)論
0/150
提交評(píng)論