实验目的:


模拟实现透明网桥的自学习与过滤功能
实验内容:

  • 初始化
  • 建立网络结构
  • 实现网桥 B1 和 B2 的自学习算法
  • 按特定时序输入测试数据,验证过滤功能的有效性
  • 算法结束输出网桥 B1 和 B2 的转发表。

看了实验内容之后,重新温习了书中网桥自学习的知识点。梳理网桥自学习算法的流程。试验中用于网桥测试其学习和过滤功能的网络结构如下:

分为几种情况:


① 当 A 向 B 发送帧时,网桥 B1 会先按源地址 A 查找转发表。如果在网桥 B1 中没有 A 的地址,于是会把 A 和收到此帧的借口 1 写入转发表。接着再按目的地址 B 查找转发表,转发表中没有 B 的地址,就会把 B 用另一个接口 2 转发出去。网桥 B2 收到这个发过来的帧。
② 对于网桥 B2 按同样的方式处理收到的帧。网桥 2 的转发表中没有 A 的地址,因此会在转发表中写入地址 A 和接口 1. 网桥 B2 的转发表中没有 B 的地址,因此网桥 2 通过接口 4 发送此帧。
③ B 向 A 发送帧 网桥 B1 会从其接口 1 收到该帧。同理,网桥 B1 的转发表中没有 B, 则会把源地址 B 和接口 1 写入转发表。而对于目的地址 A,网桥 B1 的转发表中存在 A,转发接口也是 1,网桥 B1 会把次帧丢弃。
实现
实验采用 C 语言实现,采用二维数组来表示网桥的转发表。
代码实现如下:

#include<stdio.h>
void main()
{  char arr1[3]={'A','B','C'};  char arr2[2]={'D','E'};  char arr3[3]={'F','G','H'};  int a[][2]={0,0,0,0,0,0,0,0,0,0,0,0};  int b[][2]={0,0,0,0,0,0,0,0,0,0,0,0};  int i,j,m,n,k1 = 0,k2 = 0,t=0;   char s,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)  {  case 1:  {  for(i=0;i<k1;i++){  if(a[i][0]==s)  {break;}  }  if(i==k1) {a[k1][0]=s;a[k1][1]=m;k1++;}//没有记录,在网桥数组中插入源地址  for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址  {  if(a[i][0]==d)  {  n=a[i][1]; break;  }  }  if(i==k1) printf("网桥1中没有目的记录%c,向右转发\n",d);//不含有,转发  else  {  if(m==n){  printf("网桥1丢弃\n");t=1;  }//含有且在同在网段丢弃  else  printf("不在同一网段,网桥1向右转发\n");//含有不在同一网段转发  }  if(t!=1) //不在同一网段时  {  for(i=0;i<k1;i++)  if(b[i][0]==s) {break;}  if(i==k1) {b[k2][0]=s;b[k2][1]=m;k2++;}//没有记录,在网桥数组中插入源地址  for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址  {if(b[i][0]==d) {n=b[i][1]; break;}}  if(i==k2) printf("网桥2中没有目的记录%c,向右转发\n",d);//不含有,转发  else  {  if(m==n) printf("网桥2丢弃\n");//含有且在同在网段丢弃  else printf("不在同一网段,网桥2向右转发\n");//含有不在同一网段转发  }  }  break;  }  case 2:  {  //向左转发  for(i=0;i<k1;i++)  if(a[i][0]==s) {break;}  if(i==k1) {a[k1][0]=s;a[k1][1]=m;k1++;}//没有记录,在网桥数组中插入源地址  for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址  {if(a[i][0]==d) {n=a[i][1]; break;}}  if(i==k1) printf("网桥1中没有目的记录%c,向左转发\n",d);//不含有,转发  else  {  if(m==n) printf("网桥1丢弃\n");//含有且在同在网段丢弃  else printf("不在同一网段,网桥1向左转发\n");//含有不在同一网段转发  }  //向右转发  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++;}//没有记录,在网桥数组中插入源地址  for(i=0;i<k2;i++)//查找网桥数组中是否有目的地址  {if(b[i][0]==d) {n=b[i][1]; break;}}  if(i==k2) printf("网桥2中没有目的记录%c,向右转发\n",d);//不含有,转发  else  {  if(1==n) printf("网桥2丢弃\n");//含有且在同在网段丢弃  else printf("不在同一网段,网桥2向右转发\n");//含有不在同一网段转发  }  break;  }  case 3:  {  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++;}//没有记录,在网桥数组中插入源地址  for(i=0;i<k2;i++)//查找网桥数组中是否有目的地址  {if(b[i][0]==d) {n=b[i][1]; break;}}  if(i==k2) printf("网桥2中没有目的记录,向左转发\n");//不含有,转发  else  {  if(2==n) {printf("网桥2丢弃\n");t=1;}//含有且在同在网段丢弃  else printf("不在同一网段,网桥2向左转发\n");//含有不在同一网段转发  }  if(t!=1)//不在同一网段时  {  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++;}//木有记录,在网桥数组中插入源地址  for(i=0;i<k1;i++)//查找网桥数组中是否有目的地址  {if(a[i][0]==d) {n=a[i][1]; break;}}  if(i==k1) printf("网桥1中没有目的记录%c,向左转发\n",d);//不含有,转发  else  {  if(2==n) printf("网桥1丢弃\n");//含有且在同在网段丢弃  else printf("不在同一网段,网桥1向左转发\n");//含有不在同一网段转发  }  }  break;  }  default: ;  }  putchar('\n');  printf("网桥1\n");  printf("--------\n");  for(i=0;i<k1;i++)  {printf("  %c  ",a[i][0]);  printf("%d  ",a[i][1]);  putchar('\n');  }  printf("--------\n");  printf("网桥2\n");  printf("--------\n");  for(i=0;i<k2;i++)  {printf("  %c  ",b[i][0]);  printf("%d  ",b[i][1]);  putchar('\n');  }  printf("-------\n");  scanf("%c",&k);  }  }  

模拟实现透明网桥的自学习与过滤功能相关推荐

  1. 计算机网络透明网桥的算法,网基课程设计曼切斯特编码模拟透明网桥自习域转发帧算法模拟IP分片模拟.doc...

    网基课程设计曼切斯特编码模拟透明网桥自习域转发帧算法模拟IP分片模拟 计算机网络基础 课 程 设 计 报 告 学号: 姓名: 班级: 题号:01.06.07 题目:曼切斯特编码模拟.透明网桥自学习域转 ...

  2. 配置透明网桥实现QinQ传输案例

    拓扑图 规格 对于V200R008C20及更低版本,只有AR100&AR120&AR150&AR160&AR200系列支持该示例. 对于V200R008C30及更高版本 ...

  3. CSAPP:网桥的自学习算法

    网桥 网桥(Bridge)像一个聪明的中继器.中继器从一个网络电缆里接收信号, 放大它们,将其送入下一个电缆.相比较而言,网桥对从关卡上传下来的信息更敏锐一些.网桥是一种对帧进行转发的技术,根据MAC ...

  4. 中继器、集线器、网桥、交换机、路由器功能与比较

    中继器.集线器.网桥.交换机.路由器功能与比较 中继器(RP repeater): 由于数据在线路上传送存在损耗,在线路上传输的信号功率会逐渐衰减,衰减到一定程度时将造成信号失真,因此会导致接收错误. ...

  5. 过滤功能失效 Google Base成“虚拟×××”

    本周早些时候,一个技术性缺陷使得Google新推出的Google Base 临时成为了一个巨大的虚拟×××. 上周推出的Google Base 标志着Google介入了免费个人分类广告和用户创建内容领 ...

  6. html 表格过滤功能,简单的带排序和过滤功能的jQuery表格插件

    smart-table是一款简单实用的带排序和过滤功能的jQuery表格插件.该jQuery表格插件通过简单的设置就可以生成表格排序.表格字段过滤功能,甚至可以实现表格分页显示,使用非常方便. 使用方 ...

  7. java实现筛选_教你用Java web实现多条件过滤功能

    生活中,当你闲暇之余浏览资讯的时候,当你搜索资料但繁杂信息夹杂时候,你就会想,如何更为准确的定位需求信息.今天就为你带来: 分页查询 需求分析:在列表页面中,显示指定条数的数据,通过翻页按钮完成首页/ ...

  8. Guava中针对集合的 filter和过滤功能

    Guava中针对集合的 filter和过滤功能 博客分类:  JAVA相关 在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子: Java代码   ...

  9. ALV标准过滤功能失效

    1, 问题描述 ALV显示时,使用标准的ALV工具栏上的过滤功能,发现不起作用,如下,对Change Indicator列过滤失效,不能正确显示过滤结果. 2, 问题解决 失效的原因其实就是,alv中 ...

  10. SpringCloud-使用路由网关的服务过滤功能-拦截登录前是否有token为例

    场景 SpringCloud-使用路由网关统一访问接口(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102733 ...

最新文章

  1. vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法
  2. [泰然翻译] cocos2d programming guide 场景和菜单
  3. 英特尔提出了一个数学公式,以此证明自动驾驶汽车的安全性
  4. 如何使用Hadoop的JobControl
  5. 混合云部署MySQL集群_数据库混合云解决方案
  6. RocketMQ:NameServer架构设计以及启动关闭流程源码分析
  7. 微信小程序开发必看,《使用 .NET Core + DevOps 开发微信跨平台应用》,苏州.NET俱乐部课程分享...
  8. 使用Python从PDF文件中提取数据
  9. Spark 之 解决数据倾斜(一)
  10. win10系统更新补丁时进度条一直卡在0%不动的解决方案
  11. 数据中心里的布线槽设计学问
  12. C语言中变量名加括号,为什么在声明变量时C ++允许我们在括号内将变量名括起来?...
  13. 三星k3梅林没有软件中心_斐讯K3梅林软件中心版刷机包 修正WAN口 修正2.4G 自动息屏 完美混血...
  14. 计算机网络工程概论论文,网络工程专业导论论文提纲格式模板 网络工程专业导论论文框架怎么写...
  15. 详解开关量,模拟量,数字量区别
  16. Java流系列(三):数据流、缓存流
  17. delphi 应用程序开发工具
  18. 苹果系统服务器状态,苹果开发者中心app显示黄色状态详情介绍
  19. matlab中的颜色设置颜色,matlabpcolor设置颜色
  20. 【Linux】内核驱动篇九--设备模型

热门文章

  1. (论文阅读笔记)Deep Learning based Recommender System: A Survey and New Perspectives
  2. 《符文冲突》unity塔防类游戏试做,经验源码分享-2
  3. 2016年度中国会计师事务所排名前十
  4. 企业微信调用扫一扫接口
  5. vue+barcode实现扫一扫功能
  6. python 动物园_python面向对象 动物园 例题
  7. 中国四级标准行政区划 JSON
  8. 全国计算机考试上传不了照片,报考2018计算机等级考试对上传照片有何要求?...
  9. 常州一中训练试题泛做 Part 1
  10. android底部抽屉库,Xamarin.Android之简单的抽屉布局