模拟实现透明网桥的自学习与过滤功能
实验目的:
模拟实现透明网桥的自学习与过滤功能
实验内容:
- 初始化
- 建立网络结构
- 实现网桥 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); } }
模拟实现透明网桥的自学习与过滤功能相关推荐
- 计算机网络透明网桥的算法,网基课程设计曼切斯特编码模拟透明网桥自习域转发帧算法模拟IP分片模拟.doc...
网基课程设计曼切斯特编码模拟透明网桥自习域转发帧算法模拟IP分片模拟 计算机网络基础 课 程 设 计 报 告 学号: 姓名: 班级: 题号:01.06.07 题目:曼切斯特编码模拟.透明网桥自学习域转 ...
- 配置透明网桥实现QinQ传输案例
拓扑图 规格 对于V200R008C20及更低版本,只有AR100&AR120&AR150&AR160&AR200系列支持该示例. 对于V200R008C30及更高版本 ...
- CSAPP:网桥的自学习算法
网桥 网桥(Bridge)像一个聪明的中继器.中继器从一个网络电缆里接收信号, 放大它们,将其送入下一个电缆.相比较而言,网桥对从关卡上传下来的信息更敏锐一些.网桥是一种对帧进行转发的技术,根据MAC ...
- 中继器、集线器、网桥、交换机、路由器功能与比较
中继器.集线器.网桥.交换机.路由器功能与比较 中继器(RP repeater): 由于数据在线路上传送存在损耗,在线路上传输的信号功率会逐渐衰减,衰减到一定程度时将造成信号失真,因此会导致接收错误. ...
- 过滤功能失效 Google Base成“虚拟×××”
本周早些时候,一个技术性缺陷使得Google新推出的Google Base 临时成为了一个巨大的虚拟×××. 上周推出的Google Base 标志着Google介入了免费个人分类广告和用户创建内容领 ...
- html 表格过滤功能,简单的带排序和过滤功能的jQuery表格插件
smart-table是一款简单实用的带排序和过滤功能的jQuery表格插件.该jQuery表格插件通过简单的设置就可以生成表格排序.表格字段过滤功能,甚至可以实现表格分页显示,使用非常方便. 使用方 ...
- java实现筛选_教你用Java web实现多条件过滤功能
生活中,当你闲暇之余浏览资讯的时候,当你搜索资料但繁杂信息夹杂时候,你就会想,如何更为准确的定位需求信息.今天就为你带来: 分页查询 需求分析:在列表页面中,显示指定条数的数据,通过翻页按钮完成首页/ ...
- Guava中针对集合的 filter和过滤功能
Guava中针对集合的 filter和过滤功能 博客分类: JAVA相关 在guava库中,自带了过滤器(filter)的功能,可以用来对collection 进行过滤,先看例子: Java代码 ...
- ALV标准过滤功能失效
1, 问题描述 ALV显示时,使用标准的ALV工具栏上的过滤功能,发现不起作用,如下,对Change Indicator列过滤失效,不能正确显示过滤结果. 2, 问题解决 失效的原因其实就是,alv中 ...
- SpringCloud-使用路由网关的服务过滤功能-拦截登录前是否有token为例
场景 SpringCloud-使用路由网关统一访问接口(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102733 ...
最新文章
- vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法
- [泰然翻译] cocos2d programming guide 场景和菜单
- 英特尔提出了一个数学公式,以此证明自动驾驶汽车的安全性
- 如何使用Hadoop的JobControl
- 混合云部署MySQL集群_数据库混合云解决方案
- RocketMQ:NameServer架构设计以及启动关闭流程源码分析
- 微信小程序开发必看,《使用 .NET Core + DevOps 开发微信跨平台应用》,苏州.NET俱乐部课程分享...
- 使用Python从PDF文件中提取数据
- Spark 之 解决数据倾斜(一)
- win10系统更新补丁时进度条一直卡在0%不动的解决方案
- 数据中心里的布线槽设计学问
- C语言中变量名加括号,为什么在声明变量时C ++允许我们在括号内将变量名括起来?...
- 三星k3梅林没有软件中心_斐讯K3梅林软件中心版刷机包 修正WAN口 修正2.4G 自动息屏 完美混血...
- 计算机网络工程概论论文,网络工程专业导论论文提纲格式模板 网络工程专业导论论文框架怎么写...
- 详解开关量,模拟量,数字量区别
- Java流系列(三):数据流、缓存流
- delphi 应用程序开发工具
- 苹果系统服务器状态,苹果开发者中心app显示黄色状态详情介绍
- matlab中的颜色设置颜色,matlabpcolor设置颜色
- 【Linux】内核驱动篇九--设备模型
热门文章
- (论文阅读笔记)Deep Learning based Recommender System: A Survey and New Perspectives
- 《符文冲突》unity塔防类游戏试做,经验源码分享-2
- 2016年度中国会计师事务所排名前十
- 企业微信调用扫一扫接口
- vue+barcode实现扫一扫功能
- python 动物园_python面向对象 动物园 例题
- 中国四级标准行政区划 JSON
- 全国计算机考试上传不了照片,报考2018计算机等级考试对上传照片有何要求?...
- 常州一中训练试题泛做 Part 1
- android底部抽屉库,Xamarin.Android之简单的抽屉布局