2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  設(shè)計報告</b></p><p>  課 程 計算機網(wǎng)絡(luò) </p><p>  設(shè)計名稱 幀封裝 </p><p>  專業(yè)班級 </p><p>  同組人姓名 &

2、lt;/p><p><b>  同組人學(xué)號 </b></p><p>  實驗日期 2011-6-9 </p><p>  指導(dǎo)教師 </p><p>  成 績 </p><p&

3、gt;  2011年 6 月 9 日</p><p><b>  一、設(shè)計目的和要求</b></p><p><b>  1、實驗?zāi)康?lt;/b></p><p>  幀是在數(shù)據(jù)鏈路層數(shù)據(jù)進(jìn)行傳輸與交換的基本單位。構(gòu)造幀對于理解網(wǎng)絡(luò)協(xié)議的概念、協(xié)議執(zhí)行過程以及網(wǎng)絡(luò)問題處理的一般方法具有重要的意義。本次課程設(shè)計的目的是應(yīng)用數(shù)據(jù)鏈

4、路層與介質(zhì)訪問控制層的知識,根據(jù)數(shù)據(jù)鏈路層的基本原理,通過構(gòu)造一個具體的Ethernet幀,從而深入理解網(wǎng)絡(luò)協(xié)議的基本概念與網(wǎng)絡(luò)問題處理的一般方法。</p><p><b>  2、實驗要求</b></p><p>  本程序的功能是進(jìn)行幀封裝。</p><p>  以命令行形式運行:framer inputfile outputfile 其中

5、framer為程序名;inputfile為輸入文件;outputfile為輸出文件;成功封裝后顯示“幀文件 outputfile 封裝完成”。</p><p>  二、設(shè)計說明(包括設(shè)計分析,系統(tǒng)運行環(huán)境,設(shè)計中的重點和難點,輸入和輸出條件等)</p><p>  程序共分三個部分:填充幀頭部字段,填充數(shù)據(jù)字段,計算CRC校驗碼并填充。</p><p>  1. 填

6、充幀頭部字段</p><p>  在這一部分需要向輸出文件寫入前導(dǎo)碼、幀前定界符、目的地址、源地址和長度字段。寫入前四個部分十分簡單,而寫入長度字段時需要計算輸入文件的長度。所以計算輸入文件長度的方法如下所示:</p><p>  int length=0;</p><p>  infile.seekg(0,ios::end);//將讀指針移到文件末尾。</p

7、><p>  length=infile.tellg();//計算指針偏移量,即為輸入文件的長度。</p><p>  unsigned char* data=new unsigned char[length];//創(chuàng)建字符指針并根據(jù)文件長度初始化。</p><p>  infile.seekg(0,ios::beg);//將讀指針移到文件開始。</p>

8、<p>  infile.read(data,length);//將文件數(shù)據(jù)讀入到字符指針data中。</p><p>  file.put(char(length>>8));</p><p>  file.put(char(length&0xff));//將文件長度值按照逆序?qū)懭氲捷敵鑫募拈L度字段中。</p><p>  file.

9、write(data,length);//將data內(nèi)容寫入到輸出文件中。</p><p>  這種方法采用的是使用文件流相關(guān)函數(shù)的辦法,簡單明了,可以先獲得文件數(shù)據(jù)長度,再申請相同大小的空間,不會造成空間上的浪費。</p><p><b>  2. 填充數(shù)據(jù)字段</b></p><p>  在數(shù)據(jù)字段中,數(shù)據(jù)字段的最小長度為46B。如果幀的L

10、LC數(shù)據(jù)少于46B,則應(yīng)將數(shù)據(jù)字段填充至46B。填充字符是任意的,不計入長度字段值中。在程序中是用一下方法實現(xiàn)的:</p><p>  //如果輸入文件長度不足B,則用補足B</p><p>  if(length<46)</p><p><b>  {</b></p><p>  for(int j=length

11、;j<46;j++)</p><p>  file.put(char(0x00));</p><p><b>  }</b></p><p>  3.計算CRC校驗碼并填充</p><p>  幀封裝的最后一步就是對數(shù)據(jù)進(jìn)行校驗,并將校驗結(jié)果記入幀校驗字段。本程序中實現(xiàn)的是CRC-8校驗算法,方法如下所示:<

12、/p><p>  file.put(char(0x00));//將數(shù)據(jù)字段后添加個</p><p>  file.seekg(8,ios::beg);//將讀指針指向目的地址字段,從此處開始CRC計算</p><p>  unsigned char ch;//ch用來保存讀入的字符。</p><p>  unsigned char crc=cha

13、r(0x00);//余數(shù)初始值為。</p><p>  while(1)//進(jìn)行CRC計算</p><p><b>  {</b></p><p>  file.get(ch);</p><p>  if(ch==0xff)//判斷是否到了文件結(jié)尾,如果是,則退出循環(huán)。</p><p><b

14、>  break;</b></p><p>  for(i=0;i<8;i++)//對入讀入的字符的位分別處理。</p><p><b>  {</b></p><p>  if(0x80==(crc&(0x80)))//當(dāng)前余數(shù)最高位為,需要進(jìn)行除法運算。</p><p><b&g

15、t;  {</b></p><p>  crc=(crc<<1)&(0xff);//crc左移位,最低位補。</p><p>  crc=crc|((ch&0x80)>>7);//將輸入數(shù)據(jù)相應(yīng)的值遞補到余數(shù)末位。</p><p>  crc=crc^(0x07);//進(jìn)行除法運算,即與除數(shù)的低位相異或。</

16、p><p><b>  }</b></p><p>  else//當(dāng)前余數(shù)的最高位為,不需要進(jìn)行除法運算。</p><p><b>  {</b></p><p>  crc=(crc<<1)&(0xff);//crc左移位,最低位補。</p><p>  

17、crc=crc|((ch&0x80)>>7);//將輸入數(shù)據(jù)相應(yīng)位的值遞補到余數(shù)末位。</p><p><b>  }</b></p><p>  ch=ch<<1;//讀到的字符左移位,使數(shù)據(jù)下一位作為輸入位。</p><p><b>  } } </b></p><p

18、><b>  三、程序流程圖</b></p><p><b>  程序流程圖</b></p><p><b>  CRC計算流程圖</b></p><p>  四、程序源代碼及注釋</p><p>  #include<iostream.h></p>

19、;<p>  #include<fstream.h></p><p>  #include<stdlib.h></p><p>  void main(int argc,char*argv[])</p><p><b>  {</b></p><p>  //如果輸入命令行不正確,則

20、輸出提示后退出。</p><p>  if(argc!=3)</p><p><b>  {</b></p><p>  cout<<endl<<"請按以下格式輸入:framer inputfile outputfile"<<endl;</p><p><b&

21、gt;  exit(0);</b></p><p><b>  }</b></p><p>  //打開指定的輸出文件,以二進(jìn)制方式打開并可讀可寫,如文件存在,則清除其內(nèi)容。</p><p>  fstream file(argv[2],ios::out|ios::in|ios::binary|ios::trunc,0); <

22、/p><p>  for(int i=0;i<7;i++)</p><p>  file.put((char)0xaa);</p><p>  file.put((char)0xab);//寫入B的前導(dǎo)碼和B的幀前定界符。</p><p>  char des_add[]={char(0x00),char(0x00),char(0xE4),

23、char(0x86),char(0x3A),char(0xDC)};</p><p>  file.write(des_add,6);//寫入B的目的地址。</p><p>  char sor_add[]={char(0x00),char(0x00),char(0x80),char(0x1A),char(0xE6),char(0x65)};</p><p>  f

24、ile.write(sor_add,6);//寫入B的源地址。</p><p>  //創(chuàng)建輸入文件流并打開指定的輸入文件,以二進(jìn)制方式打開并可讀。</p><p>  ifstream infile(argv[1],ios::in|ios::binary,0); </p><p>  int length=0;</p><p>  infi

25、le.seekg(0,ios::end);//將讀指針移到文件末尾。</p><p>  length=infile.tellg();//計算指針偏移量,即為輸入文件的長度。</p><p>  unsigned char* data=new unsigned char[length];//創(chuàng)建字符指針并根據(jù)文件長度初始化。</p><p>  infile.see

26、kg(0,ios::beg);//將讀指針移到文件開始。</p><p>  infile.read(data,length);//將文件數(shù)據(jù)讀入到字符指針data中。</p><p>  file.put(char(length>>8));</p><p>  file.put(char(length&0xff));//將文件長度值按照逆序?qū)懭?/p>

27、到輸出文件的長度字段中。</p><p>  file.write(data,length);//將data內(nèi)容寫入到輸出文件中。</p><p>  //如果輸入文件長度不足B,則用補足B。</p><p>  if(length<46)</p><p><b>  {</b></p><p&

28、gt;  for(int j=length;j<46;j++)</p><p>  file.put(char(0x00));</p><p><b>  }</b></p><p>  file.put(char(0x00));//將數(shù)據(jù)字段后添加個</p><p>  file.seekg(8,ios::beg

29、);//將讀指針指向目的地址字段,從此處開始CRC計算</p><p>  unsigned char ch;//ch用來保存讀入的字符。</p><p>  unsigned char crc=char(0x00);//余數(shù)初始值為。</p><p>  while(1)//進(jìn)行CRC計算</p><p><b>  {</

30、b></p><p>  file.get(ch);</p><p>  if(ch==0xff)//判斷是否到了文件結(jié)尾,如果是,則退出循環(huán)。</p><p><b>  break;</b></p><p>  for(i=0;i<8;i++)//對入讀入的字符的位分別處理。</p><

31、;p><b>  {</b></p><p>  if(0x80==(crc&(0x80)))//當(dāng)前余數(shù)最高位為,需要進(jìn)行除法運算。</p><p><b>  {</b></p><p>  crc=(crc<<1)&(0xff);//crc左移位,最低位補。</p>&

32、lt;p>  crc=crc|((ch&0x80)>>7);//將輸入數(shù)據(jù)相應(yīng)的值遞補到余數(shù)末位。</p><p>  crc=crc^(0x07);//進(jìn)行除法運算,即與除數(shù)的低位相異或。</p><p><b>  }</b></p><p>  else//當(dāng)前余數(shù)的最高位為,不需要進(jìn)行除法運算。</p&g

33、t;<p><b>  {</b></p><p>  crc=(crc<<1)&(0xff);//crc左移位,最低位補。</p><p>  crc=crc|((ch&0x80)>>7);//將輸入數(shù)據(jù)相應(yīng)位的值遞補到余數(shù)末位。</p><p><b>  }</b>

34、;</p><p>  ch=ch<<1;//讀到的字符左移位,使數(shù)據(jù)下一位作為輸入位。</p><p><b>  }</b></p><p><b>  }</b></p><p>  file.clear();</p><p>  file.seekp(-1

35、,ios::end);//將寫指針移到輸出文件的最后。</p><p>  file.put(crc);//寫入crc碼。</p><p>  file.close();</p><p>  infile.close();//關(guān)閉輸入文件和輸出文件。</p><p>  cout<<endl<<"數(shù)據(jù)幀文件&

36、quot;<<argv[2]<<" 封裝完成"<<endl;</p><p><b>  }</b></p><p>  五、實驗數(shù)據(jù)、結(jié)果分析</p><p><b>  運行結(jié)果</b></p><p><b>  運行結(jié)果如下所

37、示:</b></p><p>  執(zhí)行framer.exe文件的結(jié)果如下所示:</p><p><b>  六、總結(jié)</b></p><p>  在此次的課程設(shè)計中,我做的題目是幀封裝。在最開始兩天收集資料的過程中,我查閱了很多幀的封裝的知識,對幀及其封裝的方法有了一定程度的了解和掌握。從最開始對幀的一個模糊的印象到對幀的結(jié)構(gòu)的七個

38、部分的完全掌握,有了很大的收獲,并且使幀的封裝得以實現(xiàn)。</p><p>  本次的課程設(shè)計為了實現(xiàn)幀的封裝,主要是將幀的七個部分---前導(dǎo)碼、幀前定界符、目的地址、源地址、長度字段、數(shù)據(jù)字段和校驗字段,一個一個按順序封裝的,最后使得一個幀的封裝得以完成。同時,在編寫程序的過程中,用到了很多的函數(shù),這些函數(shù)的運用使得程序簡便而且正確的運行出來。為了正確的實現(xiàn)這些函數(shù),我查閱了很多相關(guān)的資料,從中獲得了大量的有用的

39、信息,收獲也頗豐富。</p><p>  同時,在這近一周的課程設(shè)計中,我的動手能力得到了很大的提高,而且讓你給我將這學(xué)期所學(xué)的網(wǎng)絡(luò)的知識和以前所學(xué)的編程的知識充分的聯(lián)系起來,對這門課的認(rèn)識又提高了一層。除此之外,在做課程設(shè)計的時候也遇到了很多的問題,最后在同學(xué)的幫助下正確的解決了。從最開始的遇到問題到最后的正確解決問題,我懂得了正確出來問題的方法,也知道了自己的不足之處。此次的課程設(shè)計也是一個認(rèn)識自我的好機會。

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論