計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告 CSMACD協(xié)議仿真_第1頁
計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告 CSMACD協(xié)議仿真_第2頁
計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告 CSMACD協(xié)議仿真_第3頁
計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告 CSMACD協(xié)議仿真_第4頁
計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告 CSMACD協(xié)議仿真_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、計算機(jī)網(wǎng)絡(luò)課程設(shè)計實(shí)驗(yàn)報告- csma/cd協(xié)議仿真學(xué)院:計算機(jī)科學(xué)與通信工程 一、csma/cd協(xié)議工作原理(查資料)及性能分析(指標(biāo)與影響因素) csma/cd是carriersensemultipleaccess/collisiondetected的縮寫,可譯為“載波偵察聽多路訪問/沖突檢測”,或“帶有沖突檢測的載波偵聽多路訪問”。所謂載波偵聽(carriersense),意思是網(wǎng)絡(luò)上各個工作站在發(fā)送數(shù)據(jù)前都要總線上有沒有數(shù)據(jù)傳輸。若干數(shù)據(jù)傳輸(稱總線為忙),則不發(fā)送數(shù)據(jù);若無數(shù)據(jù)傳輸(稱總線為空),立即發(fā)送準(zhǔn)備好的數(shù)據(jù)。所謂多路訪問(multipleaccess)意思是網(wǎng)絡(luò)上所有工作站

2、收發(fā)數(shù)據(jù)共同使用同一條總線,且發(fā)送數(shù)據(jù)是廣播式的。所謂沖突(collision),意思是,若網(wǎng)上有兩個或兩個以上工作站同時發(fā)送數(shù)據(jù),在總線上就會產(chǎn)生信號的混合,哪個工作站都同時發(fā)送數(shù)據(jù),在總線上就會產(chǎn)生信號的混合,哪個工作站都辨別不出真正的數(shù)據(jù)是什么。這種情況稱數(shù)據(jù)沖突又稱碰撞。為了減少沖突發(fā)生后又的影響。工作站在發(fā)送數(shù)據(jù)過程中還要不停地檢測自己發(fā)送的數(shù)據(jù),有沒有在傳輸過程中與其它工作站的數(shù)據(jù)發(fā)生沖突,這就是沖突檢測(collisiondetected)。 csma/cd媒體訪問控制方法的工作原理,可以概括如下:先聽后說,邊聽邊說; 一旦沖突,立即停說; 等待時機(jī),然后再說;注:“聽”,即監(jiān)聽

3、、檢測之意;“說”,即發(fā)送數(shù)據(jù)之意。 上面幾句話意思是在發(fā)送數(shù)據(jù)前,先監(jiān)聽總線是否空閑。若總線忙,則不發(fā)送。若總線空閑,則把準(zhǔn)備好的數(shù)據(jù)發(fā)送到總線上。在發(fā)送數(shù)據(jù)的過程中,工作站邊發(fā)送檢測總線,是否自己發(fā)送的數(shù)據(jù)有沖突。若無沖突則繼續(xù)發(fā)送直到發(fā)完全部數(shù)據(jù);若有沖突,則立即停止發(fā)送數(shù)據(jù),但是要發(fā)送一個加強(qiáng)沖突的jam信號,以便使網(wǎng)絡(luò)上所有工作站都知道網(wǎng)上發(fā)生了沖突,然后,等待一個預(yù)定的隨機(jī)時間,且在總線為空閑時,再重新發(fā)送未發(fā)完的數(shù)據(jù)。csma/cd控制方式的優(yōu)點(diǎn)是:原理比較簡單,技術(shù)上易實(shí)現(xiàn),網(wǎng)絡(luò)中各工作站處于平等地位,不需集中控制,不提供優(yōu)先級控制。但在網(wǎng)絡(luò)負(fù)載增大時,發(fā)送時間增長,發(fā)送效率急

4、劇下降。性能指標(biāo):信道利用率、吞吐量、介質(zhì)利用率csmacd的主要影響因素:傳播時延、工作站數(shù)。csmacd對站點(diǎn)個數(shù)不是很敏感,對實(shí)際的輸入負(fù)載比較敏感。csmacd對傳播時延a比較敏感。csmacd沖突不可避免。csmacd的介質(zhì)利用率隨a的上升下降較快。csmacd適合通信量不大,交互頻繁的場合對于csmacd幀越長,吞吐量越太,要求幀具有最小長度,當(dāng)有許多短消息時,帶寬浪費(fèi)嚴(yán)重。csmacd在輕負(fù)載時提供最短延遲,但對重負(fù)載敏感。主要參數(shù):時間片 512比特時間 幀問間隔 96微秒 嘗試極限16 退避極限 10 人為干擾長 32比特 最大幀長 1518字節(jié) 最小幀長 512字節(jié) 地址字

5、段長 48比特二、csma/cd協(xié)議基本工作流程 1.以太幀的發(fā)送流程1) 載波偵聽過程。結(jié)點(diǎn)在發(fā)送一個幀前,必須偵聽總線是否空閑。由于以太的數(shù)據(jù)采用曼徹斯特編碼方式,所以可以通過判斷總線電平是否跳變來確定總線是否空閑。若總線空閑,就可啟動發(fā)送,否則繼續(xù)偵聽。2) 沖突檢測。在數(shù)據(jù)發(fā)送過程中,可能會產(chǎn)生沖突。所以在發(fā)送數(shù)據(jù)的過程中,也應(yīng)該進(jìn)行沖突檢測,只要發(fā)現(xiàn)沖突就應(yīng)該停止發(fā)送數(shù)據(jù)。3) 隨機(jī)延遲后重發(fā)。在檢測到?jīng)_突、停止發(fā)送后,結(jié)點(diǎn)進(jìn)行隨機(jī)延遲后重發(fā)。若重發(fā)16次后還沒成功,則宣告發(fā)送失敗,取消該幀的發(fā)送。隨機(jī)延遲的計算方法一般采用截止二進(jìn)制指數(shù)后退算法。該算法可表示為:t=2*r*a。其中

6、t為結(jié)點(diǎn)重新發(fā)送需要的后退延遲時間,a為沖突窗口值,r為隨機(jī)數(shù),從0到2k1中取值,k的取值為min(n,10),n為該幀已被發(fā)送的次數(shù),下圖為以太幀的發(fā)送流程。發(fā)送幀裝配幀總線忙?啟動發(fā)送沖突?發(fā)送完成?沖突加強(qiáng)沖突次數(shù)加1沖突多于16?發(fā)送失敗敗計算后退延遲等待后退延遲時間發(fā)送成功nnnn2.以太幀接收流程幀接收流程大致可以分為以下三個步驟:1) 檢查是否發(fā)生沖突,若發(fā)生沖突,則丟棄該幀,若沒有沖突,進(jìn)入下一步。2) 檢查該幀的目的地址看是否可以接收該幀,若可以接收,則進(jìn)入下一步。3) 檢查crc校驗(yàn)和llc數(shù)據(jù)長度。若都正確,接收該幀,否則丟棄。三、分析、理解所給的仿真程序(對照流程圖說

7、明是如何仿真的、每個sleep函數(shù)的作用)#include stdafx.h#include csmacd.h#include #include #include #include #ifdef _debug #define new1 debug_new #undef this_file his_file=_file_; #endif /static char t cwinthread *thread1,*thread2; /定義變量 dword id1,id2,bus=0; /初始化共享 uint athread(lpvoid pparam); /線程a,代表主機(jī)a uint bthread

8、(lpvoid pparam); /線程b,代表主機(jī)b using namespace std; int _tmain(int argc,tchar* argv,tchar*envp) int nretcode=0; if(!afxwininit(:getmodulehandle(null),null, :getcommandline(),0) cout_t(fata1 error:mfc initialization failed)m_nthreadid; /獲取線程id號 thread2=afxbeginthread(bthread,null); /啟動線程b id2=thread2-m_

9、nthreadid; /獲取線程id號 getchar(); return nretcode; uint athread(lpvoid pparam) /線程a(主機(jī)a) int i=0; /發(fā)送成功次數(shù) int collisioncounter=16; /沖突計數(shù)器初始值為16 double collisionwindow=0.05; /沖突窗口值取0.05 int randnum=rand()%3; /隨機(jī)數(shù) 可用srand函數(shù)改變隨機(jī)函數(shù)的種子,改善隨機(jī)性loop:if (bus=0) /總線空閑 bus=bus|id1; /模擬發(fā)包 sleep(12); / 單位是毫秒,分析:本實(shí)驗(yàn)?zāi)?/p>

10、擬模a發(fā)送時延為12ms試驗(yàn)時可以更改時延觀察不同發(fā)送時延對碰撞的影響。擬試驗(yàn)延if(bus=id1) /無沖突,由發(fā)送方負(fù)責(zé)檢測 printf(%d send successnn,id1); /發(fā)送成功 bus=0; /內(nèi)存清零 collisioncounter=16; /復(fù)原沖如計數(shù)器 sleep(rand()%10); 分析: 本次試驗(yàn)選用隨機(jī)的幀長度相當(dāng)于重新配置,兩個線程同時進(jìn)行監(jiān)聽。 / 模擬幀間隙i+; printf(主機(jī)a發(fā)送成功次數(shù)=%dnn,i); if(i0) sleep(randnum*(int)pow(2.0,(collisioncounter10)?10:colli

11、sioncounter)*collisionwindow); 分析:使用截至二進(jìn)制退避算法,在發(fā)生碰撞時,等待隨機(jī)時間,進(jìn)行監(jiān)聽和發(fā)送。goto loop; /下一次嘗試發(fā)送 else printf(%ld send failurenn,id1);/重發(fā)次數(shù)超過16次,宣布發(fā)送失敗 else /總線忙 goto loop; /繼續(xù)載波偵聽 return 0; uint bthread(lpvoid pparam)/線程b int j=0; /發(fā)送成功次數(shù) int collisioncounter=16;/沖突計數(shù)器初始值為16 double collisionwindow=0.05;/為爭用期

12、(51.2us),以時間為單位的沖突窗口 int randnum=rand()%3;/隨機(jī)數(shù) loop: if(bus=0)/總線空閑 sleep(2); / 可用隨機(jī)函數(shù)模擬其他用戶隨機(jī)接入。分析: b檢測到總線空閑時,延時2ms進(jìn)行發(fā)送。 bus=bus|id2;/模擬發(fā)包 sleep(3); 發(fā)送時延為3ms如果將b發(fā)現(xiàn)空閑時延為0發(fā)送,而且發(fā)送時延相同,即a,b線程完全相同,會出現(xiàn)兩線程交替發(fā)送,不會出現(xiàn)碰撞,結(jié)果見下面分析。 if(bus=id2)/無沖突 printf(%d send successnn,id2); /發(fā)送成功 bus=0; /總線清零 collisioncount

13、er=16; /復(fù)原沖突計數(shù)器 sleep(rand()%10); j+; printf(主機(jī)b發(fā)送成功次數(shù)=%dnn,j); if(j!=10) /不夠10次開始下一次發(fā)送 goto loop ; else printf(%d send collisionnn,id2); bus=0; collisioncounter-; /沖突計數(shù)器減1 if(collisioncounter0) /隨機(jī)延遲重發(fā),延遲算法用截止二進(jìn)制指數(shù)后退算法 sleep(randnum*(int)pow(2.0,(collisioncounter10)?10:collisioncounter)*collisionwi

14、ndow); 等待隨機(jī)時間截止二進(jìn)制指數(shù)后退算法goto loop; else printf(%d send failurenn,id2); else /總線忙 goto loop; /繼續(xù)裝載波偵聽 return 0; 四、運(yùn)行結(jié)果分析(改變sleep函數(shù)參數(shù)大小、抓圖說明結(jié)果)源程序運(yùn)行結(jié)果:由圖可知,線程a和b發(fā)送數(shù)據(jù)時都有碰撞產(chǎn)生,經(jīng)過二進(jìn)制退避算法,隨著時間的增加,碰撞的次數(shù)逐漸減少,后面沒有沖突。改變sleep()函數(shù)參量的值,理想情況下,傳輸時延為零時(即sleep(0)),結(jié)果如下圖所示:由圖可知,沒有傳輸時延情況下,還是有發(fā)送碰撞產(chǎn)生,主要原因是線程b程序中的第一個sleep

15、()語句需要運(yùn)行時間,后面數(shù)據(jù)全部發(fā)送成功還是因?yàn)檫\(yùn)行了退避二進(jìn)制算法,當(dāng)去掉線程b的第一個sleep()時,即兩個線程相等時,運(yùn)行結(jié)果如下:由上圖可知,數(shù)據(jù)發(fā)送過程中沒有沖突。源程序的幀間隙是程序隨即產(chǎn)生的(sleep(rand()%10)),現(xiàn)將間隙時間改為0,觀察運(yùn)行結(jié)果如下圖所示:當(dāng)兩個線程相同時,幀間隙為0的情況下,主機(jī)a連續(xù)發(fā)送三次數(shù)據(jù)后,主機(jī)b搶到信道,連續(xù)發(fā)送十次數(shù)據(jù),發(fā)送完畢,接著a發(fā)送剩余的七次數(shù)據(jù)。這樣不能體現(xiàn)發(fā)送的公平性。所以應(yīng)該設(shè)置幀間隙。下面改變幀間隙,a和b幀間隙相同時(同時為5),運(yùn)行結(jié)果如下:由圖可知,兩個線程相同,且?guī)g隙相同的情況下,發(fā)送數(shù)據(jù)沒有碰撞,且a

16、,b交替發(fā)送數(shù)據(jù),一直到發(fā)送結(jié)束。同樣道理,當(dāng)兩個線程不同時(b的反應(yīng)時間為2 ms),依然會發(fā)生碰撞。運(yùn)行二進(jìn)制退避算法后,a,b繼續(xù)交替發(fā)送數(shù)據(jù)。當(dāng)兩個線程相同,幀間隙不同時(a的幀間隙為2 ms ,b的幀間隙為20 ms 時),結(jié)果如圖通過反復(fù)更改a,b幀間隙的值,當(dāng)b幀間隙為a的幀間隙10倍時,出現(xiàn)上圖結(jié)果,沒有出現(xiàn)輪流發(fā)送,也沒有出現(xiàn)碰撞(兩線程相同)。當(dāng)兩線程幀間隙相差較小時,上述結(jié)果體現(xiàn)不明顯。五、協(xié)議的改進(jìn)(如增加用戶數(shù)后采用某種監(jiān)聽和發(fā)送策略)對二進(jìn)制退避算法進(jìn)行改進(jìn),改進(jìn)后的算法如下:非堅(jiān)持的csma:線路忙,等待一段時間,再偵聽;不忙時,立即發(fā)送;減少沖突,信道利用率降低

17、:1堅(jiān)持的csma:線路忙,繼續(xù)偵聽;不忙時,立即發(fā)送;提高信道利用率,增大沖突:p堅(jiān)持的csma:線路忙,繼續(xù)偵聽;不忙時,根據(jù)p概率進(jìn)行發(fā)送,另外的1-p概率為繼續(xù)偵聽(p是一個指定概率值);有效平衡,但復(fù)雜:六:心得體會每次做課程設(shè)計都是一個學(xué)習(xí)和總結(jié)的過程,在這次課程設(shè)計中發(fā)現(xiàn)對于書本上的知識掌握的還是不牢固,csma/cd協(xié)議老師在上課時講的很詳細(xì),在課程設(shè)計中感覺自己只知道個大概。盡管老師已經(jīng)該我們程序代碼,把困難程度已經(jīng)降到最低程度了,但是在做的過程中還是出現(xiàn)了很多問題,比如a,b在發(fā)送過程中改變sleep()的值發(fā)送是否是交替進(jìn)行的,是否會發(fā)生碰撞以及操作平臺的調(diào)試等等問題。最后在老師

溫馨提示

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

評論

0/150

提交評論