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

下載本文檔

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

文檔簡介

1、計(jì)算機(jī)通信網(wǎng)絡(luò)報(bào)告以太網(wǎng)幀封裝模擬學(xué) 生1:葉 健 12122268 貢獻(xiàn)比:20%學(xué) 生2:趙思晨12121461 貢獻(xiàn)比:20%學(xué) 生3:劉 赟 12122549 貢獻(xiàn)比:20%學(xué) 生4:王晨浩 12122090 貢獻(xiàn)比:20%學(xué) 生5:游賽夫 12160006 貢獻(xiàn)比:20%組 長: 趙思晨 組長電話: 指導(dǎo)老師: 馮玉田 完成時(shí)間: 2015年10月 目 錄1設(shè)計(jì)任務(wù)和要求211 課程設(shè)計(jì)任務(wù)212 課程設(shè)計(jì)要求22設(shè)計(jì)原理221 802.3標(biāo)準(zhǔn)幀結(jié)構(gòu)222 CRC的基本實(shí)現(xiàn)33設(shè)計(jì)實(shí)現(xiàn)331 設(shè)計(jì)思路3 填充幀頭部字段33.1.2填充數(shù)據(jù)字段3 計(jì)算填充CRC432 流程圖4 程序流

2、程圖4 CRC計(jì)算流程圖54程序源碼65運(yùn)行結(jié)果86總結(jié)體會(huì)111.設(shè)計(jì)任務(wù)和要求1.1課程設(shè)計(jì)任務(wù)幀是數(shù)據(jù)鏈路層的協(xié)議數(shù)據(jù)單元,它包括三部分:幀頭,數(shù)據(jù)部分,幀尾。其中,幀頭和幀尾包含一些必要的控制信息,比如同步信息、地址信息、差錯(cuò)控制信息等;數(shù)據(jù)部分則包含網(wǎng)絡(luò)層傳下來的數(shù)據(jù),比如IP數(shù)據(jù)包。本項(xiàng)目設(shè)計(jì)軟件,實(shí)現(xiàn)以太網(wǎng)幀的封裝、傳輸、解析。1.2設(shè)計(jì)要求 1編寫程序,從文件中讀取數(shù)據(jù);2將數(shù)據(jù)組裝成IEEE802.3格式的幀;3通過兩臺(tái)計(jì)算機(jī)的通信,把幀從一臺(tái)計(jì)算機(jī)傳輸?shù)搅硪慌_(tái)計(jì)算機(jī)。 2.設(shè)計(jì)原理 2.1 802.3標(biāo)準(zhǔn)幀結(jié)構(gòu)以太網(wǎng)Ethernet幀格式:前序(P)目的地址(SD

3、)源地址(SA)長度數(shù)據(jù)FCS8 B6B6B2B461500B4B 1. 前序字段前序字段由7個(gè)字節(jié)的交替出現(xiàn)的1和0組成,設(shè)置該字段的目的是指示幀的開始并便于網(wǎng)絡(luò)中的所有接收器均能與到達(dá)幀同步。2.幀起始定界符字段它可以被看作前序字段的延續(xù)。實(shí)際上,該字段的組成方式繼續(xù)使用前序字段中的格式,這個(gè)一個(gè)字節(jié)的字段的前6個(gè)比特位置由交替出現(xiàn)的1和0構(gòu)成。該字段的最后兩個(gè)比特位置是11,這兩位中斷了同步模式并提醒接收后面跟隨的是幀數(shù)據(jù)。3.目的地址字段目的地址字段確定幀的接收者。6個(gè)字節(jié)的源地址和目的地址字段是局域網(wǎng)中的所有工作站必須使用同樣的地址結(jié)構(gòu)。4.源地址字段源地址字段標(biāo)識(shí)發(fā)送幀的

4、工作站。和目前地址字段類似,源地址字段的長度六個(gè)字節(jié)。5.長度字段用于IEEE802.3的兩字節(jié)長度字段定義了數(shù)據(jù)字段包含的字節(jié)數(shù)。從前序 到FCS字段的幀長度最小必須是64字節(jié)?;谧钚L為64字節(jié)和使用六字節(jié)地址字段的要求,意味著每個(gè)數(shù)據(jù)字段的最小長度為46字節(jié)。如果傳輸數(shù)據(jù)少于46個(gè)字節(jié),應(yīng)將數(shù)據(jù)字段填充至46字節(jié)。不過,填充字符的個(gè)數(shù)不包括在長度字段值中,數(shù)據(jù)字段的最大長度為1500字節(jié)。6.數(shù)據(jù)字段數(shù)據(jù)字段的最小長度必須為46字節(jié)以保證幀長至少為64字節(jié),這意味著傳輸一字節(jié)信息也必須使用46字節(jié)的數(shù)據(jù)字段:如果填入該該字段的信息少于46字節(jié),該字段的其余部分也必須進(jìn)行填充零。數(shù)據(jù)字

5、段的最大長度為1500字節(jié)。7. 校驗(yàn)序列字段將計(jì)算出的CRC填入32位的FCS校驗(yàn)字段。幀校驗(yàn)序列字段提供了一種錯(cuò)誤檢測機(jī)制,包括了地址字段、長度字段和數(shù)據(jù)字段的循環(huán)冗余校驗(yàn)(CRC)碼。2.2 CRC的基本實(shí)現(xiàn)利用CRC進(jìn)行檢錯(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ù)信息碼和CRC碼之間所遵循的規(guī)則進(jìn)行檢驗(yàn),以確定傳送中是否出錯(cuò)。這個(gè)規(guī)則在差錯(cuò)控制理論中稱為“生成多項(xiàng)式”。3.設(shè)計(jì)實(shí)現(xiàn)3.1設(shè)計(jì)思路 填充幀頭部字段在這一部分需要向輸

6、出文件寫入前導(dǎo)碼、幀前定界符、目的地址、源地址和長度字段。寫入前四個(gè)部分相對簡單,而寫入長度字段時(shí)需要計(jì)算輸入文件的長度。所以計(jì)算輸入文件長度的方法如下:ioBuffer.put(head);ioBuffer.put(Common.getLocalMac("127.0.0.1");ioBuffer.put(Common.UMAC);ioBuffer.put(Common.TYPE); 填充數(shù)據(jù)字段在程序中是用以下方法實(shí)現(xiàn)的:ioBuffer.putString(s,charsetEncoder); 計(jì)算填充CRC 幀封裝的最后一步就是對數(shù)據(jù)進(jìn)行校驗(yàn),并將校驗(yàn)結(jié)果記入幀校驗(yàn)字

7、段。本程序中實(shí)現(xiàn)的是CRC32校驗(yàn)算法,方法如下所示:ioBuffer.put(Common.getCRC32(s.getBytes();ioBuffer.flip(); 3.2程序流程圖程序流程圖 CRC計(jì)算流程圖4.程序源代碼(主要代碼)主要函數(shù)public void update(byte b, int off, int len) if (b = null) throw new NullPointerException(); if (off < 0 | len < 0 | off > b.length - len) throw new ArrayIndexOutOfBo

8、undsException();crc = updateBytes(crc, b, off, len); /計(jì)算CRCpublic static final byte getCRC32(byte data) CRC32 crc32 = new CRC32();crc32.update(data);return long2Byte(crc32.getValue();/用于計(jì)算CRC的類public class CRC32 implements Checksum private int crc; /* * Creates a new CRC32 object. */ public CRC32()

9、/* * Updates CRC-32 with specified byte. */ public void update(int b) crc = update(crc, b); /* * Updates CRC-32 with specified array of bytes. */ public void update(byte b, int off, int len) if (b = null) throw new NullPointerException(); if (off < 0 | len < 0 | off > b.length - len) throw

10、new ArrayIndexOutOfBoundsException();crc = updateBytes(crc, b, off, len); /* * Updates checksum with specified array of bytes. * * param b the array of bytes to update the checksum with */ public void update(byte b) crc = updateBytes(crc, b, 0, b.length); /* * Resets CRC-32 to initial value. */ publ

11、ic void reset() crc = 0; /* * Returns CRC-32 value. */ public long getValue() return (long)crc & 0xffffffffL; private native static int update(int crc, int b); private native static int updateBytes(int crc, byte b, int off, int len); 5.運(yùn)行結(jié)果1、功能:1 設(shè)計(jì)界面,打開文件,將數(shù)據(jù)封裝成一個(gè)或若干個(gè)幀,顯示幀的各個(gè)字段(數(shù)據(jù)段可不顯示)。2&

12、#160;通過網(wǎng)絡(luò)通信或串口通信,將幀發(fā)送到另一臺(tái)計(jì)算機(jī)。3 接收方對幀進(jìn)行解析,顯示幀的各個(gè)字段。4 將數(shù)據(jù)存儲(chǔ)到文件中,并與發(fā)送方的文件進(jìn)行比較,檢驗(yàn)通信的正確性。  首先,網(wǎng)絡(luò)傳輸使用mina框架。Apache Mina Server 是一個(gè)網(wǎng)絡(luò)通信應(yīng)用框架,也就是說,它主要是對基于TCP/IP、UDP/IP協(xié)議棧的通信框架(然,也可以提供JAVA 對象的序列化服務(wù)、虛擬機(jī)管道通信服務(wù)等),Mina 可以幫助我們快速開發(fā)高性能、高擴(kuò)展性的網(wǎng)絡(luò)通信應(yīng)用,Mina 提供了事件驅(qū)動(dòng)、異步(Mina

13、0;的異步IO 默認(rèn)使用的是JAVA NIO 作為底層支持)操作的編程模型。Mina 主要有1.x 和2.x 兩個(gè)分支,這里我們講解最新版本2.0,如果你使用的是Mina 1.x,那么可能會(huì)有一些功能并不適用。學(xué)習(xí)本文檔,需要你已掌握J(rèn)AVA IO、JAVA NIO、JAVASocket、JAVA 線程及并發(fā)庫(java.util.concurrent.*)的知識(shí)。Mina 同時(shí)提供了網(wǎng)絡(luò)通信的Server 端、Client 端的封裝,無論是哪端,Mina 

14、;在整個(gè)網(wǎng)通通信結(jié)構(gòu)中都處于如下的位置:1選擇要發(fā)送的文件 (2)源文件如下:(3)封裝后通過網(wǎng)絡(luò)傳輸?shù)搅硪贿呍俳獯a6.總結(jié)與體會(huì)本次課程設(shè)計(jì)項(xiàng)目學(xué)習(xí)了幀封裝。在查閱了很多幀的封裝的知識(shí)后,對幀及其封裝的方法有了一定程度的了解和掌握。在對幀的學(xué)習(xí)后,有了很大的收獲,并且使幀的封裝得以實(shí)現(xiàn)。我們成功的利用Java語言編出了一個(gè)帶有可視化界面的窗體程序,實(shí)現(xiàn)了對以太網(wǎng)幀的封裝后通過網(wǎng)絡(luò)傳輸。以太網(wǎng)數(shù)據(jù)幀由七部分組成:前導(dǎo)碼,幀前界定符,目的MAC地址,源MAC地址,數(shù)據(jù)長度字段,數(shù)據(jù)和校驗(yàn)字段。在設(shè)計(jì)中實(shí)現(xiàn)了幀的封裝,主要是將幀的七個(gè)部分-前導(dǎo)碼、幀前定界符、目的地址、源地址、長度字段、數(shù)據(jù)字段和校驗(yàn)字段,按順序封裝的,最后形成一個(gè)完整的幀結(jié)構(gòu)。同時(shí),在編寫程序的過程中,用到了很多的函數(shù),這些函數(shù)的運(yùn)用使得程序簡便而且正確的運(yùn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論