計算機網(wǎng)絡課程設計--模擬以太網(wǎng)幀封裝_第1頁
計算機網(wǎng)絡課程設計--模擬以太網(wǎng)幀封裝_第2頁
計算機網(wǎng)絡課程設計--模擬以太網(wǎng)幀封裝_第3頁
計算機網(wǎng)絡課程設計--模擬以太網(wǎng)幀封裝_第4頁
計算機網(wǎng)絡課程設計--模擬以太網(wǎng)幀封裝_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設計報告課程設計題目: 模擬以太網(wǎng)幀封裝專 業(yè):信息工程班 級:1122301姓 名:學 號:指導教師: 2013年 12 月20日目 錄1設計任務和目的211 課程設計任務212 課程設計目的22設計原理221 802.3標準幀結構222 CRC的基本實現(xiàn)33設計實現(xiàn)431 設計思路43.1.1 填充幀頭部字段43.1.2填充數(shù)據(jù)字段43.1.3 計算填充CRC432 流程圖53.2.1 程序流程圖63.2.2 CRC計算流程圖74程序源碼85運行結果106總結體會111.設計任務和目的1.1課程設計任務根據(jù)給出的原始數(shù)據(jù),組裝一個IEEE802.3格式的幀。默認的輸入文件為二進制原始數(shù)

2、據(jù)。封裝得到的幀輸出到二進制數(shù)據(jù)文件中。1.2課程設計目的(1)使學生掌握網(wǎng)絡通信協(xié)議的基本工作原理;(2)培養(yǎng)學生基本掌握網(wǎng)絡編程的基本思路和方法;(3)能提高學生對所學計算機網(wǎng)絡理論知識的理解能力;(4)能提高學生對所學知識的實際應用能力和創(chuàng)新能力;(5)提高學生的科技論文寫作能力。 2.設計原理 2.1 802.3標準幀結構以太網(wǎng)Ethernet幀格式:前序(P)目的地址(SD)源地址(SA)長度數(shù)據(jù)FCS8 B6B6B2B461500B4B1. 前序字段前序字段由7個字節(jié)的交替出現(xiàn)的1和0組成,設置該字段的目的是指示幀的開始并便于網(wǎng)絡中的所有接收器均能與到達幀同步。2.幀起始定界符字段

3、它可以被看作前序字段的延續(xù)。實際上,該字段的組成方式繼續(xù)使用前序字段中的格式,這個一個字節(jié)的字段的前6個比特位置由交替出現(xiàn)的1和0構成。該字段的最后兩個比特位置是11,這兩位中斷了同步模式并提醒接收后面跟隨的是幀數(shù)據(jù)。3.目的地址字段目的地址字段確定幀的接收者。6個字節(jié)的源地址和目的地址字段是局域網(wǎng)中的所有工作站必須使用同樣的地址結構。4.源地址字段源地址字段標識發(fā)送幀的工作站。和目前地址字段類似,源地址字段的長度六個字節(jié)。5.長度字段用于IEEE802.3的兩字節(jié)長度字段定義了數(shù)據(jù)字段包含的字節(jié)數(shù)。從前序 到FCS字段的幀長度最小必須是64字節(jié)?;谧钚L為64字節(jié)和使用六字節(jié)地址字段的要

4、求,意味著每個數(shù)據(jù)字段的最小長度為46字節(jié)。如果傳輸數(shù)據(jù)少于46個字節(jié),應將數(shù)據(jù)字段填充至46字節(jié)。不過,填充字符的個數(shù)不包括在長度字段值中,數(shù)據(jù)字段的最大長度為1500字節(jié)。6.數(shù)據(jù)字段數(shù)據(jù)字段的最小長度必須為46字節(jié)以保證幀長至少為64字節(jié),這意味著傳輸一字節(jié)信息也必須使用46字節(jié)的數(shù)據(jù)字段:如果填入該該字段的信息少于46字節(jié),該字段的其余部分也必須進行填充零。數(shù)據(jù)字段的最大長度為1500字節(jié)。7. 校驗序列字段將計算出的CRC填入32位的FCS校驗字段。幀校驗序列字段提供了一種錯誤檢測機制,包括了地址字段、長度字段和數(shù)據(jù)字段的循環(huán)冗余校驗(CRC)碼。2.2 CRC的基本實現(xiàn)利用CRC進

5、行檢錯的過程可簡單描述如下:在發(fā)送端根據(jù)要傳送的k位二進制碼序列,以一定的規(guī)則產(chǎn)生一個校驗用的r位監(jiān)督碼(CRC碼),附在原始信息的后邊,構成一個新的二進制碼序列(共k+r位),然后發(fā)送出去。在接收端,根據(jù)信息碼和CRC碼之間所遵循的規(guī)則進行檢驗,以確定傳送中是否出錯。這個規(guī)則在差錯控制理論中稱為“生成多項式”。3.設計實現(xiàn)3.1設計思路3.1.1 填充幀頭部字段在這一部分需要向輸出文件寫入前導碼、幀前定界符、目的地址、源地址和長度字段。寫入前四個部分相對簡單,而寫入長度字段時需要計算輸入文件的長度。所以計算輸入文件長度的方法如下:int length=0;infile.seekg(0,ios

6、:end);/將讀指針移到文件末尾。/計算指針偏移量,即為輸入文件的長度length=infile.tellg();/創(chuàng)建字符指針并根據(jù)文件長度初始化unsigned char* data=new unsigned charlength; infile.seekg(0,ios:beg);/將讀指針移到文件開始。/將文件數(shù)據(jù)讀入到字符指針data中infile.read(data,length); /將data內容寫入到輸出文件中file.write(data,length);3.1.2 填充數(shù)據(jù)字段在數(shù)據(jù)字段中,數(shù)據(jù)字段的最小長度為46B。如果幀的LLC數(shù)據(jù)少于46B,則應將數(shù)據(jù)字段填充至46

7、B。填充字符是任意的,不計入長度字段值中。在程序中是用一下方法實現(xiàn)的:/如果輸入文件長度不足46B,則用補足46Bif(length46) for(int j=length;j0;i=1) if(crc&0x80) crc=1; if(temp&i) crc=0x01;/將輸入數(shù)據(jù)相應位的值遞補到余數(shù)末位crc=0x07;/進行除法運算(即減去除數(shù)的低8位:00000111) else crc=1; if(temp&i) crc=0x01;/將輸入數(shù)據(jù)相應位的值遞補到余數(shù)末位 3.2程序流程圖3.2.1程序流程圖 3.2.2 CRC計算流程圖4.程序源代碼(主要代碼)CString str;v

8、oid CEx3Dlg:OnButton2() CString filter;filter=文本文件(*.txt)|*.txt|c+文件(*.h,*.cpp)|*.h,*.cpp|;CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter);if(dlg.DoModal()=IDOK)str=dlg.GetPathName();/AfxMessageBox(str);MessageBox(文件選擇成功);/int nIndex=m_edit.AddString(str);/m_edit.SetItemDataPtr(nIndex,0);voi

9、d CEx3Dlg:OnButton1() fstream file;/打開指定輸出文件,讀寫方式為以二進制方式可讀可寫,如文件存在則清除其內容file.open(D:out.txt,ios:in|ios:out|ios:binary|ios:trunc);for(int i=0;i7;i+) file.put(char(0xaa);/寫入7B前導碼file.put(char(0xab);/寫入1B幀前界定符long pCrcs=file.tellp();/獲得當前文件指定指針位置,計算CRC時從這里開始char dst_addr6=char(0xff),char(0xff),char(0xe

10、4),char(0x86),char(0x30), char(0xd0);file.write(dst_addr,sizeof(dst_addr);/寫入6B目的地址char src_addr6=char(0xff),char(0xff),char(0x80),char(0x1a),char(0xe6), char(0x09); file.write(src_addr,sizeof(src_addr);/寫入6B源地址ifstream infile;infile.open(str,ios:binary); infile.seekg(0,ios:end);/將文件讀指針移到末尾short len

11、gth=(short)infile.tellg();/獲得位置偏移量,即為輸入文件長度file.put(char(length/256);/將該長度寫入數(shù)據(jù)長度字段(2B)file.put(char(length%256); char* data=new charlength; infile.seekg(0,ios:beg); infile.read(data,length);/從輸入文件中讀出所有數(shù)據(jù)至data中file.write(data,length);/將data中數(shù)據(jù)寫入輸出文件infile.close();delete data;if(length46) for(int i=0;

12、i0;i=1) if(crc&0x80) crc=1; if(temp&i) crc=0x01;/將輸入數(shù)據(jù)相應位的值遞補到余數(shù)末位crc=0x07;/進行除法運算(即減去除數(shù)的低8位:00000111) else crc=1; if(temp&i) crc=0x01;/將輸入數(shù)據(jù)相應位的值遞補到余數(shù)末位 file.seekp(pCrc,ios:beg); length=sizeof(crc); switch(length) /若CRC不足4B,將CRC補位至4B case 1: file.put(char(0x00); file.put(char(0x00); file.put(char(0

13、x00); file.put(crc); break; case 2: file.put(char(0x00); file.put(char(0x00); file.put(crc); break; case 3: file.put(char(0x00); file.put(crc); break; MessageBox(幀文件封裝完成,封裝后文件為D:out.txt);file.close(); 5.運行結果(1)輸入數(shù)據(jù)和幀封裝:(2)源文件如下:(3)被封裝后的文件如下:6.總結與體會本次課程設計重點學習了幀封裝。在查閱了很多幀的封裝的知識后,對幀及其封裝的方法有了一定程度的了解和掌握。在對幀的學習后,有了很大的收獲,并且使幀的封裝得以實現(xiàn)。在設計中實現(xiàn)了幀的封裝,主要是將幀的七個部分-前導碼、幀前定界符、目的地址、源地址、長度字段、數(shù)據(jù)字段和校驗字段,按順序封裝的,最后形成一個完整的幀結構。同時,在編寫程序的過程中,用到了很多的函數(shù),這些函數(shù)的運用使得程序簡便而且正確的運行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論