Etherent幀的封裝和發(fā)送過(guò)程_第1頁(yè)
Etherent幀的封裝和發(fā)送過(guò)程_第2頁(yè)
Etherent幀的封裝和發(fā)送過(guò)程_第3頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)一幀封裝實(shí)驗(yàn)?zāi)康模?編寫(xiě)程序,根據(jù)給出的原始數(shù)據(jù),組裝一個(gè)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é)果。? 輸出:對(duì)應(yīng)input1和input2得結(jié)果分別為output1和output2。試驗(yàn)要求:?編寫(xiě)程序,根據(jù)給出的原始數(shù)據(jù),組裝一個(gè)IEEE 802.3格式的幀(題目)默認(rèn)的

2、輸入文件為二進(jìn)制原始數(shù)據(jù)(文件名分別為input1和input2)。?要求程序?yàn)槊钚谐绦颉1热?,可?zhí)行文件名為framer.exe,則命令行形式如下:En cap Framer in putfile outputfile,其中,i nputfile 為原始數(shù)據(jù)文件, outputfile為輸出結(jié)果。輸出:對(duì)應(yīng)input1和input2得結(jié)果分別為output1和output2實(shí)驗(yàn)設(shè)計(jì)相關(guān)知識(shí):幀:來(lái)源于串行線路上的通信。其中,發(fā)送者在發(fā)送數(shù)據(jù)的前后各添加特殊 的字符,使它們成為一個(gè)幀。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)碼幀前定界符目的地址源地址長(zhǎng)度字段數(shù)據(jù)字段校驗(yàn)字段7B1B(2/6B)(2/6B)(2B)(長(zhǎng)度可變)(4B)其中,幀數(shù)據(jù)字段的最小長(zhǎng)度為46B。如果幀的LLC數(shù)據(jù)少于46B,則應(yīng)將 數(shù)據(jù)字段填充至46B。填充字符是任意的,不計(jì)入長(zhǎng)度字段值中。在校驗(yàn)字段中,使用的是CRC校驗(yàn)。校驗(yàn)的圍包括目的地址字段、 源地址字 段、長(zhǎng)度字段、LLC數(shù)據(jù)字段。循環(huán)冗余編碼(CRC是種重要的線性分組碼、編碼和解碼方法,具有簡(jiǎn)單、檢錯(cuò)和糾錯(cuò)能力強(qiáng)等特點(diǎn),在通信領(lǐng)域廣泛地用于實(shí)現(xiàn)差錯(cuò)控制。CR(校驗(yàn)碼的檢錯(cuò)能力很強(qiáng),不僅能檢查出離散錯(cuò)誤,還

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

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

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

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

8、kg(8,ios:beg);/ unsigned char ch;/ch將讀指針指向目的地址字段,從此處開(kāi)始用來(lái)保存讀入的字符。CRC計(jì)算unsigned char crc=char(0x00);/余數(shù)初始值為。while(1)進(jìn)行CRC計(jì)算file.get(ch);if(ch=0xff)/ 判斷是否到了文件結(jié)尾,如果是,則退出循環(huán)。 break;for(i=0;i8;i+)/對(duì)入讀入的字符的位分別處理。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);/將寫(xiě)指針移到輸出文件的最后。file.put(crc);/ 寫(xiě)入 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ā)送過(guò)程題目:編寫(xiě)程序模擬 Ethernet 結(jié)點(diǎn)的數(shù)據(jù)發(fā)送流程 設(shè)計(jì)要求:(1)用兩個(gè)線程 a,b 來(lái)模擬 Ethernet 上的兩臺(tái)主機(jī)。(2)用一個(gè)雙字類(lèi)型變量 Bus 來(lái)模擬總線(將其初始化為“ /0”,并且總線等于 “/0”時(shí)表示總線空閑)。(3)兩個(gè)子線程向總線發(fā)送自己的數(shù)據(jù)。數(shù)據(jù)用該線程的線程信號(hào)進(jìn)行模擬, 發(fā)送數(shù)據(jù)用線程號(hào)和Bus的“或”操作進(jìn)行模擬(即Bus=Bus|ID, ID為該線程的線 程號(hào))。( 4)每臺(tái)主機(jī)須向總線成功發(fā)送 10 次數(shù)據(jù),如果其中某次數(shù)據(jù)發(fā)送失敗,則該 線程結(jié)束。(5)發(fā)送流程須遵循 CSMA/CD 。隨機(jī)延遲算法中的沖突窗口取 0.0

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

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

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

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

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

16、 = 0;/總線DWORD WINAPI ThreadProcA ( LPVOID IpParam ) int CollisionCounter = 11;/ 沖突計(jì)數(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ù)原沖突計(jì)數(shù)器Sleep (rand()%10);/ 隨機(jī)延時(shí)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ù)超過(guò) 16 次,宣布發(fā)送失敗else/ 總線忙goto Loop;/ 繼續(xù)載波偵聽(tīng)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論