版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 計算機(jī)網(wǎng)絡(luò)課程設(shè)計實驗報告</p><p> -- CSMA/CD協(xié)議仿真</p><p> 學(xué)院:計算機(jī)科學(xué)與通信工程</p><p> 一、CSMA/CD協(xié)議工作原理(查資料)及性能分析(指標(biāo)與影響因素)</p><p> CSMA/CD是carrier sense multiple
2、60;access/collision detected 的縮寫,可譯為“載波偵察聽多路訪問/沖突檢測”,或“帶有沖突檢測的載波偵聽多路訪問”。所謂載波偵聽(carrier sense),意思是網(wǎng)絡(luò)上各個工作站在發(fā)送數(shù)據(jù)前都要總線上有沒有數(shù)據(jù)傳輸。若干數(shù)據(jù)傳輸 (稱總線為忙),則不發(fā)送數(shù)據(jù);若無數(shù)據(jù)傳輸(稱總線為空),立即發(fā)送準(zhǔn)備好的數(shù)據(jù)。所謂多路訪問(multiple access)意
3、思是網(wǎng)絡(luò)上所有工作站收發(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ā)生沖突,這就是沖突檢測
4、(collision detected)。 CSMA/CD媒體訪問控制方法的工作原理,可以概括如下: </p><p> 先聽后說,邊聽邊說; 一旦沖突,立即停說; 等待時機(jī),然后再說; 注:“聽”,即監(jiān)聽
5、、檢測之意;“說”,即發(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ā)
6、送未發(fā)完的數(shù)據(jù)。 </p><p> CSMA/CD控制方式的優(yōu)點是:原理比較簡單,技術(shù)上易實現(xiàn),網(wǎng)絡(luò)中各工作站處于平等地位 ,不需集中控制,不提供優(yōu)先級控制。但在網(wǎng)絡(luò)負(fù)載增大時,發(fā)送時間增長,發(fā)送效率急劇下降。</p><p> 性能指標(biāo):信道利用率、吞吐量、介質(zhì)利用率</p><p> CSMACD的主要影響因素:傳播時延、工作站數(shù)。&
7、lt;/p><p> ?、貱SMA/CD對站點個數(shù)不是很敏感,對實際的輸入負(fù)載比較敏感。</p><p> ?、贑SMA/CD對傳播時延a比較敏感。</p><p> ?、跜SMA/CD沖突不可避免。</p><p> ?、蹸SMA/CD的介質(zhì)利用率隨a的上升下降較快。</p><p> ⑤CSMA/CD適合通信量不大,
8、交互頻繁的場合</p><p> ?、迣τ贑SMA/CD幀越長,吞吐量越太,要求幀具有最小長度,當(dāng)有許多短消息時,帶寬浪費嚴(yán)重。</p><p> ?、逤SMA/CD在輕負(fù)載時提供最短延遲,但對重負(fù)載敏感。</p><p><b> 主要參數(shù):</b></p><p> 時間片 512比特時間 </p>
9、<p> 幀問間隔 9.6微秒 </p><p><b> 嘗試極限16 </b></p><p><b> 退避極限 10 </b></p><p> 人為干擾長 32比特 </p><p> 最大幀長 1518字節(jié) </p><p> 最小幀長 5
10、12字節(jié) </p><p> 地址字段長 48比特 二、CSMA/CD協(xié)議基本工作流程</p><p> 1.以太幀的發(fā)送流程</p><p> 載波偵聽過程。結(jié)點在發(fā)送一個幀前,必須偵聽總線是否空閑。由于以太的數(shù)據(jù)采用曼徹斯特編碼方式,所以可以通過判斷總線電平是否跳變來確定總線是否空閑。若總線空閑,就可啟動發(fā)送,否則繼續(xù)偵聽。</p>
11、<p> 沖突檢測。在數(shù)據(jù)發(fā)送過程中,可能會產(chǎn)生沖突。所以在發(fā)送數(shù)據(jù)的過程中,也應(yīng)該進(jìn)行沖突檢測,只要發(fā)現(xiàn)沖突就應(yīng)該停止發(fā)送數(shù)據(jù)。</p><p> 隨機(jī)延遲后重發(fā)。在檢測到?jīng)_突、停止發(fā)送后,結(jié)點進(jìn)行隨機(jī)延遲后重發(fā)。若重發(fā)16次后還沒成功,則宣告發(fā)送失敗,取消該幀的發(fā)送。隨機(jī)延遲的計算方法一般采用截止二進(jìn)制指數(shù)后退算法。該算法可表示為:T=2*R*a。其中T為結(jié)點重新發(fā)送需要的后退延遲時間,a為
12、沖突窗口值,R為隨機(jī)數(shù),從0到2k-1中取值,k的取值為min(n,10),n為該幀已被發(fā)送的次數(shù),下圖為以太幀的發(fā)送流程。</p><p><b> 2.以太幀接收流程</b></p><p> 幀接收流程大致可以分為以下三個步驟:</p><p> 檢查是否發(fā)生沖突,若發(fā)生沖突,則丟棄該幀,若沒有沖突,進(jìn)入下一步。</p>
13、<p> 檢查該幀的目的地址看是否可以接收該幀,若可以接收,則進(jìn)入下一步。</p><p> 檢查CRC校驗和LLC數(shù)據(jù)長度。若都正確,接收該幀,否則丟棄。</p><p> 三、分析、理解所給的仿真程序(對照流程圖說明是如何仿真的、每個sleep函數(shù)的作用)</p><p> #include "stdafx.h"<
14、/p><p> #include "csmacd.h"</p><p> #include <cstdio></p><p> #include <iostream></p><p> #include <cmath></p><p> #include &
15、lt;windows.h></p><p> #ifdef _DEBUG </p><p> #define new1 DEBUG_NEW </p><p> #undef THIS_FILE HIS_FILE[]=_FILE_; </p><p><b> #endif </b></p>
16、;<p> //static char T </p><p> CWinThread *thread1,*thread2; //定義變量 </p><p> DWORD ID1,ID2,Bus=0; //初始化共享 </p><p> UINT aThread
17、(LPVOID pParam); //線程a,代表主機(jī)a </p><p> UINT bThread(LPVOID pParam); //線程b,代表主機(jī)b </p><p> using namespace std; </p><p> int _tmain(int argc,TCH
18、AR* argv[],TCHAR*envp[]) </p><p><b> { </b></p><p> int nRetCode=0; </p><p> if(!AfxWinInit(::GetModuleHandle(NULL),NULL, ::GetCommandLine(),0)) </p><p
19、><b> { </b></p><p> cout<<_T("Fata1 Error:MFC initialization failed")<< endl; </p><p> nRetCode=1; </p><p><b> } </b></p&
20、gt;<p><b> else </b></p><p><b> { </b></p><p> thread1=AfxBeginThread(aThread,NULL); //啟動線程a </p><p> ID1=thread1->m_nThreadID;
21、 //獲取線程ID號 </p><p> thread2=AfxBeginThread(bThread,NULL); //啟動線程b </p><p> ID2=thread2->m_nThreadID; //獲取線程ID號 </p><p> getchar(); </p><p><
22、;b> } </b></p><p> return nRetCode; </p><p><b> } </b></p><p> UINT aThread(LPVOID pParam) //線程a(主機(jī)a) </p><p><b>
23、{ </b></p><p> int i=0; //發(fā)送成功次數(shù) </p><p> int CollisionCounter=16; //沖突計數(shù)器初始值為16 </p><p> double Collisionwindow=0.05;
24、 //沖突窗口值取0.05 </p><p> int randNum=rand()%3; //隨機(jī)數(shù) 可用Srand函數(shù)改變隨機(jī)函數(shù)的種子,改善隨機(jī)性</p><p> Loop:if (Bus==0) //總線空閑 </p><p><b>
25、{ </b></p><p> Bus=Bus|ID1; //模擬發(fā)包 </p><p> Sleep(12); // 單位是毫秒,</p><p> 分析:本實驗?zāi)M模a發(fā)送時延為12ms試驗時可以更改時延觀察不同發(fā)送時延對碰撞的影響。擬</p><
26、;p><b> 試驗延</b></p><p> if(Bus==ID1) //無沖突,由發(fā)送方負(fù)責(zé)檢測 </p><p><b> { </b></p><p> printf("%d Send Success\n\n",ID1)
27、; //發(fā)送成功 </p><p> Bus=0; //內(nèi)存清零 </p><p> CollisionCounter=16; //復(fù)原沖如計數(shù)器 </p><p> Sleep(rand()%10); </p><p> 分析: 本次試驗選用隨機(jī)的幀長度相當(dāng)于重新配置,兩個線程同
28、時進(jìn)行監(jiān)聽。 // 模擬幀間隙</p><p><b> i++; </b></p><p> printf("主機(jī)a發(fā)送成功次數(shù)=%d\n\n",i); </p><p> if(i<10) </p><p> goto Loop; //發(fā)送次數(shù)不夠10次,開始下一次發(fā)
29、送 </p><p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> printf("%d Send Collision\n\n",ID1); //發(fā)生沖突 &
30、lt;/p><p><b> Bus=0; </b></p><p> CollisionCounter--; //沖突計數(shù)器減1 </p><p> if(CollisionCounter>0) </p><p><b> { </b></p>
31、<p> Sleep(randNum*(int)pow(2.0,(CollisionCounter>10)?10:CollisionCounter)*Collisionwindow); </p><p> 分析:使用截至二進(jìn)制退避算法,在發(fā)生碰撞時,等待隨機(jī)時間,進(jìn)行監(jiān)聽和發(fā)送。</p><p> goto Loop;
32、 //下一次嘗試發(fā)送 </p><p><b> } </b></p><p><b> else </b></p><p> printf("%ld Send Failure\n\n",ID1);//重發(fā)次數(shù)超過16次,宣布發(fā)送失敗 </p><p><b
33、> } </b></p><p><b> } </b></p><p> else //總線忙 </p><p> goto Loop; //繼續(xù)載波偵聽 </p><p> return 0; &
34、lt;/p><p><b> } </b></p><p> UINT bThread(LPVOID pParam)//線程b </p><p><b> { </b></p><p> int j=0; //發(fā)送成功次數(shù) </p><
35、;p> int CollisionCounter=16;//沖突計數(shù)器初始值為16 </p><p> double CollisionWindow=0.05;//為爭用期(51.2us),以時間為單位的沖突窗口 </p><p> int randNum=rand()%3;//隨機(jī)數(shù) </p><p> Loop: if(Bus==0)//總線空
36、閑 </p><p><b> { </b></p><p> Sleep(2); // 可用隨機(jī)函數(shù)模擬其他用戶隨機(jī)接入。</p><p> 分析: b檢測到總線空閑時,延時2ms進(jìn)行發(fā)送。</p><p> Bus=Bus|ID2;//模擬發(fā)包 </p><p&
37、gt; Sleep(3); 發(fā)送時延為3ms</p><p> 如果將b發(fā)現(xiàn)空閑時延為0發(fā)送,而且發(fā)送時延相同,即a,b線程完全相同,會出現(xiàn)兩線程交替發(fā)送,不會出現(xiàn)碰撞,結(jié)果見下面分析。</p><p> if(Bus==ID2)//無沖突 </p><p><b> { </b></p><p> pr
38、intf("%d Send Success\n\n",ID2); //發(fā)送成功 </p><p> Bus=0; //總線清零 </p><p> CollisionCounter=16; //復(fù)原沖突計數(shù)器 </p><p> Sleep(rand(
39、)%10); </p><p><b> j++; </b></p><p> printf("主機(jī)b發(fā)送成功次數(shù)=%d\n\n",j); </p><p> if(j!=10) //不夠10次開始下一次發(fā)送 </p><p> goto Loop ; </p>
40、;<p><b> } </b></p><p><b> else </b></p><p><b> { </b></p><p> printf("%d Send Collision\n\n",ID2); </p><p>
41、;<b> Bus=0; </b></p><p> CollisionCounter--; //沖突計數(shù)器減1</p><p> if(CollisionCounter>0) //隨機(jī)延遲重發(fā),延遲算法用截止二進(jìn)制指數(shù)后退算法 </p><p><b> { </b></p><p
42、> Sleep(randNum*(int)pow(2.0,(CollisionCounter>10)?10:CollisionCounter)*CollisionWindow); </p><p> 等待隨機(jī)時間截止二進(jìn)制指數(shù)后退算法</p><p> goto Loop; </p><p><b> } </b>&l
43、t;/p><p><b> else </b></p><p><b> { </b></p><p> printf("%d Send Failure\n\n",ID2); </p><p><b> } </b></p><p
44、><b> } </b></p><p><b> } </b></p><p> else //總線忙 </p><p> goto Loop; //繼續(xù)裝載波偵聽 </p><p> return
45、0; </p><p><b> } </b></p><p> 四、運行結(jié)果分析(改變sleep函數(shù)參數(shù)大小、抓圖說明結(jié)果)</p><p><b> 源程序運行結(jié)果:</b></p><p> 由圖可知,線程a和b發(fā)送數(shù)據(jù)時都有碰撞產(chǎn)生,經(jīng)過二進(jìn)制退避算法,隨著時間的增加,碰撞的次數(shù)
46、逐漸減少,后面沒有沖突。</p><p> 改變sleep()函數(shù)參量的值,理想情況下,傳輸時延為零時(即sleep(0)),結(jié)果如下圖所示:</p><p> 由圖可知,沒有傳輸時延情況下,還是有發(fā)送碰撞產(chǎn)生,主要原因是線程b程序中的第一個sleep()語句需要運行時間,后面數(shù)據(jù)全部發(fā)送成功還是因為運行了退避二進(jìn)制算法,當(dāng)去掉線程b的第一個sleep()時,即兩個線程相等時,運行結(jié)果
47、如下:</p><p> 由上圖可知,數(shù)據(jù)發(fā)送過程中沒有沖突。</p><p> 源程序的幀間隙是程序隨即產(chǎn)生的(Sleep(rand()%10)),現(xiàn)將間隙時間改為0,觀察運行結(jié)果如下圖所示:</p><p> 當(dāng)兩個線程相同時,幀間隙為0的情況下,主機(jī)a連續(xù)發(fā)送三次數(shù)據(jù)后,主機(jī)b搶到信道,連續(xù)發(fā)送十次數(shù)據(jù),發(fā)送完畢,接著a發(fā)送剩余的七次數(shù)據(jù)。這樣不能體現(xiàn)發(fā)
48、送的公平性。所以應(yīng)該設(shè)置幀間隙。</p><p> 下面改變幀間隙,a和b幀間隙相同時(同時為5),運行結(jié)果如下:</p><p> 由圖可知,兩個線程相同,且?guī)g隙相同的情況下,發(fā)送數(shù)據(jù)沒有碰撞,且a,b交替發(fā)送數(shù)據(jù),一直到發(fā)送結(jié)束。同樣道理,當(dāng)兩個線程不同時(b的反應(yīng)時間為2 ms),依然會發(fā)生碰撞。運行二進(jìn)制退避算法后,a,b繼續(xù)交替發(fā)送數(shù)據(jù)。</p><p&
49、gt; 當(dāng)兩個線程相同,幀間隙不同時(a的幀間隙為2 ms ,b的幀間隙為20 ms 時),結(jié)果如圖</p><p> 通過反復(fù)更改a,b幀間隙的值,當(dāng)b幀間隙為a的幀間隙10倍時,出現(xiàn)上圖結(jié)果,沒有出現(xiàn)輪流發(fā)送,也沒有出現(xiàn)碰撞(兩線程相同)。當(dāng)兩線程幀間隙相差較小時,上述結(jié)果體現(xiàn)不明顯。</p><p> 五、協(xié)議的改進(jìn)(如增加用戶數(shù)后采用某種監(jiān)聽和發(fā)送策略)</p>
50、<p> 對二進(jìn)制退避算法進(jìn)行改進(jìn),改進(jìn)后的算法如下:</p><p> 非堅持的CSMA:線路忙,等待一段時間,再偵聽;不忙時,立即發(fā)送;減少沖突,信道利用率降低:</p><p> 1堅持的CSMA:線路忙,繼續(xù)偵聽;不忙時,立即發(fā)送;提高信道利用率,增大沖突:</p><p> p堅持的CSMA:線路忙,繼續(xù)偵聽;不忙時,根據(jù)p概率進(jìn)行發(fā)送
51、,另外的1-p概率為繼續(xù)偵聽(p是一個指定概率值);有效平衡,但復(fù)雜:</p><p><b> 六:心得體會</b></p><p> 每次做課程設(shè)計都是一個學(xué)習(xí)和總結(jié)的過程,在這次課程設(shè)計中發(fā)現(xiàn)對于書本上的知識掌握的還是不牢固,CSMA/CD協(xié)議老師在上課時講的很詳細(xì),在課程設(shè)計中感覺自己只知道個大概。盡管老師已經(jīng)該我們程序代碼,把困難程度已經(jīng)降到最低程度了,
52、但是在做的過程中還是出現(xiàn)了很多問題,比如a,b在發(fā)送過程中改變sleep()的值發(fā)送是否是交替進(jìn)行的,是否會發(fā)生碰撞以及操作平臺的調(diào)試等等問題。最后在老師和同學(xué)的幫助下都得以解決,在此真心感謝老師和同學(xué)的無私幫助。</p><p> 這次課程設(shè)計不僅重新檢測了一下自己對課程的掌握理解程度,而且培養(yǎng)了自己如何利用身邊的資源解決自己的問題的能力,提升了和別人在學(xué)術(shù)方面的交流和溝通能力。</p><
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告
- 《計算機(jī)網(wǎng)絡(luò)》課程設(shè)計報告
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告
- 《計算機(jī)網(wǎng)絡(luò)》課程設(shè)計報告
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計
- 《計算機(jī)網(wǎng)絡(luò)課程設(shè)計》
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計
- 計算機(jī)網(wǎng)絡(luò)互連課程設(shè)計報告
- 計算機(jī)網(wǎng)絡(luò)課程設(shè)計報告 (2)
評論
0/150
提交評論