透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第1頁
透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第2頁
透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第3頁
透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第4頁
透明網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀算法_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論