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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、><p>  length=infile.tellg();//計(jì)算指針偏移量,即為輸入文件的長度。</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ù)長度,再申請(qǐng)相同大小的空間,不會(huì)造成空間上的浪費(fèi)。</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。填充字符是任意的,不計(jì)入長度字段值中。在程序中是用一下方法實(shí)現(xiàn)的:</p><p>  //如果輸入文件長度不足B,則用補(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.計(jì)算CRC校驗(yàn)碼并填充</p><p>  幀封裝的最后一步就是對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),并將校驗(yàn)結(jié)果記入幀校驗(yàn)字段。本程序中實(shí)現(xiàn)的是CRC-8校驗(yàn)算法,方法如下所示:<

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

13、r(0x00);//余數(shù)初始值為。</p><p>  while(1)//進(jìn)行CRC計(jì)算</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++)//對(duì)入讀入的字符的位分別處理。</p><p><b>  {</b></p><p>  if(0x80==(crc&(0x80)))//當(dāng)前余數(shù)最高位為,需要進(jìn)行除法運(yùn)算。</p><p><b&g

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

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

17、crc=crc|((ch&0x80)>>7);//將輸入數(shù)據(jù)相應(yīng)位的值遞補(bǔ)到余數(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計(jì)算流程圖</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<<"請(qǐng)按以下格式輸入: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();//計(jì)算指針偏移量,即為輸入文件的長度。</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ǔ)足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ù)字段后添加個(gè)</p><p>  file.seekg(8,ios::beg

29、);//將讀指針指向目的地址字段,從此處開始CRC計(jì)算</p><p>  unsigned char ch;//ch用來保存讀入的字符。</p><p>  unsigned char crc=char(0x00);//余數(shù)初始值為。</p><p>  while(1)//進(jìn)行CRC計(jì)算</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++)//對(duì)入讀入的字符的位分別處理。</p><

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

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

33、t;<p><b>  {</b></p><p>  crc=(crc<<1)&(0xff);//crc左移位,最低位補(bǔ)。</p><p>  crc=crc|((ch&0x80)>>7);//將輸入數(shù)據(jù)相應(yīng)位的值遞補(bǔ)到余數(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í)驗(yàn)數(shù)據(jù)、結(jié)果分析</p><p><b>  運(yùn)行結(jié)果</b></p><p><b>  運(yùn)行結(jié)果如下所

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

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論