Etherent幀的封裝和發送過程_第1頁
Etherent幀的封裝和發送過程_第2頁
Etherent幀的封裝和發送過程_第3頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、計算機網絡課程設計實驗一幀封裝實驗目的:?編寫程序,根據給出的原始數據,組裝一個IEEE 802.3格式的幀(題目)默認的輸入文件為二進制原始數據(文件名分別為inputl和input2)。?要求程序為命令行程序。比如,可執行文件名為framer.exe,則命令行形式如下:En cap Framer in putfile outputfile,其中,i nputfile 為原始數據文件, outputfile為輸出結果。? 輸出:對應input1和input2得結果分別為output1和output2。試驗要求:?編寫程序,根據給出的原始數據,組裝一個IEEE 802.3格式的幀(題目)默認的

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

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

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

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

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

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

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

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

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

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

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

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

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

15、,則丟棄該幀;若沒有沖突,進入下一步。2)檢查該幀的目的地址看是否可以接收該幀,若可以接收,則進入下一步。3)檢查CRC檢驗和LLC數據長度。若都正確,接受該幀,否則丟棄。圖1 Ethernet幀的發送流程圖2主程序流程圖五.詳細設計1. 設計中的重點及難點1)模擬沖突過程,在這個程序中不要使用任何線程同步機制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;/ 沖突計數器初始值為 11double collisionWindow = 0.005;/ 沖突窗口值取 0.005int randNum = rand()%3;/ 隨機數Loop: if (Bus=0)/ 總線空閑Bus = Bus|dwThreadId1;/ 模擬發送包Sleep (12);if (Bus = dwThreadId1) / 數據發送成功printf ( %d Send Successnn, dwThreadId1 );

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

18、次數超過 16 次,宣布發送失敗else/ 總線忙goto Loop;/ 繼續載波偵聽return 0;DWORD WINAPI ThreadProcB ( LPVOID IpParam )/ 返回 DW0RD(3位數據)的 API 函數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)/ 數據發送成功printf ( %d Send Successnn, dwThreadId2 );Bus = 0;CollisionCounter = 11;Sleep (rand()%10);j+;printf ( 主機b發送成功次數= %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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論