透明网桥的自学习和转发帧算法.doc

上传人:pu****.1 文档编号:544484753 上传时间:2022-10-31 格式:DOC 页数:6 大小:111.09KB
返回 下载 相关 举报
透明网桥的自学习和转发帧算法.doc_第1页
第1页 / 共6页
透明网桥的自学习和转发帧算法.doc_第2页
第2页 / 共6页
透明网桥的自学习和转发帧算法.doc_第3页
第3页 / 共6页
透明网桥的自学习和转发帧算法.doc_第4页
第4页 / 共6页
透明网桥的自学习和转发帧算法.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《透明网桥的自学习和转发帧算法.doc》由会员分享,可在线阅读,更多相关《透明网桥的自学习和转发帧算法.doc(6页珍藏版)》请在金锄头文库上搜索。

1、算法描述如下:自学习:当网桥收到一转发帧时,先查找自己的转发表中是否有源地址,若没有则添加此项。转发帧:查找自己转发表中是否有目的地址,若没有则将此帧从其他端口转发出去。若有,则将转发表中记录的目的地址端口和此帧进入网桥时通过的端口进行比较,若相等则丢弃此帧(因为目的主机已经收到此帧了),若不相等,则将此帧通过转发表记录的目的地址端口转发出去。源码如下:(此代码在突出算法思想的情况下设计的尽量简单,有的情况没有考虑,或者简单处理了。)12 #include 3 using namespace std; 4 #define Max_Data 100/转发表数据项数量 5 struct Data/

2、数据项结构 6 7 char Add;/地址 8 int port;/端口 9 ; 10 struct SendTable/转发表结构 11 12 Data dataMax_Data; 13 int write;/写指针,指向下一个要写的位置 14 sendTable; 15 void initSendTable() 16 17 for(int i=0;iMax_Data;i+) 18 19 sendTable.datai.Add=0; 20 sendTable.datai.port=0; 21 22 sendTable.write=0; 23 24 int index;/记录匹配项 25 b

3、ool Find(Data data)/查找转发表,若找到返回ture,找不到返回false 26 27 for(int i=0;iMax_Data;i+) 28 29 if(sendTable.datai.Add=data.Add) 30 31 index=i; 32 return true; 33 34 35 return false; 36 37 void AddSendTable(Data data)/向转发表当前指针处添加数据项,若转发表满则循环覆盖 38 39 sendTable.datasendTable.write.Add=data.Add; 40 sendTable.data

4、sendTable.write.port=data.port; 41 sendTable.write=(sendTable.write+1)%Max_Data; 42 43 void OutSendTable() 44 45 cout*SendTable*n; 46 for(int i=0;isendTable.write;i+)/注意:要是写满在轮转回来的话这种方法就不行了。 47 48 coutsendTable.datai.Add sendTable.datai.portn; 49 50 cout*n; 51 52 void main() 53 54 Data sourceData,de

5、stinationData; 55 char source,destination; 56 int port; 57 initSendTable();/初始化转发表 58 while(true) 59 60 coutsourceport; 62 sourceData.Add=source; 63 sourceData.port=port; 64 coutdestination; 66 destinationData.Add=destination; 67 destinationData.port=0;/由于目的地址不需要输入端口号,此处将其置0 68 if(!Find(sourceData)/

6、查找转发表,若找不到则将源地址添加如转发表 69 AddSendTable(sourceData); 70 if(!Find(destinationData)/查找转发表,若找不到则将此帧从所有其他端口发送给别的网桥 71 coutSend this Data to other bridge through other portn; 72 else 73 74 if(sendTable.dataindex.port=sourceData.port)/若收到此帧的端口和目的地址再转发表存储的端口相同,说明源地址和目的地址处在同一网段内,目的主机已经收到此帧,须将其丢弃 75 coutThis D

7、ata already received,so give it up.n; 76 else/若端口不同,则通过查找到的端口将此帧发出 77 coutSend this Data through port sendTable.dataindex.portn; 78 79 OutSendTable();/打印转发表 80 81 1 #include 2 void main() 3 4 char arr13=A,B,C; 5 char arr22=D,E; 6 char arr33=F,G,H; 7 int a2=0,0,0,0,0,0,0,0,0,0,0,0; 8 int b2=0,0,0,0,0

8、,0,0,0,0,0,0,0; 9 int i,j,m,n,k1 = 0,k2 = 0,t; 10 char s,d,k; 11 12 while(1) 13 14 printf(请输入源地址和目的地址:); 15 scanf(%c%c,&s,&d); 16 printf(n); 17 for(i=0;i3;i+) 18 if(arr1i=s) 19 m=1; 20 21 for(i=0;i2;i+) 22 if(arr2i=s) 23 m=2; 24 25 for(i=0;i3;i+) 26 if(arr3i=s) 27 m=3; 28 29 switch(m) 30 31 case 1:

9、32 33 for(i=0;ik1;i+) 34 if(ai0=s) 35 break; 36 37 if(i=k1) ak10=s;ak11=m;k1+;/没有记录,在网桥数组中插入源地址 38 39 for(i=0;ik1;i+)/查找网桥数组中是否有目的地址 40 41 if(ai0=d) 42 43 n=ai1; break; 44 45 46 47 if(i=k1) printf(网桥1中没有目的记录%c,向右转发n,d);/不含有,转发 48 else 49 50 if(m=n) 51 printf(网桥1丢弃n);t=1; 52 /含有且在同在网段丢弃 53 else 54 pr

10、intf(不在同一网段,网桥1向右转发n);/含有不在同一网段转发 55 56 57 if(t!=1) /不在同一网段时 58 59 for(i=0;ik1;i+) 60 if(bi0=s) break; 61 if(i=k1) bk20=s;bk21=m;k2+;/没有记录,在网桥数组中插入源地址 62 for(i=0;ik1;i+)/查找网桥数组中是否有目的地址 63 if(bi0=d) n=bi1; break; 64 if(i=k2) printf(网桥2中没有目的记录%c,向右转发n,d);/不含有,转发 65 else 66 67 if(m=n) printf(网桥2丢弃n);/含有且在同在网段丢弃 68 else printf(不在同一网段,网桥2向右转发n);/含有不在同一网段转发 69 70 71 break;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号