計(jì)算機(jī)網(wǎng)絡(luò)幀封裝課程設(shè)計(jì)報(bào)告_第1頁
計(jì)算機(jī)網(wǎng)絡(luò)幀封裝課程設(shè)計(jì)報(bào)告_第2頁
計(jì)算機(jī)網(wǎng)絡(luò)幀封裝課程設(shè)計(jì)報(bào)告_第3頁
計(jì)算機(jī)網(wǎng)絡(luò)幀封裝課程設(shè)計(jì)報(bào)告_第4頁
計(jì)算機(jī)網(wǎng)絡(luò)幀封裝課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、課程設(shè)計(jì)的目的和意義1一、 課程設(shè)計(jì)的內(nèi)容和要求1二、 課程設(shè)計(jì)的相關(guān)技術(shù)11.幀12.CRC校驗(yàn)2三、 課程設(shè)計(jì)過程41.填充幀頭部字段42.填充數(shù)據(jù)字段43.CRC校驗(yàn)44. 相關(guān)擴(kuò)展51.比特型運(yùn)算法52.字節(jié)型算法65.程序流程圖:76.CRC基本實(shí)現(xiàn)87.程序代碼98 運(yùn)行結(jié)果與分析11五、 課程設(shè)計(jì)小結(jié)12一、課程設(shè)計(jì)的目的和意義 目的:點(diǎn)對(duì)點(diǎn)信道的數(shù)據(jù)鏈路層的協(xié)議數(shù)據(jù)單元是幀。熟悉幀結(jié)構(gòu)對(duì)于理解網(wǎng)絡(luò)協(xié)議的概念、網(wǎng)絡(luò)層次結(jié)構(gòu)與協(xié)議執(zhí)行過程具有重要意義。本課程設(shè)計(jì)的主要目的的是通過封裝Ethernet幀,了解Ethernet幀中各個(gè)字段的含義和用途。 意義:幀是在數(shù)據(jù)鏈路層中進(jìn)行

2、數(shù)據(jù)傳輸?shù)膯挝弧W寣W(xué)生理解幀的每個(gè)字段的含義和用途,透徹理解網(wǎng)絡(luò)協(xié)議的概念。一、 課程設(shè)計(jì)的內(nèi)容和要求本次課程設(shè)計(jì)我負(fù)責(zé)的主要內(nèi)容為:封裝Ethernet幀中的CRC校驗(yàn)。 對(duì)于幀的封裝:首先填充幀頭部字段。其次便是填充幀的數(shù)據(jù)的字段(注意數(shù)據(jù)字段的長(zhǎng)度)。最后便是CRC校驗(yàn)了。對(duì)于CRC校驗(yàn),我們需要將校驗(yàn)結(jié)果記入幀校驗(yàn)字段。(其實(shí)現(xiàn)過程詳細(xì)見課程設(shè)計(jì)過程) 根據(jù)后面介紹的IEEE802.3幀結(jié)構(gòu),編寫程序?qū)⒅付〝?shù)據(jù)封裝為Ethernet幀。1)以命令行形式運(yùn)行: EncapFrame input_file output_file 其中,EncapFrame為程序名,input_file為輸

3、入數(shù)據(jù)文件,output_file為輸出文件。2) 輸出內(nèi)容:Ethernet幀的各字段內(nèi)容。二、 課程設(shè)計(jì)的相關(guān)技術(shù)1.幀 術(shù)語“幀”來源于串行線路上的通信。其中,發(fā)送者在發(fā)送數(shù)據(jù)的前后分別添加特殊的字符,使它們成為一個(gè)幀。Ethernet從某種程度上可以被看做是機(jī)器之間的數(shù)據(jù)鏈路層連接。首先我們來認(rèn)識(shí)一下幀結(jié)構(gòu),EthernerV2.0規(guī)范和IEEE802.3標(biāo)準(zhǔn)中的Ethernet幀結(jié)構(gòu)有一些差別,這里我們按802.3標(biāo)準(zhǔn)的幀結(jié)構(gòu)進(jìn)行討論。圖為幀結(jié)構(gòu)圖前導(dǎo)碼幀前定界符目的地址源地址長(zhǎng)度字段數(shù)據(jù)字段校驗(yàn)字段(7B)(1B)(2/6B)(2/6B)(2B)(長(zhǎng)度可變)(4B)如上圖所示,80

4、2.3標(biāo)準(zhǔn)的Ethernet幀結(jié)構(gòu)由7部分組成。(1) 前導(dǎo)碼與幀前定界符字段前導(dǎo)碼由56位(7B)的位序列組成。幀前定界符可以視為前導(dǎo)碼的延續(xù)。1B的幀前定界符結(jié)構(gòu)為.如果將前導(dǎo)碼與幀前定界符一起看,那么在62位1010位序列之后出現(xiàn)11。在11之后是Ethernet幀的目的地址字段。前導(dǎo)碼與幀前定界符主要是保證接收同步,這8B接收后不需要保留,也不記入幀頭長(zhǎng)度中。(2) 目的地址和源地址目的地址(DA)與源地址(SA)分別表示幀的接收結(jié)點(diǎn)地址與發(fā)送結(jié)點(diǎn)的硬件地址。在Ethernet幀中,目的地址和源地址字段長(zhǎng)度可以是2B或6B。目前的Ethernet都使用6B長(zhǎng)度的地址。Ethernet幀

5、的目的地址可以是單播地址、多播地址與廣播地址,目的地址的第一位為0表示單播地址,為1表示多播地址,目的地址為全1則表示廣播地址。(3) 長(zhǎng)度字段Ethernet幀用2B定義數(shù)據(jù)字段包含的字節(jié)數(shù)。協(xié)議規(guī)定,幀數(shù)據(jù)的最小長(zhǎng)度為46B,最大長(zhǎng)度為1500B。設(shè)置最小幀長(zhǎng)度的目的是使每個(gè)接收結(jié)點(diǎn)能夠有足夠時(shí)間檢測(cè)到?jīng)_突。(4) 數(shù)據(jù)字段幀數(shù)據(jù)字段的最小長(zhǎng)度為46B。如果幀的LLC數(shù)據(jù)少于46B,則應(yīng)將數(shù)據(jù)字段填充只46B。填充字符是任意的,不計(jì)入長(zhǎng)度字段值中。(5) 校驗(yàn)字段幀校驗(yàn)字段(FCS)采用32位的CRC校驗(yàn)。校驗(yàn)的范圍包括目的地址字段、源地址字段、長(zhǎng)度字段、LLC數(shù)據(jù)字段。此處,為了簡(jiǎn)便起見

6、,采用8位的CRC校驗(yàn)。CRC校驗(yàn)的生成多項(xiàng)式為:G(X)=X8+X2+X+1某些幀結(jié)構(gòu)中還會(huì)包括幀類型字段,用來識(shí)別此幀所承載的數(shù)據(jù)的類型。當(dāng)一個(gè)幀到達(dá)指定的計(jì)算機(jī)時(shí),操作系統(tǒng)根據(jù)幀類型決定用哪個(gè)協(xié)議軟件模塊對(duì)它進(jìn)行處理。自識(shí)別幀的主要優(yōu)點(diǎn)是,可以在同一物理網(wǎng)絡(luò)中使用多個(gè)協(xié)議而互不干擾。2.CRC校驗(yàn)循環(huán)冗余編碼的編碼方式。循環(huán)冗余編碼是一種重要的線性分組編碼、解碼和編碼的方式,具有簡(jiǎn)單的檢錯(cuò)和糾錯(cuò)能力。過程:在發(fā)送端,根據(jù)要傳送的k位二進(jìn)制碼序列,以一定的規(guī)則產(chǎn)生一個(gè)校驗(yàn)用的r位監(jiān)督碼(CRC碼),附在原始信息的后邊,構(gòu)成一個(gè)新的二進(jìn)制碼序列(共k+r位),然后發(fā)送出去。在接收端,根據(jù)信息

7、碼和CRC碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯(cuò)。這個(gè)規(guī)則在差錯(cuò)理論中稱為“生成多項(xiàng)式”。(1) CRC編碼的代數(shù)學(xué)原理將一個(gè)碼組表示為一個(gè)多項(xiàng)式,碼組中的各碼元作為多項(xiàng)式的系數(shù)。設(shè)編碼前的原始信息多項(xiàng)式為P(x),P(x)最高次冪加1等于k;生成多項(xiàng)式為G(x),它的最高次冪等于r;CRC多項(xiàng)式為R(x);編碼后的帶CRC的信息多項(xiàng)式為T(x)。發(fā)送方編碼的方法是:P(x)乘以xr,再除以G(x),得余式即為R(x)。接收方得解碼方法是:將T(x)除以G(x),如果余數(shù)為0,則說明傳輸中無錯(cuò)誤發(fā)生,否則說明傳輸有錯(cuò)誤。(2) CRC的基本實(shí)現(xiàn)以CRC-8(X8+X2+X1為例,它由

8、多個(gè)移位寄存器和加法器組成。編碼、解碼前將各寄存器初始化為0,輸入位作為最右邊異或操作的輸入之一。三個(gè)寄存器上的移位操作同時(shí)進(jìn)行,均為左移一位,左邊的寄存器的最左一位作為三個(gè)異或操作的輸入之一。每次移位時(shí),最右邊的寄存器內(nèi)容作為中間異或操作的輸入之一,中間的寄存器的內(nèi)容作為最左邊異或操作輸入之一,各個(gè)異或操作的結(jié)果作為與它左邊那個(gè)寄存器的移入位。重復(fù)以上步驟,每輸入一位就做一次移位操作,直到輸入了所有要計(jì)算的數(shù)據(jù)為止。這時(shí),這個(gè)寄存器組中的數(shù)據(jù)就是CRC-8的結(jié)果。CRC運(yùn)算通用電路方框圖:CRC的工作原理是:CRC在發(fā)送端編碼和接收端校驗(yàn)時(shí),都可以利用事先約定的生成多項(xiàng)式G(x)來得到,K位

9、要發(fā)送的信息位可對(duì)應(yīng)于一個(gè)(k-1)次多項(xiàng)式K(x),r位冗余位對(duì)應(yīng)于一個(gè)(r-1)次多項(xiàng)式R(x),由r位冗余位組成的n=k+r位碼對(duì)應(yīng)于一個(gè)(n-1)次多項(xiàng)式T(x)=Xr*K(x)+R(x)。(3) 循環(huán)冗余校驗(yàn)碼的特點(diǎn)CRC校驗(yàn)碼的檢錯(cuò)能力很強(qiáng),不僅能檢查出離散錯(cuò)誤,還能檢查出突發(fā)錯(cuò)誤.CRC校驗(yàn)碼具有以下的檢錯(cuò)能力:CRC校驗(yàn)碼可檢測(cè)出所有單個(gè)錯(cuò)誤,所有奇數(shù)位錯(cuò)誤,所有雙位的錯(cuò)誤,所有小于、等于校驗(yàn)位長(zhǎng)度的突發(fā)錯(cuò)誤。三、 課程設(shè)計(jì)過程1.填充幀頭部字段要完成一次幀封裝的過程,首先要完成的是幀頭部的裝入,這一過程只要將前導(dǎo)碼、定界符、目的地址、源地址、長(zhǎng)度字段的相應(yīng)數(shù)值按順序?qū)懭刖涂梢?/p>

10、了。其中,長(zhǎng)度字段的值即為要發(fā)送的數(shù)據(jù)的實(shí)際長(zhǎng)度。有以下兩種方式來獲得長(zhǎng)度字段的值。方法一:While(!in.eof()in.get(a);bufj=a;j+;方法二:infile.open(argv1,ios:binary);infile.seekg(0,ios:end);short length=(short)infile.tellg();file.put(char(length/256);file.put(char(length%256);2.填充數(shù)據(jù)字段在填充數(shù)據(jù)字段的過程中要注意的主要問題是數(shù)據(jù)字段的長(zhǎng)度。802.3標(biāo)準(zhǔn)中規(guī)定了幀數(shù)據(jù)字段的最小長(zhǎng)度為46B,最大長(zhǎng)度為1500B。如

11、果數(shù)據(jù)不足46B,則需要通過填充0來補(bǔ)足;若數(shù)據(jù)長(zhǎng)度超過1500B,則將超過部分封裝入下一個(gè)幀進(jìn)行發(fā)送。由于幀頭部分應(yīng)該包括6B目的地址、6B源地址、2B長(zhǎng)度字段以及4B幀校驗(yàn)字段,因此幀頭部分長(zhǎng)度為18B。前導(dǎo)碼與幀前定界符不計(jì)入幀頭長(zhǎng)度中。那么,Ethernet幀的最小長(zhǎng)度為64B,最大長(zhǎng)度為1518B。填充數(shù)據(jù)字段的代碼如下:if(len=1500) len=0;if(len46)for(i=len;i1;if(a) regs.val=0x8408;2.字節(jié)型算法數(shù)字通信系統(tǒng)一般是對(duì)一幀數(shù)據(jù)進(jìn)行CRC校驗(yàn),而字節(jié)是幀的基本單位。最常用的是一種按字節(jié)查表的快速算法。該算法基于這樣一個(gè)事實(shí):

12、計(jì)算本字節(jié)后的CRC碼,等于上一字節(jié)CRC右移8位和本字節(jié)之和再與上一字節(jié)余式CRC碼的低8位左移8位相加后所求得的CRC碼。如果我們把8位二進(jìn)制序列數(shù)的CRC全部計(jì)算出來,放在一個(gè)表里,那么編碼時(shí)只要從表中查找對(duì)應(yīng)的值進(jìn)行處理即可。算法如下:1) 寄存器組初始化為全1。2) 寄存器組向右移動(dòng)一個(gè)字節(jié)。3) 剛移出的那個(gè)字節(jié)與數(shù)據(jù)字節(jié)進(jìn)行異或運(yùn)算,得出一個(gè)指向值表的索引。4) 將索引所指的表值與寄存器組做異或運(yùn)算。5) 數(shù)據(jù)指針加1,如果數(shù)據(jù)沒有全部處理完,則重復(fù)步驟2.6) 寄存器組取反,得到CRC,附加在數(shù)據(jù)之后。驗(yàn)證算法:1) 寄存器組初始化為全1.2) 寄存器組向右移動(dòng)一個(gè)字節(jié)。3)

13、剛移出的那個(gè)字節(jié)與數(shù)據(jù)字節(jié)進(jìn)行異或運(yùn)算,得出一個(gè)指向值表的索引。4) 將索引所指的表值與寄存器組做異或運(yùn)算。5) 數(shù)據(jù)指針加1,如果數(shù)據(jù)沒有全部處理完,則重復(fù)步驟2.6) 判斷寄存器組的值是否等于“Magic Value”,若相等則通過,否則失敗。 5.程序流程圖:6.CRC基本實(shí)現(xiàn)除法電路實(shí)現(xiàn)CRC7.程序代碼#include#include#include#includevoid main(int argc,char*argv) /如果輸入命令行不正確,則輸出提示后退出。 if(argc!=3) coutendl請(qǐng)按以下格式輸入:framer inputfile outputfileend

14、l; exit(0); /打開指定的輸出文件,以二進(jìn)制方式打開并可讀可寫,如文件存在,則清除其內(nèi)容。 fstream file(argv2,ios:out|ios:in|ios:binary|ios:trunc,0); for(int i=0;i8); file.put(char(length&0xff);/將文件長(zhǎng)度值按照逆序?qū)懭氲捷敵鑫募拈L(zhǎng)度字段中。 file.write(data,length);/將data內(nèi)容寫入到輸出文件中。 /如果輸入文件長(zhǎng)度不足B,則用補(bǔ)足B。 if(length46) for(int j=length;j46;j+) file.put(char(0x00);

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

16、/將輸入數(shù)據(jù)相應(yīng)的值遞補(bǔ)到余數(shù)末位。 crc=crc(0x07);/進(jìn)行除法運(yùn)算,即與除數(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);/將寫指針移到輸出文件的最后。 file.put(crc);/寫入crc碼。 file.close(); infile.close();/關(guān)閉輸入文件和輸出文件。 coutendlfileargv2 completeendl;8.運(yùn)行結(jié)果與分析5

17、、 課程設(shè)計(jì)小結(jié)本次課程設(shè)計(jì)主要是實(shí)現(xiàn)幀的封裝。在本次課程設(shè)計(jì)中,我們組首先是將封裝的大致流程實(shí)現(xiàn)了。實(shí)現(xiàn)幀的封裝,主要是將幀的七個(gè)部分-前導(dǎo)碼、幀前定界符、目的地址、源地址、長(zhǎng)度字段、數(shù)據(jù)字段和校驗(yàn)字段,一個(gè)一個(gè)按順序封裝的,最后使得一個(gè)幀的封裝得以完成。在此同時(shí),我們組采用分工的方式將封裝幀的代碼進(jìn)行了編寫。在編寫的過程中,我們遇到的問題有:1.我們是以文件流的形式實(shí)現(xiàn)的案例的輸入與輸出。在c語言中,我們經(jīng)常采用的是freopen(“in.txt”,“r”,stdin);以及freopen(“out.txt”,“w”,stdout);這兩個(gè)語句使得scanf從文件in.txt讀入,printf寫入文

溫馨提示

  • 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. 人人文庫網(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)論