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

下載本文檔

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

文檔簡介

1、山西大學(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) 201515614373 指導(dǎo)教師吳勇 2016年12 月28 日 目錄 一、設(shè)計(jì)題目及需求分析 3 二、總體設(shè)計(jì) 4 1.幀結(jié)構(gòu)分析 4 2.CRC 校驗(yàn)分析 6 三、詳細(xì)設(shè)計(jì) 8 1.幀封裝過程 8 ( 1)填充幀頭部字段 8 ( 2)填充數(shù)據(jù)字段 8 (3)CRC 校驗(yàn) 9 2.源程序代碼 11 四、測試 14 五、總結(jié) 15 六、參考資料 15 一、設(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)及所使用的語言和編譯環(huán)境不 限。 二、總體設(shè)計(jì) 1.幀結(jié)構(gòu)分析 術(shù)語“幀”來源于串行線路上的通信。其中,發(fā)送者在發(fā)送數(shù)據(jù) 的前后分 別添加特殊的字符, 使它們成為一個(gè)幀。 Ethernet 從某種程 度上可以被看做是機(jī)器之間的數(shù)據(jù)鏈路層連接。 首先我們來認(rèn)識(shí)一 下幀結(jié)構(gòu),EthernerV2.0規(guī)范和IEEE802

3、.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)碼幀前定界符目的地址 源地址長度字段 數(shù)據(jù)字段校驗(yàn)字段 (7B)(1B)(2/6B)(2/6B )(2B)(長度可變)(4B) 如上圖所示,802.3標(biāo)準(zhǔn)的Ethernet幀結(jié)構(gòu)由7部分組成。 (1)前導(dǎo)碼與幀前定界符字段 前導(dǎo)碼由56位(7B)的10101010,10101010位序列組成。幀前 定界符可以視為前導(dǎo)碼的延續(xù)。1B的幀前定界符結(jié)構(gòu)為10101011. 如果將前導(dǎo)碼與幀前定界符一起看,那么在 62 位 101010, 1010 位序列之后出現(xiàn)11。在11之后是Ether

4、net幀的目的地址字段。前導(dǎo) 碼與幀前定界符主要是保證接收同步,這 8B 接收后不需要保留,也 不記入幀頭長度中。 ( 2) 目的地址和源地址 目的地址(DA )與源地址(SA)分別表示幀的接收結(jié)點(diǎn)地址與 發(fā)送結(jié)點(diǎn)的硬件地址。 在 Ethernet 幀中,目的地址和源地址字段長度可以是 2B 或 6B。 目前的 Ethernet 都使用 6B 長度的地址。 Ether net幀的目的地址可以是單播地址、多播地址與廣播地址, 目的地址的第一位為 0 表示單播地址, 為 1 表示多播地址, 目的地址 為全 1 則表示廣播地址。 (3) 長度字段 Ether net幀用2B定義數(shù)據(jù)字段包含的字節(jié)數(shù)。

5、協(xié)議規(guī)定,幀數(shù) 據(jù)的最小長度為46B,最大長度為1500B。設(shè)置最小幀長度的目的是 使每個(gè)接收結(jié)點(diǎn)能夠有足夠時(shí)間檢測到?jīng)_突。 ( 4) 數(shù)據(jù)字段 幀數(shù)據(jù)字段的最小長度為46B。如果幀的LLC數(shù)據(jù)少于46B, 則應(yīng)將數(shù)據(jù)字段填充只46B。填充字符是任意的,不計(jì)入長度字段值 中。 (5) 校驗(yàn)字段 幀校驗(yàn)字段(FCS)采用32位的CRC校驗(yàn)。校驗(yàn)的范圍包括目 的地址字段、源地址字段、長度字段、 LLC 數(shù)據(jù)字段。 此處,為了簡便起見,采用8位的CRC校驗(yàn)。CRC校驗(yàn)的生成 多項(xiàng)式為:G(X)=XA8+XA2+X+1 某些幀結(jié)構(gòu)中還會(huì)包括幀類型字段,用來識(shí)別此幀所承載的數(shù) 據(jù)的類型。 當(dāng)一個(gè)幀到達(dá)指

6、定的計(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)督碼,附在原始信息的后邊,構(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

7、;生成多項(xiàng)式為G(x),它的最高次幕等于r; CRC多項(xiàng)式為R(x); 編碼后的帶CRC的信息多項(xiàng)式為T(x)。 發(fā)送方編碼的方法是:P(x)乘以xAr,再除以G(x),得余式即為 R(x)。接收方得解碼方法是:將T(x)除以G(x),如果余數(shù)為0,則說 明傳輸中無錯(cuò)誤發(fā)生,否則說明傳輸有錯(cuò)誤。 ( 2) CRC 的基本實(shí)現(xiàn) 以CRC-8(XA8+XA2+XA1為例,它由多個(gè)移位寄存器和加法器 組成。編碼、解碼前將各寄存器初始化為 0,輸入位作為最右邊異或 操作的輸入之一。 三個(gè)寄存器上的移位操作同時(shí)進(jìn)行, 均為左移一位, 左邊的寄存器的最左一位作為三個(gè)異或操作的輸入之一。每次移位 時(shí),最右邊

8、的寄存器內(nèi)容作為中間異或操作的輸入之一, 中間的寄存 器的內(nèi)容作為最左邊異或操作輸入之一, 各個(gè)異或操作的結(jié)果作為與 它左邊那個(gè)寄存器的移入位。 重復(fù)以上步驟, 每輸入一位就做一次移 位操作,直到輸入了所有要計(jì)算的數(shù)據(jù)為止。這時(shí),這個(gè)寄存器組中 的數(shù)據(jù)就是 CRC-8 的結(jié)果。 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)=XAr*K(x)+R(x)。

9、 ( 3) 循環(huán)冗余校驗(yàn)碼的特點(diǎn) CRC 校驗(yàn)碼的檢錯(cuò)能力很強(qiáng) ,不僅能檢查出離散錯(cuò)誤 ,還能檢查 出突發(fā)錯(cuò)誤.CRC校驗(yàn)碼具有以下的檢錯(cuò)能力:CRC校驗(yàn)碼可檢測出 所有單個(gè)錯(cuò)誤,所有奇數(shù)位錯(cuò)誤,所有雙位的錯(cuò)誤,所有小于、等于 校驗(yàn)位長度的突發(fā)錯(cuò)誤。 三、詳細(xì)設(shè)計(jì) 1.幀封裝過程 (1)填充幀頭部字段 要完成一次幀封裝的過程,首先要完成的是幀頭部的裝入,這 一過程只要將前導(dǎo)碼、定界符、目的地址、源地址、長度字段的相應(yīng) 數(shù)值按順序?qū)懭刖涂梢粤恕?其中,長度字段的值即為要發(fā)送的數(shù)據(jù)的 實(shí)際長度。有以下兩種方式來獲得長度字段的值。 方法一: While(!in.eof() in.get(a); bu

10、fj=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ù)字段的長 度。802.3標(biāo)準(zhǔn)中規(guī)定了幀數(shù)據(jù)字段的最小長度為 46B,最大長度為 1500B。如果數(shù)據(jù)不足46B,則需要通過填充0來補(bǔ)足;若數(shù)據(jù)長度 超過1500B,則將超過部分圭寸裝入下一個(gè)幀進(jìn)行發(fā)送。 由于幀頭

11、部分應(yīng)該包括 6B 目的地址、 6B 源地址、 2B 長度字段 以及4B幀校驗(yàn)字段,因此幀頭部分長度為18B。前導(dǎo)碼與幀前定界 符不計(jì)入幀頭長度中。那么,Ethernet幀的最小長度為64B,最大長 度為 1518B。 填充數(shù)據(jù)字段的代碼如下: if(len=1500) , len=0; if(len46) for(i=len;i46;i+) fr.datai=0 x00; 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ù) in

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

13、 時(shí)還需要對(duì) crc0 位進(jìn)行處理 偽代碼: while( 數(shù)據(jù)未處理完 ) begin if(crc 的首位是 1) crc 左移 1 位 crc=crc XOR 00000111 else crc 左移 1 位 if (從 input 中讀入的新的數(shù)據(jù)為 1 ) End 2.程序代碼 #include #include void main(int argc,char*argv) if(argc!=3) cout 請(qǐng) 按 以 下 格 式 輸 入 命 令 行 : framer inputfile outputfileendl; return; fstream file; file.open(a

14、rgv2,ios:in|ios:out|ios:binary|ios:trunc); for(int i=0;i7;i+) file.put(char(0 xaa); file.put(char(0 xab); long pCrcs=file.tellp(); char dst_addr6=char(0 x00),char(0 x00),char(0 x80),char(0 x1a),ch ar(0 xe6),char(0 x65); file.write(dst_addr,sizeof(dst_addr); ifstream infile; infile.open(argv1,ios:bin

15、ary); infile.seekg(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(length46) for(int i=0; i0;i=1) if(crc if(temp crcA=0 x07; else crc=1;if(temp file.seekg(pCrc,ios:beg); file.put(crc); while(!file.eof() unsigned char temp; file.get(temp); couthex(short)tempendl; cou

溫馨提示

  • 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)論