版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課 程 設(shè) 計</b></p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 題目二: 模擬Ethernet幀的發(fā)送過程 </p><p><b> 初始條件:</b></p&
2、gt;<p><b> ?。?)學習相關(guān)知識</b></p><p> ?。?)C/C++/VC/VB/JAVA語言</p><p><b> (3)PC機一臺</b></p><p> 要求完成的主要任務(wù): (包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)</p><p&
3、gt; 編寫程序模擬Ethernet節(jié)點的數(shù)據(jù)發(fā)送流程。具體要求:</p><p> 1)用兩個線程a和b來模擬Ethernet上的兩臺主機。</p><p> 2)用一個雙字類型變量Bus來模擬總線(將其初始化為“\0”,并且總線等于“\0”時表示總線空閑)。</p><p> 3)兩個子線程向總線發(fā)送自己的數(shù)據(jù)。數(shù)據(jù)用該線程的線程號進行模擬,發(fā)送數(shù)據(jù)用線
4、程號和Bus的“或”操作進行模擬(即Bus=Bus|ID,ID為該線程的線程號)。</p><p> 4)每臺主機需向總線上成功發(fā)送10次數(shù)據(jù),如果其中某次數(shù)據(jù)發(fā)送失敗,則該線程結(jié)束。</p><p> 5)發(fā)送流程必須遵循CSMA/CD。隨即延遲算法中的沖突窗口取0.005。在數(shù)據(jù)發(fā)送成功(即Bus==ID)后,報告“ID send success”,產(chǎn)生沖突(即Bus?。絀D)后報
5、告“ID send conllision”,發(fā)送失敗(即沖突計數(shù)值為0)后報告“ID send failure”。隨著主機發(fā)送成功次數(shù)增加,報告其已發(fā)送成功的次數(shù),如“主機A發(fā)送成功數(shù)=3”。</p><p><b> 時間安排:</b></p><p> 第一、二天:查閱資料,學習算法</p><p> 第三、四天:編程調(diào)試</p
6、><p><b> 第五天:書寫報告</b></p><p> 指導(dǎo)教師簽名: 年 月 日</p><p> 系主任(或責任教師)簽名: 年 月 日</p><p><b> 目 錄</b></p&g
7、t;<p> 1.課程設(shè)計概述1</p><p> 2.以太網(wǎng)的CSMA/CD協(xié)議1</p><p> 2.1 Ethernet幀的發(fā)送流程1</p><p> 2.2 Ethernet幀的接收流程2</p><p> 2.3截斷二進制指數(shù)退避算法2</p><p> 2.4 Eth
8、ernet幀的發(fā)送流程圖3</p><p> 3系統(tǒng)平臺、語言和工具3</p><p><b> 4.設(shè)計思想4</b></p><p><b> 5.完整代碼4</b></p><p><b> 6.結(jié)果截圖9</b></p><p>
9、; 7.課程設(shè)計總結(jié)10</p><p> 本科生課程設(shè)計成績評定表11</p><p><b> 1.課程設(shè)計概述</b></p><p> 局域網(wǎng)技術(shù)的發(fā)展非常迅速,在企業(yè)、機關(guān)、學校的信息管理與服務(wù)領(lǐng)域得到廣泛的應(yīng)用。在早期,人們將局域網(wǎng)歸為一種數(shù)據(jù)通信網(wǎng)絡(luò)。隨著局域網(wǎng)體系結(jié)構(gòu)和協(xié)議標準研究的進展、操作系統(tǒng)的發(fā)展以及光纖技術(shù)的
10、引入,局域網(wǎng)技術(shù)得到了快速發(fā)展。</p><p> 目前,應(yīng)用最廣泛的局域網(wǎng)是總線型局域網(wǎng),即以太網(wǎng)(Ethernet)。總線型局域網(wǎng)的核心技術(shù)是隨機爭用型介質(zhì)訪問控制方法,即帶有沖突檢測的載波偵聽多路訪問(CSMA/CD,Carrier Sense Multiple Access with Collision Detection)方法。</p><p> CSMA/CD方法用來解決多
11、個結(jié)點共享公用總線的問題。在Ethernet中,任何結(jié)點都沒有可預(yù)約的發(fā)送時間,這種介質(zhì)訪問控制屬于隨機爭用型方法。</p><p> 學習Ethernet技術(shù)對深入掌握局域網(wǎng)知識是非常重要的。本課程設(shè)計的目的是模擬Ethernet幀的發(fā)送過程,熟悉Ethernet幀的數(shù)據(jù)發(fā)送流程,即CSMA/CD工作流程。</p><p> 2.以太網(wǎng)的CSMA/CD協(xié)議</p>&l
12、t;p> 以太網(wǎng)總線上只要有一臺計算機在發(fā)生數(shù)據(jù),總線傳輸資源就被占用,因此,在同一時間只能允許一臺計算機在發(fā)生數(shù)據(jù)。Ethernet的核心技術(shù)是隨機爭用型介質(zhì)訪問方法,即帶有沖突檢測的載波偵聽多路訪問(CSMA/CD)方法。</p><p> 2.1 Ethernet幀的發(fā)送流程</p><p> 1)載波偵聽過程。Ethernet中每個結(jié)點利用總線發(fā)送數(shù)據(jù),總線是每個結(jié)點共
13、享的公共傳輸介質(zhì)。所以結(jié)點在發(fā)送一個幀前,必須偵聽總線是否空閑。由于Ethernet的數(shù)據(jù)采用曼徹斯特編碼方式,所以可以通過判斷總線電平是否跳變來確定總線是否空閑。若總線空閑,就可以啟動發(fā)送,否則繼續(xù)偵聽。</p><p> 2)沖突檢測。在數(shù)據(jù)發(fā)送過程中,可能會產(chǎn)生沖突(沖突是指總線上同時出現(xiàn)兩個或兩個以上的發(fā)送信號,他們疊加后的信號波形與任何發(fā)送結(jié)點的輸出波形都不相同)。因為可能有多個主機都在偵聽總線,當它
14、們偵聽到總線空閑時,就會往總線上發(fā)送數(shù)據(jù)。所以在發(fā)送數(shù)據(jù)的過程中,也應(yīng)該進行沖突檢測,只要發(fā)現(xiàn)沖突就應(yīng)該立即停止發(fā)送數(shù)據(jù)。</p><p><b> 發(fā)生碰撞</b></p><p> 3)隨即延遲后重發(fā)。在檢測到?jīng)_突、停止發(fā)送后,結(jié)點進行隨機延遲后重發(fā)。若發(fā)16次后還沒成功,則宣告發(fā)送失敗,取消該幀的發(fā)送。隨機延遲的算法一般采用截斷二進制指數(shù)退避算法。</
15、p><p> 2.2 Ethernet幀的接收流程</p><p> 幀的接收流程大致可以分為以下三個步驟:</p><p> 1)檢查是否發(fā)生沖突,若發(fā)生沖突,則丟棄該幀;若沒有沖突,進入下一步。</p><p> 2)檢查該幀的目的地址看是否可以接收該幀,若可以接收,則進入下一步。</p><p> 檢查CR
16、C檢驗和LLC數(shù)據(jù)長度。若都正確,接受該幀,否則丟棄。</p><p> 2.3截斷二進制指數(shù)退避算法</p><p> 當出現(xiàn)線路沖突時,如果沖突的各站點都采用同樣的退避間隔時間,則很容易產(chǎn)生二次、三次的碰撞。因此,要求各個站點的退避間隔時間具有差異性。這要求通過退避算法來實現(xiàn)。該算法讓發(fā)生碰撞的站在停止發(fā)送數(shù)據(jù)后,不是等待信道變?yōu)榭臻e后就立即發(fā)生數(shù)據(jù),而是推遲(即退避)一個隨機的時
17、間T,才開始監(jiān)聽總線,等總線空閑再重傳。令k=Min【重傳次數(shù),10】,然后從整數(shù)集合{0,1,……,2^k-1}中隨機取出一個數(shù),記為R,則重傳等待時間T=R*A,A為沖突窗口值(沖突窗口為總線最大長度和電磁波在介質(zhì)中傳播速度比值的2倍),也叫爭用期,因此T為R倍的爭用期。這樣做的好處是當連續(xù)發(fā)生多次沖突,就表明可能有較多的站參與爭用信道,使用該算法可以使推遲的平均時間隨重傳次數(shù)增大而增大(動態(tài)退避),因而減小發(fā)生碰撞的概率,有利于整
18、個系統(tǒng)的穩(wěn)定。</p><p> 2.4 Ethernet幀的發(fā)送流程圖</p><p> 3系統(tǒng)平臺、語言和工具</p><p> 系統(tǒng):Windows</p><p><b> 語言:C++</b></p><p><b> 工具:VC 6.0</b></
19、p><p><b> 4.設(shè)計思想</b></p><p> 從主程序啟動2個線程(A和B)來模擬兩臺主機發(fā)送數(shù)據(jù)(線程本身的ID號)。使用一個線程計數(shù)器Count=0,啟動一個線程時加1,某個線程退出時減1,主線程啟動2個線程后循環(huán)等待,直到Count==0時(即2個線程都退出)主線程結(jié)束,退出程序。</p><p><b> 主
20、線程流程圖:</b></p><p><b> N</b></p><p><b> Y </b></p><p> 2個線程函數(shù)ThreadFunc_A()和ThreadFunc_B()的函數(shù)體很相似,2個線程同時循環(huán)監(jiān)聽總線Bus,Bus=0時開始發(fā)送數(shù)據(jù),若經(jīng)過一個爭用期(0.005s)未發(fā)
21、現(xiàn)沖突,則表明發(fā)送數(shù)據(jù)成功,若檢測到?jīng)_突,則停止發(fā)送,隨機退避一個時間重新監(jiān)聽總線并發(fā)送數(shù)據(jù)(截斷二進制指數(shù)退避算法)。相關(guān)代碼:Sleep(rand()%(int)pow(2,m)*CMPED)。若16次都發(fā)送不成功,則報告發(fā)送失敗并中止線程,線程計數(shù)器減1。若10次數(shù)據(jù)發(fā)送成功,則線程正常結(jié)束,線程計數(shù)器減1。</p><p><b> 5.完整代碼</b></p>&l
22、t;p> #include <iostream.h></p><p> #include<Windows.h></p><p> #include<time.h></p><p> #include<math.h></p><p> #define CMPED 5//爭用期<
23、;/p><p> DWORD ThreadID_A,ThreadID_B; //線程ID,線程向總線發(fā)送的數(shù)據(jù)</p><p> HANDLE hThreadID_A,hThreadID_B;</p><p> DWORD Count=2; //線程計數(shù)器</p><p> DWORD Bus=0; //總線</p><
24、;p><b> //線程A</b></p><p> DWORD WINAPI ThreadFunc_A()</p><p><b> {</b></p><p><b> int i=1;</b></p><p> DWORD t1,t2,k,m;</p
25、><p> while(i<=10)</p><p><b> {</b></p><p> k=0;//重傳次數(shù)</p><p><b> do </b></p><p><b> {</b></p><p> w
26、hile(Bus);</p><p> Bus=Bus|ThreadID_A;</p><p> t1=GetTickCount();</p><p> while((t2=GetTickCount())-t1<=CMPED)</p><p><b> {</b></p><p>
27、 if(Bus!=ThreadID_A)</p><p><b> {</b></p><p> SuspendThread(hThreadID_B);</p><p> cout<<"ID send collision!"<<endl;</p><p> Resume
28、Thread(hThreadID_B);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(t2-t1>CMPED)</p><p><
29、;b> {</b></p><p> cout<<"ID send success 主機A發(fā)送成功次數(shù)="<<i<<endl;</p><p><b> Bus=0;</b></p><p><b> break;</b></p>
30、<p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> Bus=0;</b></p><p><b> k++;</b><
31、/p><p><b> if(k==16)</b></p><p><b> {</b></p><p> SuspendThread(hThreadID_B);</p><p> cout<<"ID send failure! 主機A停止發(fā)送數(shù)據(jù)。"<&l
32、t;endl;</p><p> ResumeThread(hThreadID_B);</p><p><b> Count--;</b></p><p> ExitThread(0);</p><p><b> }</b></p><p> m=k>10?1
33、0:k;</p><p> //截斷二進制指數(shù)退避算法</p><p> Sleep(rand()%(int)pow(2,m)*CMPED);</p><p><b> }</b></p><p> }while(1);</p><p><b> i++;</b&g
34、t;</p><p><b> }</b></p><p><b> Count--;</b></p><p><b> return 0;</b></p><p><b> }</b></p><p><b>
35、 //線程B</b></p><p> DWORD WINAPI ThreadFunc_B()</p><p><b> {</b></p><p><b> int i=1;</b></p><p> DWORD t1,t2,k,m;</p><p>
36、 while(i<=10)</p><p><b> {</b></p><p> k=0; //重傳次數(shù)</p><p><b> do </b></p><p><b> {</b></p><p> while(Bus);</
37、p><p> Bus=Bus|ThreadID_B;</p><p> t1=GetTickCount();</p><p> while((t2=GetTickCount())-t1<=CMPED)</p><p><b> {</b></p><p> if(Bus!=Thread
38、ID_B)</p><p><b> {</b></p><p> SuspendThread(hThreadID_A);</p><p> cout<<"ID send collision!"<<endl;</p><p> ResumeThread(hThreadI
39、D_A);</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> if(t2-t1>CMPED)</p><p><b> {</b
40、></p><p> cout<<"ID send success 主機B發(fā)送成功次數(shù)="<<i<<endl;</p><p><b> Bus=0;</b></p><p><b> break;</b></p><p><
41、b> }</b></p><p><b> else</b></p><p><b> {</b></p><p><b> Bus=0;</b></p><p><b> k++;</b></p><p&g
42、t;<b> if(k==16)</b></p><p><b> {</b></p><p> SuspendThread(hThreadID_A);</p><p> cout<<"ID send failure! 主機B停止發(fā)送數(shù)據(jù)。"<<endl;</p&g
43、t;<p> ResumeThread(hThreadID_A);</p><p><b> Count--;</b></p><p> ExitThread(0);</p><p><b> }</b></p><p> m=k>10?10:k;</p>
44、<p> //截斷二進制指數(shù)退避算法</p><p> Sleep(rand()%(int)pow(2,m)*CMPED);</p><p><b> }</b></p><p> }while(1);</p><p><b> i++;</b></p>
45、<p><b> }</b></p><p><b> Count--;</b></p><p><b> return 0;</b></p><p><b> }</b></p><p> int main()</p>
46、<p><b> {</b></p><p> srand((unsigned)time(NULL));//初始化隨機數(shù)種子</p><p><b> do </b></p><p><b> {</b></p><p> hThreadID_A=Creat
47、eThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc_A,</p><p> NULL,0,&ThreadID_A);</p><p> }while(hThreadID_A==NULL);</p><p><b> do </b></p><p><b&
48、gt; {</b></p><p> hThreadID_B=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc_B,</p><p> NULL,0,&ThreadID_B);</p><p> }while(hThreadID_B==NULL);</p><
49、p> while(Count);</p><p><b> return 0;</b></p><p><b> }</b></p><p><b> 6.結(jié)果截圖</b></p><p> 運行結(jié)果1 運行結(jié)果
50、2</p><p><b> 分析:</b></p><p> 由于采用的是隨機退避算法,因此每次運行的結(jié)果顯然是不同的。當發(fā)生沖突時,使用隨機動態(tài)退避可以使推遲的平均時間隨重傳次數(shù)增大而增大,并由于隨機數(shù)的作用使得每個站點推遲的時間不一樣,因而減小發(fā)生碰撞的概率,有利于整個系統(tǒng)的穩(wěn)定。</p><p><b> 7.課程設(shè)計
51、總結(jié)</b></p><p> 經(jīng)過一個星期對計算機網(wǎng)絡(luò)課程設(shè)計的學習和上機實際操作,我熟悉了Ethernet幀的發(fā)送過程及數(shù)據(jù)發(fā)送流程。對CSMA/CD協(xié)議理解更加透徹,明白了以太網(wǎng)幀的發(fā)送原理。在網(wǎng)絡(luò)體系結(jié)構(gòu)中每一層都發(fā)揮著重要的作用,各司其職,每一層所用的協(xié)議都是以后網(wǎng)絡(luò)學習深入研究的對象。這次的課程設(shè)計幫我深刻理解了數(shù)據(jù)鏈路層中以太網(wǎng)幀的發(fā)送過程,為我以后的網(wǎng)絡(luò)學習打下了基礎(chǔ),感覺提高了許多
52、,受益匪淺。</p><p> 在這個星期的學習實踐中,有過成功的欣喜,也有出現(xiàn)問題的焦躁,然而當一個個問題通過看書查找,詢問老師、同學,慢慢解決后,也有了從未有過的自豪與驕傲。困難固然可怕,但冷靜下來,撇開焦躁的情緒,各個擊破,會出現(xiàn)柳暗花明那一刻。</p><p> 另外,我深知任何一門知識的掌握,僅靠學習理論知識是遠遠不夠的,要與實際動手操作相結(jié)合才能達到功效,實踐是檢驗真理的標
53、準,也是檢驗學習的標準,學以致用,才是真正的學到了家。課程設(shè)計順利的完成了,不但對專業(yè)知識有了更深的理解,更使自己認識到實踐的重要性,理論、實踐相結(jié)合才能達到很好的學習效果,多寫代碼多熟練和鞏固學到的語言和編程技巧,能達到事半功倍的效果。</p><p> 本科生課程設(shè)計成績評定表</p><p> 班級:軟件0901 姓名:唐詩瑋 學號:0120910680107</p&g
54、t;<p> 注:最終成績以五級分制記。優(yōu)(90-100分)、良(80-89分)、中(70-79分)、</p><p> 及格(60-69分)、60分以下為不及格</p><p><b> 指導(dǎo)教師簽名:</b></p><p><b> 201 年 月 日</b></p><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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機網(wǎng)絡(luò)模擬方案課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 《計算機網(wǎng)絡(luò)課程設(shè)計》
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計---網(wǎng)絡(luò)設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 計算機網(wǎng)絡(luò)組建課程設(shè)計
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 《計算機網(wǎng)絡(luò)》課程設(shè)計報告
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 計算機網(wǎng)絡(luò)課程設(shè)計報告
- 《計算機網(wǎng)絡(luò)》課程設(shè)計報告
- 計算機網(wǎng)絡(luò)課程設(shè)計 (2)
評論
0/150
提交評論