




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì)實(shí)驗(yàn)一 幀封裝實(shí)驗(yàn)?zāi)康模?編寫程序,根據(jù)給出的原始數(shù)據(jù),組裝一個(gè)IEEE 802.3格式的幀(題目)默認(rèn)的輸入文件為二進(jìn)制原始數(shù)據(jù)(文件名分別為input1和input2)。 要求程序?yàn)槊钚谐绦颉1热纾蓤?zhí)行文件名為framer.exe,則命令行形式如下:EncapFramer inputfile outputfile,其中,inputfile為原始數(shù)據(jù)文件,outputfile為輸出結(jié)果。 輸出:對應(yīng)input1和input2得結(jié)果分別為output1和output2。試驗(yàn)要求: 編寫程序,根據(jù)給出的原始數(shù)據(jù),組裝一個(gè)IEEE 802.3格式的幀(題目)默認(rèn)的輸入文件為二
2、進(jìn)制原始數(shù)據(jù)(文件名分別為input1和input2)。 要求程序?yàn)槊钚谐绦颉1热纾蓤?zhí)行文件名為framer.exe,則命令行形式如下:EncapFramer inputfile outputfile,其中,inputfile為原始數(shù)據(jù)文件,outputfile為輸出結(jié)果。輸出:對應(yīng)input1和input2得結(jié)果分別為output1和output2實(shí)驗(yàn)設(shè)計(jì)相關(guān)知識:幀:來源于串行線路上的通信。其中,發(fā)送者在發(fā)送數(shù)據(jù)的前后各添加特殊的字符,使它們成為一個(gè)幀。Ethernet從某種程度上可以被看作是機(jī)器之間的數(shù)據(jù)鏈路層連接。按802.3標(biāo)準(zhǔn)的幀結(jié)構(gòu)如下表所示(802.3標(biāo)準(zhǔn)的Ethernet
3、幀結(jié)構(gòu)由7部分組成)802.3標(biāo)準(zhǔn)的幀結(jié)構(gòu)前導(dǎo)碼幀前定界符目的地址源地址長度字段數(shù)據(jù)字段校驗(yàn)字段7B1B(2/6B)(2/6B)(2B)(長度可變)(4B)其中,幀數(shù)據(jù)字段的最小長度為46B。如果幀的LLC數(shù)據(jù)少于46B,則應(yīng)將數(shù)據(jù)字段填充至46B。填充字符是任意的,不計(jì)入長度字段值中。在校驗(yàn)字段中,使用的是CRC校驗(yàn)。校驗(yàn)的范圍包括目的地址字段、源地址字段、長度字段、LLC數(shù)據(jù)字段。循環(huán)冗余編碼(CRC)是一種重要的線性分組碼、編碼和解碼方法,具有簡單、檢錯(cuò)和糾錯(cuò)能力強(qiáng)等特點(diǎn),在通信領(lǐng)域廣泛地用于實(shí)現(xiàn)差錯(cuò)控制。CRC校驗(yàn)碼的檢錯(cuò)能力很強(qiáng),不僅能檢查出離散錯(cuò)誤,還能檢查出突發(fā)錯(cuò)誤。利用CRC進(jìn)
4、行檢錯(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)式”。CRC的基本實(shí)現(xiàn)前導(dǎo)碼幀前定界符目的地址源地址長度字段數(shù)據(jù)字段校驗(yàn)字段7B1B(2/6B)(2/6B)(2B)(長度可變)(4B)循環(huán)冗余校驗(yàn)碼的特點(diǎn):(1)CRC校驗(yàn)碼可檢測出所有單個(gè)錯(cuò)誤。(2)CRC校驗(yàn)碼可檢測出所有奇數(shù)位錯(cuò)誤。(3)CRC校驗(yàn)碼可檢測出所有雙位的錯(cuò)誤(4)CRC
5、校驗(yàn)碼可檢測出所有小于、等于校驗(yàn)位長度的突發(fā)錯(cuò)誤。(5)CRC校驗(yàn)碼可以的概率檢測出長度為(K+1)位的突發(fā)錯(cuò)誤實(shí)驗(yàn)分析: 填充幀頭部字段 要完成一次幀封裝的過程,首先要完成的就是幀頭部的裝入,這一過程只要將簽到碼、定界符、目的地址、源地址、長度字段的相應(yīng)數(shù)值按順序?qū)懭刖涂梢粤恕F渲校L度字段的值即為要發(fā)送的數(shù)據(jù)的實(shí)際長度。 填充數(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,則的大獎(jiǎng)超過部分封裝入下一個(gè)幀進(jìn)行發(fā)送。 CRC校驗(yàn) 幀封裝
6、的最后一步就是對數(shù)據(jù)進(jìn)行校驗(yàn),并將校驗(yàn)結(jié)果記入幀校驗(yàn)字段。程序流程圖:CRC計(jì)算流程圖:程序源代碼:#include<iostream.h>#include<fstream.h>#include<stdlib.h>void main(int argc,char*argv) /如果輸入命令行不正確,則輸出提示后退出。 if(argc!=3) cout<<endl<<"請按以下格式輸入:EncapFrame inputfile outputfile"<<endl;/輸出符號,程序的結(jié)束符 exit(0);
7、/打開指定的輸出文件,以二進(jìn)制方式打開并可讀可寫,如文件存在,則清除其內(nèi)容。 fstream file(argv2,ios:out|ios:in|ios:binary|ios:trunc,0); /打開或創(chuàng)建一個(gè)一個(gè)供寫入的文件,打開供讀取的文件 for(int i=0;i<7;i+) file.put(char)0xaa); file.put(char)0xab);/寫入B的前導(dǎo)碼和B的幀前定界符。 char des_add=char(0x00),char(0x00),char(0xE4),char(0x86),char(0x3A),char(0xDC); file.write(des
8、_add,6);/寫入B的目的地址。 char sor_add=char(0x00),char(0x00),char(0x80),char(0x1A),char(0xE6),char(0x65); file.write(sor_add,6);/寫入B的源地址。 /創(chuàng)建輸入文件流并打開指定的輸入文件,以二進(jìn)制方式打開并可讀。 ifstream infile(argv1,ios:in|ios:binary,0); /建立輸入流語句 int length=0; infile.seekg(0,ios:end);/將讀指針移到文件末尾。 length=infile.tellg();/計(jì)算指針偏移量,即為
9、輸入文件的長度。 unsigned char* data=new unsigned charlength;/創(chuàng)建字符指針并根據(jù)文件長度初始化。 infile.seekg(0,ios:beg);/將讀指針移到文件開始。 infile.read(data,length);/將文件數(shù)據(jù)讀入到字符指針data中。 file.put(char(length>>8); file.put(char(length&0xff);/將文件長度值按照逆序?qū)懭氲捷敵鑫募拈L度字段中。 file.write(data,length);/將data內(nèi)容寫入到輸出文件中。 /如果輸入文件長度不足B,則用
10、補(bǔ)足B。 if(length<46) for(int j=length;j<46;j+) file.put(char(0x00); 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;i
11、<8;i+)/對入讀入的字符的位分別處理。 if(0x80=(crc&(0x80)/當(dāng)前余數(shù)最高位為,需要進(jìn)行除法運(yùn)算。 crc=(crc<<1)&(0xff);/crc左移位,最低位補(bǔ)。 crc=crc|(ch&0x80)>>7);/將輸入數(shù)據(jù)相應(yīng)的值遞補(bǔ)到余數(shù)末位。 crc=crc(0x07);/進(jìn)行除法運(yùn)算,即與除數(shù)的低位相異或。 else/當(dāng)前余數(shù)的最高位為,不需要進(jìn)行除法運(yùn)算。 crc=(crc<<1)&(0xff);/crc左移位,最低位補(bǔ)。 crc=crc|(ch&0x80)>>7);/
12、將輸入數(shù)據(jù)相應(yīng)位的值遞補(bǔ)到余數(shù)末位。 ch=ch<<1;/讀到的字符左移位,使數(shù)據(jù)下一位作為輸入位。 file.clear();/文件清理 file.seekp(-1,ios:end);/將寫指針移到輸出文件的最后。 file.put(crc);/寫入crc碼。 file.close(); infile.close();/關(guān)閉輸入文件和輸出文件。 cout<<endl<<"數(shù)據(jù)幀文件"<<argv2<<" 封裝完成"<<endl;運(yùn)行結(jié)果:運(yùn)行結(jié)果如下所示:執(zhí)行EncapFrame.
13、exe文件的結(jié)果如下所示:模擬Ethernet幀的發(fā)送過程題目:編寫程序模擬Ethernet結(jié)點(diǎn)的數(shù)據(jù)發(fā)送流程設(shè)計(jì)要求:(1)用兩個(gè)線程a,b來模擬Ethernet上的兩臺主機(jī)。(2)用一個(gè)雙字類型變量Bus來模擬總線(將其初始化為“/0”,并且總線等于“/0”時(shí)表示總線空閑)。(3)兩個(gè)子線程向總線發(fā)送自己的數(shù)據(jù)。數(shù)據(jù)用該線程的線程信號進(jìn)行模擬,發(fā)送數(shù)據(jù)用線程號和Bus的“或”操作進(jìn)行模擬(即Bus=Bus|ID,ID為該線程的線程號)。(4)每臺主機(jī)須向總線成功發(fā)送10次數(shù)據(jù),如果其中某次數(shù)據(jù)發(fā)送失敗,則該線程結(jié)束。(5)發(fā)送流程須遵循CSMA/CD。隨機(jī)延遲算法中的沖突窗口取0.005。
14、在數(shù)據(jù)發(fā)送成功(即Bus=ID)后,報(bào)告“ID send success”,產(chǎn)生沖突(即Bus!=ID)后,報(bào)告“ID send collision”,發(fā)送失敗(即沖突計(jì)數(shù)器值為0)后報(bào)告“ID send failure”。隨著主機(jī)發(fā)送成功次數(shù)的增加,報(bào)告其已發(fā)送成功的次數(shù),如“主機(jī)A發(fā)送成功次數(shù)=3”。 三、可行性分析1.技術(shù)可行性 技術(shù)可行性分析包括:風(fēng)險(xiǎn)分析、資源分析和技術(shù)分析。風(fēng)險(xiǎn)分析的任務(wù)是,在給定的約束條件下,判斷能否設(shè)計(jì)并實(shí)現(xiàn)系統(tǒng)所需功能和性能。資源分析的任務(wù)是,論證是否具有系統(tǒng)開發(fā)所需的各類人員(管理人員和各類專業(yè)技術(shù)人員)、軟件、硬件資源和工作環(huán)境等。技術(shù)分析的任務(wù)是,論證當(dāng)
15、前的科學(xué)技術(shù)是否支持系統(tǒng)開發(fā)的全過程。其中最主要的是分析技術(shù)條件是否能順利完成開發(fā)工作,硬、軟件能否滿足開發(fā)者的需要等。2.功能分析基本功能1.在一臺計(jì)算機(jī)上實(shí)現(xiàn),用多個(gè)程序或線程來模擬多個(gè)計(jì)算機(jī)2.使用一個(gè)共享數(shù)據(jù)區(qū)來模擬總線3.模擬實(shí)現(xiàn)載波監(jiān)聽的過程 4. 模擬實(shí)現(xiàn)發(fā)生沖突的過程和沖突的處理機(jī)制四. Ethernet幀的發(fā)送與接收流程1 Ethernet幀的發(fā)送流程1)載波偵聽過程。Ethernet中每個(gè)結(jié)點(diǎn)利用總線發(fā)送數(shù)據(jù),總線是每個(gè)結(jié)點(diǎn)共享的公共傳輸介質(zhì)。所以結(jié)點(diǎn)在發(fā)送一個(gè)幀前,必須偵聽總線是否空閑。由于Ethernet的數(shù)據(jù)采用曼徹斯特編碼方式,所以可以通過判斷總線電平是否跳變來確定
16、總線是否空閑。若總線空閑,就可以啟動發(fā)送,否則繼續(xù)偵聽。2)沖突檢測。在數(shù)據(jù)發(fā)送過程中,可能會產(chǎn)生沖突(沖突是指總線上同時(shí)出現(xiàn)兩個(gè)或兩個(gè)以上的發(fā)送信號,他們疊加后的信號波形與任何發(fā)送結(jié)點(diǎn)的輸出波形都不相同)。因?yàn)榭赡苡卸鄠€(gè)主機(jī)都在偵聽總線,當(dāng)它們偵聽到總線空閑時(shí),就會往總線上發(fā)送數(shù)據(jù)。所以在發(fā)送數(shù)據(jù)的過程中,也應(yīng)該進(jìn)行沖突檢測,只要發(fā)現(xiàn)沖突就應(yīng)該立即停止發(fā)送數(shù)據(jù)。3)隨即延遲后重發(fā)。在檢測到?jīng)_突、停止發(fā)送后,結(jié)點(diǎn)進(jìn)行隨機(jī)延遲后重發(fā)。若發(fā)16次后還沒成功,則宣告發(fā)送失敗,取消該幀的發(fā)送。隨機(jī)延遲的算法一般采用截?cái)嗟亩M(jìn)制指數(shù)退避算法。當(dāng)出現(xiàn)線路沖突時(shí),如果沖突的各站點(diǎn)都采用同樣的退避間隔時(shí)間,則
17、很容易產(chǎn)生二次、三次的碰撞。因此,要求各個(gè)站點(diǎn)的退避間隔時(shí)間具有差異性。這要求通過退避算法來實(shí)現(xiàn)。當(dāng)一個(gè)站點(diǎn)發(fā)現(xiàn)線路忙時(shí),要等待一個(gè)延時(shí)時(shí)間M,然后再進(jìn)行偵聽工作。延時(shí)時(shí)間M由以下算法決定:M=2k*R*a。其中a為沖突窗口值(沖突窗口為總線最大長度和電磁波在介質(zhì)中傳播速度比值的2倍),R為隨機(jī)數(shù),k的取值為k=min(n,16),n為該幀已被發(fā)送的次數(shù)。圖1給出了Ethernet幀的發(fā)送流程。2 Ethernet幀的接收流程幀的接收流程大致可以分為以下三個(gè)步驟:1)檢查是否發(fā)生沖突,若發(fā)生沖突,則丟棄該幀;若沒有沖突,進(jìn)入下一步。2)檢查該幀的目的地址看是否可以接收該幀,若可以接收,則進(jìn)入下
18、一步。3)檢查CRC檢驗(yàn)和LLC數(shù)據(jù)長度。若都正確,接受該幀,否則丟棄。圖1 Ethernet幀的發(fā)送流程YNYY發(fā)送幀裝配幀總線忙啟動發(fā)送沖突?發(fā)送完成?發(fā)送成功沖突加強(qiáng)沖突次數(shù)加1等待后退延遲時(shí)間計(jì)算后退延遲發(fā)送失敗沖突次數(shù)>16?YNNN圖2 主程序流程圖開始啟動線程A啟動線程B結(jié)束五.詳細(xì)設(shè)計(jì)1.設(shè)計(jì)中的重點(diǎn)及難點(diǎn)1)模擬沖突過程,在這個(gè)程序中不要使用任何線程同步機(jī)制。2)若程序中不能模擬出沖突,可以在某些地方加入延時(shí)。2.核心代碼#include <stdio.h>#include <windows.h>#include <math.h>HA
19、NDLE hTread1, hTread2;/ 線程句柄DWORD dwThreadId1, dwThreadId2; / 線程ID號DWORD Bus = 0;/ 總線DWORD WINAPI ThreadProcA ( LPVOID lpParam )int i = 0;/發(fā)送成功次數(shù)int CollisionCounter = 11;/沖突計(jì)數(shù)器初始值為11double collisionWindow = 0.005;/沖突窗口值取0.005int randNum = rand()%3;/隨機(jī)數(shù)Loop: if (Bus=0)/總線空閑Bus = Bus|dwThreadId1;/模擬發(fā)
20、送包Sleep (12);if (Bus = dwThreadId1)/ 數(shù)據(jù)發(fā)送成功printf ( "%d Send Successnn", dwThreadId1 );/發(fā)送成功Bus = 0;/內(nèi)存清零CollisionCounter = 11;/復(fù)原沖突計(jì)數(shù)器Sleep (rand()%10);/隨機(jī)延時(shí)i+;printf ( "主機(jī)a發(fā)送成功次數(shù) %dnn", i);if (i<10)goto Loop;/發(fā)送次數(shù)不夠10次,開始下一次發(fā)送else/ 數(shù)據(jù)發(fā)送失敗printf ( "%d Send Collisionnn&qu
21、ot;, dwThreadId1 );/發(fā)生沖突Bus = 0;CollisionCounter-;/沖突計(jì)數(shù)器減1if ( CollisionCounter>0 )/隨機(jī)延遲重發(fā),延遲算法用截止二進(jìn)制指數(shù)后退算法Sleep(unsigned long)(randNum * (int)pow(2,(CollisionCounter>10)?10:CollisionCounter) * collisionWindow);goto Loop;elseprintf ( "%ld Send Failurenn", dwThreadId1 );/重發(fā)次數(shù)超過16次,宣布發(fā)
22、送失敗else/總線忙goto Loop;/繼續(xù)載波偵聽return 0;DWORD WINAPI ThreadProcB ( LPVOID lpParam )/返回DWORD(32位數(shù)據(jù))的API函數(shù)int j = 0;int CollisionCounter = 11;double collisionWindow = 0.005;int randNum = rand()%3;Loop: if (Bus=0)Sleep (2);Bus = Bus|dwThreadId2;Sleep (3);if (Bus = dwThreadId2)/ 數(shù)據(jù)發(fā)送成功printf ( "%d Send Successnn", dwThreadId2 );Bus = 0;CollisionCounter = 11
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年亞馬遜消費(fèi)品類攻略手冊
- 變電站優(yōu)化施工規(guī)范詳解
- 內(nèi)蒙古呼倫貝爾市名校2025年高一下化學(xué)期末教學(xué)質(zhì)量檢測試題含解析
- 湖北省荊州市沙市區(qū)沙市中學(xué)2025屆高二化學(xué)第二學(xué)期期末達(dá)標(biāo)檢測模擬試題含解析
- 兒童哮喘的長期控制與急性處理
- 廣東省廣州市三校2024-2025學(xué)年高二下學(xué)期期末聯(lián)考語文試卷(無答案)
- 2025年天津市南大附中高二期中-英語試卷
- 常識檸檬活動方案
- 少先隊(duì)徒步活動方案
- 居家運(yùn)動趣味活動方案
- 2025年湖北省中考生物、地理合卷試卷真題(含答案)
- 大疆無人機(jī)內(nèi)部管理制度
- 2025至2030年中國智能炒菜機(jī)(炒菜機(jī)器人)行業(yè)市場現(xiàn)狀調(diào)查及前景戰(zhàn)略研判報(bào)告
- 路面銑刨工入場安全教育試卷(含答案)
- 2025長沙市輔警考試試卷真題帶答案
- 胸痛健康教育課件
- 2025年合肥城建發(fā)展股份有限公司及所屬子公司招聘17人(二批次)筆試參考題庫附帶答案詳解
- 2025年項(xiàng)目終止協(xié)議
- 醫(yī)院員工手冊管理制度
- 2024大華網(wǎng)絡(luò)攝像機(jī)使用說明書全集
- 泉州水務(wù)集團(tuán)有限公司招聘考試真題2024
評論
0/150
提交評論