实验目的:
模拟实现透明网桥的自学习与过滤功能
实验内容:
- 初始化
- 建立网络结构
- 实现网桥 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");