01200900800284周涅林

267 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
267
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

01200900800284周涅林

  1. 1. 山东大学威海分校机电与信息工程学院 实验一(透明网桥自学习算法) 实验报告 编号:姓名 周涅林 院系 机电与信息工程学院 学号 200900800284任课教师 程杰 指导教师 程杰实验地点 电子楼 201 实验时间 2011.10.18实验名称 透明网桥的自学习算法同 组 人 夏铨君、卢磊预习报告(对实验主要内容的认识) 得分一.实验原理: 透明网桥的“透明”是指以太网上的站点并不知道所发送的帧将经过哪几个网桥,以太网上的站点都看不见以太网上的网桥。透明网桥工作在数据链路层,是一种即插即用设备,网桥刚刚连到以太网时,其转发表是空的,若接受到一个帧,网桥就按照自学习算法处理收到的帧,逐步建立转发表。自学习算法的原理:若从某个站 A 发出的帧从接口 X 进入了某网桥,那么从这个接口出发沿相反方向,一定可以把一个帧传送到 A。二.实验内容: 1.初始化 2.建立网络结构 3.实现网桥 B1 和 B2 的自学习算法 4.按特定时序输入测试数据,验证过滤功能的有效性 5.算法结束输出网桥 B1 和 B2 的转发表三.实验网桥结构示意图:
  2. 2. 实验内容(问题,思路,程序,结果) 得分
  3. 3. 我们小组使用 java 来实现自学习算法,在实现算法前,我们首先构造了几个实现算法所需要的类: Computer 类 :定义主机的变量方法 String address; Bus bus;//com 所连接的 bus Data data;//接收到的数据 public Computer(String add){ this.address = add; } public void sendData(Data data)//通过总线广播 //调用 Bus 的 send()方法 public void receiveData(Data d)//接收 data //检测 data 是否发送到该处,如果是,则接收(复制),否则丢弃 } Bridge 类 :定义与网桥相关的变量方法 public class Bridge { public Bus leftBus, rightBus; public List<Map<String, String>> table = newArrayList<Map<String,String>>(); public Map<String, String> map_f, map_t; public int f = 0, t = 0;
  4. 4. public void sendToRightBridge(Data data) public void send(Data data)Data 类 :定义传输的数据实体类 public class Data { public String from,to,content; public Bus bus; public Data(String content,String to) public Data(Data d) //拷贝构造方法 } ImagePanel 类 :装载图片 public class ImagePanel extends JPanel { /** * 此方法是重写了 paintComponent 方法,来设置 JPanel 的背景 */ private static final long serialVersionUID = 1L; public void paintComponent(Graphics g) } MainFrame 类 :程序主面板 ,构建各组件 public class MainFrame extends JFrame implements ActionListener{ } NetWork 类 :依照给定结构图 ,构建网桥 public NetWork() //构造方法,将预先定义的各主机,网桥,总线按照位置连接 public JTable getBridgeOneTable()//得到网桥 1 的转发表 public JTable getBridgeTwoTable()//得到网桥 2 的转发表 public void sendMessage(String from,String to,String content){ //from: 源地址;to:目的地址 public void getMessage(String target){//获得指定主机的数据
  5. 5. 核心算法public void receiveData(Data data){ //System.out.println("ssss" + this); f = 0;t = 0; for (Map<String,String> row:table){ if (row.get("address").equals(data.from)){ f = 1; map_f = row; break; } } if (f == 0){ Map<String,String> map = new HashMap<String,String>(); map.put("address", data.from); if(data.bus == leftBus) map.put("location","left" ); else{ map.put("location","right" ); } table.add(map); map_f = map; } for (Map<String, String>row:table){ if (row.get("address").equals(data.to)){ t = 1; map_t = row; break; } } if(t == 0){ if(data.bus == leftBus) rightBus.rightSend(new Data(data)); else leftBus.leftSend(new Data(data)); } else { if(map_f.get("location").equals(map_t.get("location"))) ; else{ if(data.bus == leftBus) rightBus.rightSend(new Data(data)); else leftBus.leftSend(new Data(data));
  6. 6. } }首先判断源地址是否登记过,若无则登记,有则跳过登记。然后判断目地址地址是否登记过,无则转发,若有,判断其接口与目的接口是否相同,相同则丢弃,不同则转发。然后调用转发网桥的自学习方法。实验结果截图: 实验结论 得分 由程序运行结果得出,主机 A 向 C 发送帧,1 号 2 号网桥均登记转发,将A 主机记入进转发表。 主机 C 向 E 发送帧,1 号 2 号网桥均登记转发,将 C 主机记入进转发表,E 向 C 发送帧,1 号 2 号网桥均登记主机 E,因为转发表中有 C主机的记录,因此,1 号网桥转发,2 号网桥直接丢弃。从而实现网桥的自学习功能。另外,当主机已存在转发表中,网桥则不再登记教师评价 总分 实际得分

×