透明网桥的自学习和转发帧算法.doc_第1页
透明网桥的自学习和转发帧算法.doc_第2页
透明网桥的自学习和转发帧算法.doc_第3页
透明网桥的自学习和转发帧算法.doc_第4页
透明网桥的自学习和转发帧算法.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

算法描述如下:自学习:当网桥收到一转发帧时,先查找自己的转发表中是否有源地址,若没有则添加此项。转发帧:查找自己转发表中是否有目的地址,若没有则将此帧从其他端口转发出去。若有,则将转发表中记录的目的地址端口和此帧进入网桥时通过的端口进行比较,若相等则丢弃此帧(因为目的主机已经收到此帧了),若不相等,则将此帧通过转发表记录的目的地址端口转发出去。源码如下:(此代码在突出算法思想的情况下设计的尽量简单,有的情况没有考虑,或者简单处理了。)12 #include 3 using namespace std; 4 #define Max_Data 100/转发表数据项数量 5 struct Data/数据项结构 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 bool 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.datasendTable.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,destinationData; 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)/查找转发表,若找不到则将源地址添加如转发表 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 Data 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,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: 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 printf(不在同一网段,网桥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; 72 73 case 2: 74 75 /向左转发 76 for(i=0;ik1;i+) 77 if(ai0=s) break; 78 if(i=k1) ak10=s;ak11=m;k1+;/没有记录,在网桥数组中插入源地址 79 80 for(i=0;ik1;i+)/查找网桥数组中是否有目的地址 81 if(ai0=d) n=ai1; break; 82 83 if(i=k1) printf(网桥1中没有目的记录%c,向左转发n,d);/不含有,转发 84 else 85 86 if(m=n) printf(网桥1丢弃n);/含有且在同在网段丢弃 87 else printf(不在同一网段,网桥1向左转发n);/含有不在同一网段转发 88 89 /向右转发 90 for(i=0;ik2;i+) 91 if(bi0=s) break; 92 if(i=k2) bk20=s;bk21=m-1;k2+;/没有记录,在网桥数组中插入源地址 93 94 for(i=0;ik2;i+)/查找网桥数组中是否有目的地址 95 if(bi0=d) n=bi1; break; 96 if(i=k2) printf(网桥2中没有目的记录%c,向右转发n,d);/不含有,转发 97 else 98 99 if(1=n) printf(网桥2丢弃n);/含有且在同在网段丢弃 100 else printf(不在同一网段,网桥2向右转发n);/含有不在同一网段转发 101 102 break; 103 104 case 3: 105 106 for(i=0;ik2;i+) 107 if(bi0=s) break; 108 if(i=k2) bk20=s;bk21=m-1;k2+;/没有记录,在网桥数组中插入源地址 109 for(i=0;ik2;i+)/查找网桥数组中是否有目的地址 110 if(bi0=d) n=bi1; break; 111 if(i=k2) printf(网桥2中没有目的记录,向左转发n);/不含有,转发 112 else 113 114 if(2=n) printf(网桥2丢弃n);t=1;/含有且在同在网段丢弃 115 else printf(不在同一网段,网桥2向左转发n);/含有不在同一网段转发 116 117 118 if(t!=1)/不在同一网段时 119 120 121 for(i=0;ik1;i+) 122 if(ai0=s) break; 123 if(i=k1) ak10=s;ak11=m-1;k1+;/木有记录,在网桥数组中插入源地址 124 for(i=0;ik1;i+)/查找网桥数组中是否有目的地址 125 if(ai0=d) n=ai1; break; 126 if(i=k1) printf(网桥1中没有目的记录%c,向左转发n,d);/不含有,转发 127 else 128 129 if(2=n) printf(网桥1丢弃n);/含有且在同在网段丢弃 130 else printf(不在同一网段,网桥1向左转发n);/含有不在同一网段转发 131 132 133 break; 134 135 136 default: ; 137 138 139 putchar(n); 140 printf(网桥1n); 141 printf(-n); 142 for(i=0;ik1;i+) 14

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论