




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 預(yù)防瘧疾主題班會(huì)課件
- 化學(xué)工業(yè)企業(yè)安全質(zhì)量環(huán)保標(biāo)準(zhǔn)化培訓(xùn)體系
- 項(xiàng)目集成管理工程師課件
- 項(xiàng)目介紹框架課件
- 音樂里的中國(guó)年課件
- 門診護(hù)理培訓(xùn)課件
- 汽車配套產(chǎn)業(yè)基地項(xiàng)目環(huán)境影響報(bào)告書(范文)
- 城市污水管網(wǎng)建設(shè)工程招投標(biāo)方案(參考模板)
- 2025年煤礦鉆孔監(jiān)測(cè)系統(tǒng)合作協(xié)議書
- 高效節(jié)能電機(jī)項(xiàng)目申請(qǐng)報(bào)告
- 文創(chuàng)產(chǎn)品定制合同范本
- 科普版四年級(jí)上冊(cè)英語(yǔ)全冊(cè)同步練習(xí)
- 2024年巴西血液透析膜市場(chǎng)機(jī)會(huì)及渠道調(diào)研報(bào)告
- 2024全新標(biāo)準(zhǔn)黃金回收合同任意下載
- 《中國(guó)噬血細(xì)胞綜合征診斷與治療指南(2022年版)》解讀
- 奇瑞汽車在線測(cè)評(píng)題庫(kù)
- 初中英語(yǔ)語(yǔ)法、詞匯及固定搭配專題訓(xùn)練100題(含參考答案)
- 2024年浙江寧波市水務(wù)環(huán)境集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 能效對(duì)標(biāo)管理制度范文
- 監(jiān)測(cè)斷面超標(biāo)原因分析報(bào)告
- PE管生產(chǎn)記錄單
評(píng)論
0/150
提交評(píng)論