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

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上山西大學(xué)軟件學(xué)院 數(shù)字通訊與計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)報(bào)告書題 目 Ethernet的幀封裝(按802.3標(biāo)準(zhǔn)) 專 業(yè) 軟件工程 班 級(jí) 1528 姓 名 王鑄 學(xué) 號(hào) 3 指導(dǎo)教師 吳勇 2016 年 12 月 28 日目錄一、設(shè)計(jì)題目及需求分析.3二、總體設(shè)計(jì).4 1.幀結(jié)構(gòu)分析.4 2.CRC校驗(yàn)分析.63、 詳細(xì)設(shè)計(jì).8. 1.幀封裝過程.8 (1)填充幀頭部字段.8 (2)填充數(shù)據(jù)字段.8 (3)CRC校驗(yàn).9 2.源程序代碼.11四、測(cè)試.14五、總結(jié).15六、參考資料.151、 設(shè)計(jì)題目及需求分析設(shè)計(jì)題目:Ethernet的幀封裝(按802.3標(biāo)準(zhǔn))需求分析:

2、編寫程序,根據(jù)給出的原始數(shù)據(jù),組裝一個(gè)802.3標(biāo)準(zhǔn)格式的幀,要求程序?yàn)槊钚谐绦?,如:framer inputfile outputfile其中,framer 為可執(zhí)行文件名framer.exe,inputfile為原始數(shù)據(jù)文件,outputfile為輸出結(jié)果文件。操作系統(tǒng)及所使用的語(yǔ)言和編譯環(huán)境不限。2、 總體設(shè)計(jì) 1.幀結(jié)構(gòu)分析 術(shù)語(yǔ)“幀”來源于串行線路上的通信。其中,發(fā)送者在發(fā)送數(shù)據(jù)的前后分 別添加特殊的字符,使它們成為一個(gè)幀。Ethernet從某種程度上可以被看做是機(jī)器之間的數(shù)據(jù)鏈路層連接。 首先我們來認(rèn)識(shí)一下幀結(jié)構(gòu),EthernerV2.0規(guī)范和IEEE802.3標(biāo)準(zhǔn)中的Ether

3、net幀結(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)如上圖所示,802.3標(biāo)準(zhǔn)的Ethernet幀結(jié)構(gòu)由7部分組成。 (1) 前導(dǎo)碼與幀前定界符字段  前導(dǎo)碼由56位(7B)的位序列組成。幀前定界符可以視為前導(dǎo)碼的延續(xù)。1B的幀前定界符結(jié)構(gòu)為.

4、60; 如果將前導(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幀的目的地址可以是單播地址、多播地址與廣播地址,目的地址的第一位為0表示單播地址,為1表示多播地址,

5、目的地址為全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ù)字段。

6、0; 此處,為了簡(jiǎn)便起見,采用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)冗余編碼的編碼方式。     過程:在發(fā)送端,根據(jù)要傳送的k位二進(jìn)制碼序列,以一定的規(guī)則產(chǎn)生一個(gè)校驗(yàn)用的r位監(jiān)督碼,附在原始信息的后

7、邊,構(gòu)成一個(gè)新的二進(jìn)制碼序列,然后發(fā)送出去。在接收端,根據(jù)信息碼和CRC碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯(cuò)。 (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ā)生,

8、否則說明傳輸有錯(cuò)誤。 (2) CRC的基本實(shí)現(xiàn)  以CRC-8(X8+X2+X1為例,它由多個(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é)果。 

9、; CRC的工作原理是:CRC在發(fā)送端編碼和接收端校驗(yàn)時(shí),都可以利用事先約定的生成多項(xiàng)式G(x)來得到,K位要發(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ò)誤。 3、 詳細(xì)設(shè)計(jì)1.幀封裝

10、過程(1)填充幀頭部字段 要完成一次幀封裝的過程,首先要完成的是幀頭部的裝入,這一過程只要將前導(dǎo)碼、定界符、目的地址、源地址、長(zhǎng)度字段的相應(yīng)數(shù)值按順序?qū)懭刖涂梢粤?。其中,長(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 lengt

11、h=(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。如果數(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)度中。那么,

12、Ethernet幀的最小長(zhǎng)度為64B,最大長(zhǎng)度為1518B。 填充數(shù)據(jù)字段的代碼如下: if(len=1500)   len=0; if(len<46) for(i=len;i<46;i+)  fr.datai=0x00;  data_len=len; (3)CRC校驗(yàn) 幀封裝的最后一步就是對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),并將校驗(yàn)結(jié)果記入幀校驗(yàn)字段。CRC編碼實(shí)際上就是一個(gè)循環(huán)移位的模二運(yùn)算。流程描述為: 把CRC中的值置為0 在原始數(shù)據(jù)input后

13、添加8個(gè)0 while(數(shù)據(jù)未處理完) begin   if(crc首位是1)      crc=crc XOR     把crc中的值左移一位,從input中讀取一位新的數(shù)據(jù)并置于crc的0位 endcrc中的后8位就是經(jīng)過CRC-8校驗(yàn)的余數(shù)。這樣,我們只需要看后8位即可,因此上面流程可以簡(jiǎn)化。構(gòu)造一個(gè)8位的寄存器crc,初始值為0,數(shù)據(jù)依次移入crc的0位,同時(shí)crc的7位移出。當(dāng)移出的數(shù)據(jù)為1時(shí),crc才和進(jìn)

14、行XOR運(yùn)算;移出數(shù)據(jù)為0時(shí),不做運(yùn)算。每次crc中數(shù)據(jù)位為1時(shí)還需要對(duì)crc0位進(jìn)行處理  偽代碼:  while(數(shù)據(jù)未處理完)  begin if(crc的首位是1)       crc左移1位       crc=crc XOR     else       crc左移1位   &

15、#160;if(從input中讀入的新的數(shù)據(jù)為1)         End2. 程序代碼#include<iostream.h> #include<fstream.h> void main(int argc,char*argv) if(argc!=3) cout<<"請(qǐng)按以下格式輸入命令行: framer inputfile outputfile"<<endl; return; fstream file; file.open(argv2,ios:i

16、n|ios:out|ios:binary|ios:trunc); for(int i=0;i<7;i+) file.put(char(0xaa); file.put(char(0xab); long pCrcs=file.tellp(); char dst_addr6=char(0x00),char(0x00),char(0x80),char(0x1a),char(0xe6),char(0x65); file.write(dst_addr,sizeof(dst_addr); ifstream infile; infile.open(argv1,ios:binary); infile.se

17、ekg(0,ios:end); short length=(short)infile.tellg(); file.put(char(length/256); file.put(char(length%256); char*data=new charlength; infile.seekg(0,ios:beg); infile.read(data,length); infile.close(); delete data; if(length<46) for(int i=0; i<46-length;i+) file.put(char(0x00); long pCrc=file.tel

18、lp(); file.put(char(0x00); short total=short(file.tellp()-(short)pCrcs; file.seekg(pCrcs,ios:beg); unsigned char crc=0; while(total-) unsigned char temp; file.get(temp); for(unsigned char i=(unsigned char)0x80;i>0;i>>=1) if(crc&0x80) crc<<=1; if(temp&i) crc=0x01; crc=0x07; else crc<<=1;if(temp&i) crc=0x01; file.seekg(pCrc,ios:beg); file.put(crc); while(!file.eof() unsigned char temp; file.get(temp); cout<<hex<<(short)temp<<endl; cout<<"幀文件 &

溫馨提示

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