Etherent幀的封裝和發(fā)送過程_第1頁
Etherent幀的封裝和發(fā)送過程_第2頁
Etherent幀的封裝和發(fā)送過程_第3頁
已閱讀5頁,還剩13頁未讀, 繼續(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)一幀封裝實(shí)驗(yàn)?zāi)康模?編寫程序,根據(jù)給出的原始數(shù)據(jù),組裝一個IEEE 802.3格式的幀(題目)默認(rèn)的輸入文件為二進(jìn)制原始數(shù)據(jù)(文件名分別為inputl和input2)。?要求程序?yàn)槊钚谐绦?。比如,可?zhí)行文件名為framer.exe,則命令行形式如下:En cap Framer in putfile outputfile,其中,i nputfile 為原始數(shù)據(jù)文件, outputfile為輸出結(jié)果。? 輸出:對應(yīng)input1和input2得結(jié)果分別為output1和output2。試驗(yàn)要求:?編寫程序,根據(jù)給出的原始數(shù)據(jù),組裝一個IEEE 802.3格式的幀(題目)默認(rèn)的

2、輸入文件為二進(jìn)制原始數(shù)據(jù)(文件名分別為input1和input2)。?要求程序?yàn)槊钚谐绦?。比如,可?zhí)行文件名為framer.exe,則命令行形式如下:En cap Framer in putfile outputfile,其中,i nputfile 為原始數(shù)據(jù)文件, outputfile為輸出結(jié)果。輸出:對應(yīng)input1和input2得結(jié)果分別為output1和output2實(shí)驗(yàn)設(shè)計相關(guān)知識:幀:來源于串行線路上的通信。其中,發(fā)送者在發(fā)送數(shù)據(jù)的前后各添加特殊 的字符,使它們成為一個幀。Ethernet從某種程度上可以被看作是機(jī)器之間的 數(shù)據(jù)鏈路層連接。按802.3標(biāo)準(zhǔn)的幀結(jié)構(gòu)如下表所示(80

3、2.3標(biāo)準(zhǔn)的Ethernet幀結(jié)構(gòu)由7部 分組成)802.3標(biāo)準(zhǔn)的幀結(jié)構(gòu)前導(dǎo)碼幀前定界符目的地址源地址長度字段數(shù)據(jù)字段校驗(yàn)字段7B1B(2/6B)(2/6B)(2B)(長度可變)(4B)其中,幀數(shù)據(jù)字段的最小長度為46B。如果幀的LLC數(shù)據(jù)少于46B,則應(yīng)將 數(shù)據(jù)字段填充至46B。填充字符是任意的,不計入長度字段值中。在校驗(yàn)字段中,使用的是CRC校驗(yàn)。校驗(yàn)的圍包括目的地址字段、 源地址字 段、長度字段、LLC數(shù)據(jù)字段。循環(huán)冗余編碼(CRC是種重要的線性分組碼、編碼和解碼方法,具有簡單、檢錯和糾錯能力強(qiáng)等特點(diǎn),在通信領(lǐng)域廣泛地用于實(shí)現(xiàn)差錯控制。CR(校驗(yàn)碼的檢錯能力很強(qiáng),不僅能檢查出離散錯誤,還

4、能檢查出突發(fā)錯誤。利用CRCt行檢錯的過程可簡單描述如下:在發(fā)送端根據(jù)要傳送的k位二進(jìn) 制碼序列,以一定的規(guī)則產(chǎn)生一個校驗(yàn)用的 r位監(jiān)督碼(CRC碼),附在原始信息 的后邊,構(gòu)成一個新的二進(jìn)制碼序列(共k+r位),然后發(fā)送出去。在接收端,根 據(jù)信息碼和CRC碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯。這個 規(guī)則在差錯控制理論中稱為“生成多項(xiàng)式”。CRC的基本實(shí)現(xiàn)前導(dǎo)碼幀前定界符目的地址源地址長度字 段數(shù)據(jù)字段校驗(yàn)字段7B1B(2/6B)(2/6B)(2B)(長度可變)(4B)循環(huán)冗余校驗(yàn)碼的特點(diǎn):(1)CRC校驗(yàn)碼可檢測出所有單個錯誤。(2)CRC校驗(yàn)碼可檢測出所有奇數(shù)位錯誤。(3)CR

5、C校驗(yàn)碼可檢測出所有雙位的錯誤(4)CRC校驗(yàn)碼可檢測出所有小于、等于校驗(yàn)位長度的突發(fā)錯誤。(5)CR(校驗(yàn)碼可以1-(1/2)k-1的概率檢測出長度為(K+1)位的突發(fā)錯誤實(shí)驗(yàn)分析:?填充幀頭部字段要完成一次幀封裝的過程,首先要完成的就是幀頭部的裝入,這一過程只 要將簽到碼、定界符、目的地址、源地址、長度字段的相應(yīng)數(shù)值按順序?qū)懭刖涂?以了。其中,長度字段的值即為要發(fā)送的數(shù)據(jù)的實(shí)際長度。?填充數(shù)據(jù)字段在填充數(shù)據(jù)字段的過程中要注意的主要問題是數(shù)據(jù)字段的長度。802.3標(biāo)準(zhǔn)中規(guī)定了幀數(shù)據(jù)字段的最小長度為 46B,最大長度為1500B。如果數(shù)據(jù)不足46B, 則需要通過填充0來補(bǔ)足;若數(shù)據(jù)長度超過15

6、00B,則的大獎超過部分封裝入下 一個幀進(jìn)行發(fā)送。? CRC校驗(yàn)幀封裝的最后一步就是對數(shù)據(jù)進(jìn)行校驗(yàn),并將校驗(yàn)結(jié)果記入幀校驗(yàn)字 段。程序流程圖:CRC計算流程圖:程序源代碼 :#include#include#includevoid main(int argc,char*argv)/ 如果輸入命令行不正確,則輸出提示后退出。if(argc!=3)coutendl 請按以下格式輸入: EncapFrame inputfile outputfileendl;/ 輸出符 號,程序的結(jié)束符exit(0);/ 打開指定的輸出文件,以二進(jìn)制方式打開并可讀可寫,如文件存在,則清除其容。fstream file

7、(argv2,ios:out|ios:in|ios:binary|ios:trunc,0); / 打開或創(chuàng)建一 個一個供寫入的文件,打開供讀取的文件for(int i=0;i8);file.put(char(length&0xff);/ file.write(data,length);/將文件長度值按照逆序?qū)懭氲捷敵鑫募拈L度字段中。將 data 容寫入到輸出文件中。/ 如果輸入文件長度不足B,則用補(bǔ)足B。if(length46)for(int j=length;j46;j+) file.put(char(0x00);file.put(char(0x00);/將數(shù)據(jù)字段后添加個file.see

8、kg(8,ios:beg);/ unsigned char ch;/ch將讀指針指向目的地址字段,從此處開始用來保存讀入的字符。CRC計算unsigned char crc=char(0x00);/余數(shù)初始值為。while(1)進(jìn)行CRC計算file.get(ch);if(ch=0xff)/ 判斷是否到了文件結(jié)尾,如果是,則退出循環(huán)。 break;for(i=0;i8;i+)/對入讀入的字符的位分別處理。if(0x80=(crc&(0x80)/當(dāng)前余數(shù)最高位為,需要進(jìn)行除法運(yùn)算。crc=(crc7);/左移位,最低位補(bǔ)。將輸入數(shù)據(jù)相應(yīng)的值遞補(bǔ)到余數(shù)末位。crc=crcA(0x07);進(jìn)行除法運(yùn)

9、算,即與除數(shù)的低位相異或。else/ 當(dāng)前余數(shù)的最高位為,不需要進(jìn)行除法運(yùn)算。crc=(crc7);/將輸入數(shù)據(jù)相應(yīng)位的值遞補(bǔ)到余數(shù)末位。ch=ch1;/ 讀到的字符左移位,使數(shù)據(jù)下一位作為輸入位。file.clear();/文件清理file.seekp(-1,ios:end);/將寫指針移到輸出文件的最后。file.put(crc);/ 寫入 crc 碼。關(guān)閉輸入文件和輸出文件。file.close(); in file.close();/ coutendl數(shù)據(jù)幀文件argv2圭寸裝完成endl; 運(yùn)行結(jié)果:運(yùn)行結(jié)果如下所示:執(zhí)行EncapFrame.exe文件的結(jié)果如下所示:模擬 Ethe

10、rnet 幀的發(fā)送過程題目:編寫程序模擬 Ethernet 結(jié)點(diǎn)的數(shù)據(jù)發(fā)送流程 設(shè)計要求:(1)用兩個線程 a,b 來模擬 Ethernet 上的兩臺主機(jī)。(2)用一個雙字類型變量 Bus 來模擬總線(將其初始化為“ /0”,并且總線等于 “/0”時表示總線空閑)。(3)兩個子線程向總線發(fā)送自己的數(shù)據(jù)。數(shù)據(jù)用該線程的線程信號進(jìn)行模擬, 發(fā)送數(shù)據(jù)用線程號和Bus的“或”操作進(jìn)行模擬(即Bus=Bus|ID, ID為該線程的線 程號)。( 4)每臺主機(jī)須向總線成功發(fā)送 10 次數(shù)據(jù),如果其中某次數(shù)據(jù)發(fā)送失敗,則該 線程結(jié)束。(5)發(fā)送流程須遵循 CSMA/CD 。隨機(jī)延遲算法中的沖突窗口取 0.0

11、05。在數(shù)據(jù) 發(fā)送成功(即Bus=ID)后,報告“ ID send succesS,產(chǎn)生沖突(即Bus! =ID)后, 報告“ID send collision”,發(fā)送失?。礇_突計數(shù)器值為 0)后報告“ ID send failure, 隨著主機(jī)發(fā)送成功次數(shù)的增加, 報告其已發(fā)送成功的次數(shù), 如“主機(jī) A 發(fā)送成功次數(shù) =3”。三、可行性分析1. 技術(shù)可行性 技術(shù)可行性分析包括:風(fēng)險分析、資源分析和技術(shù)分析。風(fēng)險分析的任務(wù)是,在給定的約束條件下,判斷能否設(shè)計并實(shí)現(xiàn)系統(tǒng)所需功能和性能。資源分析 的任務(wù)是,論證是否具有系統(tǒng)開發(fā)所需的各類人員(管理人員和各類專業(yè)技術(shù)人 員)、軟件、硬件資源和工作環(huán)

12、境等。技術(shù)分析的任務(wù)是,論證當(dāng)前的科學(xué)技術(shù) 是否支持系統(tǒng)開發(fā)的全過程。 其中最主要的是分析技術(shù)條件是否能順利完成開發(fā) 工作,硬、軟件能否滿足開發(fā)者的需要等。2. 功能分析基本功能1. 在一臺計算機(jī)上實(shí)現(xiàn) ,用多個程序或線程來模擬多個計算機(jī)2. 使用一個共享數(shù)據(jù)區(qū)來模擬總線3. 模擬實(shí)現(xiàn)載波監(jiān)聽的過程4. 模擬實(shí)現(xiàn)發(fā)生沖突的過程和沖突的處理機(jī)制四 . Ethernet 幀的發(fā)送與接收流程1 Ethernet 幀的發(fā)送流程1)載波偵聽過程。Ethernet中每個結(jié)點(diǎn)利用總線發(fā)送數(shù)據(jù),總線是每個結(jié)點(diǎn)共享 的公共傳輸介質(zhì)。所以結(jié)點(diǎn)在發(fā)送一個幀前,必須偵聽總線是否空閑。由于 Ethernet 的數(shù)據(jù)采用

13、曼徹斯特編碼方式, 所以可以通過判斷總線電平是否跳變來確定總線是否 空閑。若總線空閑,就可以啟動發(fā)送,否則繼續(xù)偵聽。2)沖突檢測。在數(shù)據(jù)發(fā)送過程中,可能會產(chǎn)生沖突(沖突是指總線上同時出現(xiàn) 兩個或兩個以上的發(fā)送信號, 他們疊加后的信號波形與任何發(fā)送結(jié)點(diǎn)的輸出波形都不 相同)。因?yàn)榭赡苡卸鄠€主機(jī)都在偵聽總線,當(dāng)它們偵聽到總線空閑時,就會往總線 上發(fā)送數(shù)據(jù)。所以在發(fā)送數(shù)據(jù)的過程中,也應(yīng)該進(jìn)行沖突檢測,只要發(fā)現(xiàn)沖突就應(yīng)該 立即停止發(fā)送數(shù)據(jù)。3)隨即延遲后重發(fā)。在檢測到?jīng)_突、停止發(fā)送后,結(jié)點(diǎn)進(jìn)行隨機(jī)延遲后重發(fā)。 若發(fā) 16次后還沒成功,則宣告發(fā)送失敗,取消該幀的發(fā)送。隨機(jī)延遲的算法一般采 用截斷的二進(jìn)制

14、指數(shù)退避算法。 當(dāng)出現(xiàn)線路沖突時, 如果沖突的各站點(diǎn)都采用同樣的 退避間隔時間,則很容易產(chǎn)生二次、三次的碰撞。因此,要求各個站點(diǎn)的退避間隔時 間具有差異性。這要求通過退避算法來實(shí)現(xiàn)。當(dāng)一個站點(diǎn)發(fā)現(xiàn)線路忙時,要等待一個延時時間M,然后再進(jìn)行偵聽工作。延時時間 M由以下算法決定:M=2k*R*a。其中 a為沖突窗口值(沖突窗口為總線最大長度和電磁波在介質(zhì)中傳播速度比值的 2倍), R為隨機(jī)數(shù),k的取值為k=min(n,16) ,n為該幀已被發(fā)送的次數(shù)。圖1給出了 Ethernet 幀的發(fā)送流程。2 Ethernet幀的接收流程幀的接收流程大致可以分為以下三個步驟:1 )檢查是否發(fā)生沖突,若發(fā)生沖突

15、,則丟棄該幀;若沒有沖突,進(jìn)入下一步。2)檢查該幀的目的地址看是否可以接收該幀,若可以接收,則進(jìn)入下一步。3)檢查CRC檢驗(yàn)和LLC數(shù)據(jù)長度。若都正確,接受該幀,否則丟棄。圖1 Ethernet幀的發(fā)送流程圖2主程序流程圖五.詳細(xì)設(shè)計1. 設(shè)計中的重點(diǎn)及難點(diǎn)1)模擬沖突過程,在這個程序中不要使用任何線程同步機(jī)制2)若程序中不能模擬出沖突,可以在某些地方加入延時。2. 核心代碼#i nclude #in elude #in elude HANDLE hTreadl, hTread2; / 線程句柄DWORD dwThreadldl, dwThreadld2; / 線程 ID 號DWORD Bus

16、 = 0;/總線DWORD WINAPI ThreadProcA ( LPVOID IpParam ) int CollisionCounter = 11;/ 沖突計數(shù)器初始值為 11double collisionWindow = 0.005;/ 沖突窗口值取 0.005int randNum = rand()%3;/ 隨機(jī)數(shù)Loop: if (Bus=0)/ 總線空閑Bus = Bus|dwThreadId1;/ 模擬發(fā)送包Sleep (12);if (Bus = dwThreadId1) / 數(shù)據(jù)發(fā)送成功printf ( %d Send Successnn, dwThreadId1 );

17、/ 發(fā)送成功Bus = 0;/ 存清零CollisionCounter = 11;/ 復(fù)原沖突計數(shù)器Sleep (rand()%10);/ 隨機(jī)延時i+;printf ( 主機(jī)a發(fā)送成功次數(shù)= %dnn, i);if (i0 )/ 隨機(jī)延遲重發(fā),延遲算法用截止二進(jìn)制指數(shù)后退算法Sleep(unsigned long)(randNum *(int)pow(2,(CollisionCounter10)?10:CollisionCounter)collisionWindow);goto Loop;elseprintf ( %ld Send Failurenn, dwThreadId1 );/ 重 發(fā)

18、次數(shù)超過 16 次,宣布發(fā)送失敗else/ 總線忙goto Loop;/ 繼續(xù)載波偵聽return 0;DWORD WINAPI ThreadProcB ( LPVOID IpParam )/ 返回 DW0RD(3位數(shù)據(jù))的 API 函數(shù)int j = 0;int CoIIisionCounter = 11;doubIe coIIisionWindow = 0.005;int randNum = rand()%3;Loop: if (Bus=0)SIeep (2);Bus = Bus|dwThreadId2;SIeep (3);if (Bus = dwThreadId2)/ 數(shù)據(jù)發(fā)送成功printf ( %d Send Successnn, dwThreadId2 );Bus = 0;CollisionCounter = 11;Sleep (rand()%10);j+;printf ( 主機(jī)b發(fā)送成功次數(shù)= %dnn, j);if (j0 )Sleep(unsignedlong)(randNum*(int)pow(2,(CollisionCounter10)?10:CollisionCounter)*collisionWindow);goto Loop;elseprintf ( %ld Send Failurenn, dwThre

溫馨提示

  • 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

提交評論