![透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第1頁](http://file4.renrendoc.com/view/ac62c1c162267c623a681b1e55ac1688/ac62c1c162267c623a681b1e55ac16881.gif)
![透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第2頁](http://file4.renrendoc.com/view/ac62c1c162267c623a681b1e55ac1688/ac62c1c162267c623a681b1e55ac16882.gif)
![透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第3頁](http://file4.renrendoc.com/view/ac62c1c162267c623a681b1e55ac1688/ac62c1c162267c623a681b1e55ac16883.gif)
![透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第4頁](http://file4.renrendoc.com/view/ac62c1c162267c623a681b1e55ac1688/ac62c1c162267c623a681b1e55ac16884.gif)
![透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第5頁](http://file4.renrendoc.com/view/ac62c1c162267c623a681b1e55ac1688/ac62c1c162267c623a681b1e55ac16885.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
算法描述如下:自學(xué)習(xí):當(dāng)網(wǎng)橋收到一轉(zhuǎn)發(fā)幀時,先查找自己的轉(zhuǎn)發(fā)表中是否有源地址,若沒有則添加此項。轉(zhuǎn)發(fā)幀:查找自己轉(zhuǎn)發(fā)表中是否有目的地址,若沒有則將此幀從其他端口轉(zhuǎn)發(fā)出去。若有,則將轉(zhuǎn)發(fā)表中記錄的目的地址端口和此幀進入網(wǎng)橋時通過的端口進行比較,若相等則丟棄此幀因為目的主機已經(jīng)收到此幀了),若不相等,則將此幀通過轉(zhuǎn)發(fā)表記錄的目的地址端口轉(zhuǎn)發(fā)出去。源碼如下:(此代碼在突出算法思想的情況下設(shè)計的盡量簡單,有的情況沒有考慮,或者簡單處理了。)1#include<iostream>usingnamespacestd;#defineMax_Data100//轉(zhuǎn)發(fā)表數(shù)據(jù)項數(shù)量structData//數(shù)據(jù)項結(jié)構(gòu)TOC\o"1-5"\h\z{charAdd;//地址intport;//端口};structSendTable//轉(zhuǎn)發(fā)表結(jié)構(gòu){Datadata[Max_Data];intwrite;//寫指針,指向下一個要寫的位置}sendTable;voidinitSendTable()TOC\o"1-5"\h\z{for(inti=0;i<Max_Data;i++){sendTable.data[i].Add='0';sendTable.data[i].port=0;}sendTable.write=0;}intindex;//記錄匹配項boolFind(Datadata)//查找轉(zhuǎn)發(fā)表,若找到返回ture,找不到返回false{for(inti=0;i<Max_Data;i++){if(sendTable.data[i].Add==data.Add){index=i;returntrue;}}
35363738394041424344454647484950515253545556575859606162636465666768697071727374returnfalse;}voidAddSendTable(Datadata)//向轉(zhuǎn)發(fā)表當(dāng)前指針處添加數(shù)據(jù)項,若轉(zhuǎn)發(fā)表滿則循環(huán)覆蓋{sendTable.data[sendTable.write].Add=data.Add;sendTable.data[sendTable.write].port=data.port;sendTable.write=(sendTable.write+1)%Max_Data;}voidOutSendTable(){cout<<"********SendTable********"<<"\\n”;main()sourceData,destinationData;source,destination;for(inti=0;i<sendTable.write;i++)//注意:要是寫滿在輪轉(zhuǎn)回來的話這種方法就不行了。{cout<<sendTable.data[i].Add<<""<<sendTable.data[i].port<<"\\n”;}cout<<"*************************"<<"\\n";}void{Datacharintport;initSendTable();//初始化轉(zhuǎn)發(fā)表while(truemain()sourceData,destinationData;source,destination;destinationData.port=0;//由于目的地址不需要輸入端口號,此處將其置0if(!Find(sourceData))//查找轉(zhuǎn)發(fā)表,若找不到則將源地址添加如轉(zhuǎn)發(fā)表AddSendTable(sourceData);if(!Find(destinationData))//查找轉(zhuǎn)發(fā)表,若找不到則將此幀從所有其他端口發(fā)送給別的網(wǎng)橋cout<<"SendthisDatatootherbridgethroughotherport\\n";else{if(sendTable.data[index].port==sourceData.port)//若收到此幀的端口和目的地址再轉(zhuǎn)發(fā)表存儲的端口相同,說明源地址和目的地址處在同一網(wǎng)段內(nèi),目的主機已經(jīng)收到此幀,須將其丟棄cout<<"ThisDataalreadyreceived,sogiveitup.\\n”;else//若端口不同,則通過查找到的端口將此幀發(fā)出cout<<"SendthisDatathroughport"<<sendTable.data[index].port<<"\\n”;
78798081i23456789101112131415161718192021222324252627282930313233343536373839}OutSendTable();//打印轉(zhuǎn)發(fā)表}}#include<stdio.h>voidmain()(chararr1[3]={'A','B','C'};chararr2[2]={'D','E'};chararr3[3]={'F','G','H'};inta[][2]={0,0,0,0,0,0,0,0,0,0,0,0};intb[][2]={0,0,0,0,0,0,0,0,0,0,0,0};inti,j,m,n,k1=0,k2=0,t;chars,d,k;while(1){printf"請輸入源地址和目的地址:");scanf"%c%c",&s,&d);printf"\n");for(i=0;i<3;i++){if(arr1[i]==s)m=1;}for(i=0;i<2;i++){if(arr2[i]==s)m=2;}for(i=0;i<3;i++){if(arr3[i]==s)m=3;}switch(m){case1:{for(i=0;i<k1;i++){if(a[i][0]==s)break;}}if(i==k1){a[k1][0]=s;a[k1][1]=m;k1++;}//沒有記錄,在網(wǎng)橋數(shù)組中插入源地址for(i=0;i<k1;i++)//查找網(wǎng)橋數(shù)組中是否有目的地址
4041424344454647484950515253545556575859606162636465666768697071727374757677787980818283if(a[i][0]==d)(n=a[i][1]break;}}if(i==k1)printf("網(wǎng)橋1中沒有目的記錄%c,向右轉(zhuǎn)發(fā)\n",d);//不含有,轉(zhuǎn)發(fā)else(if(m==n)(print"網(wǎng)橋1丟棄\n");t=1;〃含有且在同在網(wǎng)段丟棄elseprint"不在同一網(wǎng)段,網(wǎng)橋1向右轉(zhuǎn)發(fā)\n");//含有不在同一網(wǎng)段轉(zhuǎn)發(fā)}if(t!=1)〃不在同一網(wǎng)段時(for(i=0;i<k1;i++)if(b[i][0]==s)(break;}if(i==k1){b[k2][0]=s;b[k2][1]=m;k2++;}//沒有記錄,在網(wǎng)橋數(shù)組中插入源地址for(i=0;i<k1;i++)//查找網(wǎng)橋數(shù)組中是否有目的地址if(b[i][0]==d){n=b[i][1];break;}}if(i==k2)printf("網(wǎng)橋2中沒有目的記錄%c,向右轉(zhuǎn)發(fā)\n",d);//不含有,轉(zhuǎn)發(fā)else{if(m==n)printf("網(wǎng)橋2丟棄\n");//含有且在同在網(wǎng)段丟棄elseprintf("不在同一網(wǎng)段,網(wǎng)橋2向右轉(zhuǎn)發(fā)\n");//含有不在同一網(wǎng)段轉(zhuǎn)發(fā)}}break;}case2:{〃向左轉(zhuǎn)發(fā)for(i=0;i<k1;i++)if(a[i][0]==s){break;}if(i==k1){a[k1][0]=s;a[k1][1]=m;k1++;}//沒有記錄,在網(wǎng)橋數(shù)組中插入源地址for(i=0;i<k1;i++)//查找網(wǎng)橋數(shù)組中是否有目的地址if(a[i][0]==d){n=a[i][1];break;}}if(i==k1)printf("網(wǎng)橋1中沒有目的記錄%c,向左轉(zhuǎn)發(fā)\n",d);//不含有,轉(zhuǎn)發(fā)
84858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127else(if(m==n)printf(-網(wǎng)橋1丟棄\n");//含有且在同在網(wǎng)段丟棄elseprintf(-不在同一網(wǎng)段,網(wǎng)橋1向左轉(zhuǎn)發(fā)\n");//含有不在同一網(wǎng)段轉(zhuǎn)發(fā)}〃向右轉(zhuǎn)發(fā)for(i=0;i<k2;i++)if(b[i][0]==s)(break;}if(i==k2){b[k2][0]=s;b[k2][1]=m-1;k2++;}//沒有記錄,在網(wǎng)橋數(shù)組中插入源地址for(i=0;i<k2;i++)//查找網(wǎng)橋數(shù)組中是否有目的地址if(b[i][0]==d){n=b[i][1];break;}}if(i==k2)printf("網(wǎng)橋2中沒有目的記錄%c,向右轉(zhuǎn)發(fā)\n",d);//不含有,轉(zhuǎn)發(fā)else{if(1==n)printf("網(wǎng)橋2丟棄\n");//含有且在同在網(wǎng)段丟棄elseprintf("不在同一網(wǎng)段,網(wǎng)橋2向右轉(zhuǎn)發(fā)\n");//含有不在同一網(wǎng)段轉(zhuǎn)發(fā)}break;}case3:{for(i=0;i<k2;i++)if(b[i][0]==s){break;}if(i==k2){b[k2][0]=s;b[k2][1]=m-1;k2++;}//沒有記錄,在網(wǎng)橋數(shù)組中插入源地址for(i=0;i<k2;i++)//查找網(wǎng)橋數(shù)組中是否有目的地址if(b[i][0]==d){n=b[i][1];break;}}if(i==k2)printf("網(wǎng)橋2中沒有目的記錄,向左轉(zhuǎn)發(fā)\n");//不含有,轉(zhuǎn)發(fā)else{if(2==n){printf("網(wǎng)橋2丟棄\n");t=1;}//含有且在同在網(wǎng)段丟棄elseprintf("不在同一網(wǎng)段,網(wǎng)橋2向左轉(zhuǎn)發(fā)\n");//含有不在同一網(wǎng)段轉(zhuǎn)發(fā)}if(t!=1)//不在同一網(wǎng)段時{for(i=0;i<k1;i++)if(a[i][0]==s){break;}if(i==k1){a[k1][0]=s;a[k1][1]=m-1;k1++;}//木有記錄,在網(wǎng)橋數(shù)組中插入源地址for(i=0;i<k1;i++)//查找網(wǎng)橋數(shù)組中是否有目的地址if(a[i][0]==d){n=a[i][1];break;}}if(i==k1)printf("網(wǎng)橋1中沒有目的記錄%c,向左轉(zhuǎn)發(fā)\n”,d);//不含有,轉(zhuǎn)發(fā)else
if(2==n)printf(-網(wǎng)橋1丟棄\n");//含有且在同在網(wǎng)段丟棄elseprintf(-不在同一網(wǎng)段,網(wǎng)橋1向左轉(zhuǎn)發(fā)\n");//含有不在同一網(wǎng)段轉(zhuǎn)發(fā)}}break;}default:;}putchar('\n');printf("網(wǎng)橋1\n");printf(" \n");for(i=0;i<k1;i++)(printf("%c",a[i][0]);printf("%d",a[i][1]);putchar('\n')
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年河南工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 2025年江西水利職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 專題03 句子(第3期)
- 專題04 世界古代史(易混易錯點)
- 簽訂二手房買賣合同注意事項
- 民法租賃合同
- 安裝燈具合同范本
- 裝修工人員工勞動合同
- 渣土運輸工程合同
- 直播銷售策劃合同
- 2025年人教五四新版八年級物理上冊階段測試試卷含答案
- 2025新人教版英語七年級下單詞表(小學(xué)部分)
- 2025年春季1530安全教育記錄主題
- 礦山2025年安全工作計劃
- 2025年包裝印刷項目可行性研究報告
- 給客戶的福利合同(2篇)
- T-WAPIA 052.3-2023 無線局域網(wǎng)設(shè)備技術(shù)規(guī)范 第3部分:接入點和控制器
- 運動技能學(xué)習(xí)與控制完整
- Unit4MyfamilyStorytime(課件)人教新起點英語三年級下冊
- 財務(wù)管理專業(yè)《生產(chǎn)實習(xí)》教學(xué)大綱
- 一年級口算天天練(可直接打印)
評論
0/150
提交評論