透明网桥的工作原理

透明网桥(transparent bridge)的标准是802.1D。透明网桥是一种即插即用设备,只要把网桥接入局域网,不需要改动硬件和软件,无需设置地址开关,无需装入路由表或参数,网桥就能工作。

一、网桥与交换机的联系与区别

联系:风格与交换机都基于帧地址进行路由。

区别:网桥每个端口连接两个或者多个LAN。交换机的每个端口连接一台计算机。

二、工作原理

自学习和转发帧

下面是网桥的自学习和转发帧的一般步骤。

  1. 网桥收到一帧后先进行自学习。查找转发表中与收到帧的源地址有无相匹配的项目。如果没有,就在转发表中增加一个项目。如果有,则把原有的项目进行更新。

  2. 转发帧。查找转发表中与收到帧的源地址有无相匹配的项目。如果没有,则通过所有其他接口进行转发。如果有,则按转发表中给出的接口进行转发。但应注意,若转发表中给出的接口就是该帧进入网桥的接口,则应丢弃这个帧。

逆向学习法

  透明网桥采用的算法是逆向学习法(backward learning)。网桥按混杂的方式工作,故它能看见所连接的任一LAN上传送的帧。查看源地址即可知道在哪个LAN上可访问哪台机器,于是在散列表中添上一项。 

  当计算机和网桥加电、断电或迁移时,网络的拓扑结构会随之改变。为了处理动态拓扑问题,每当增加散列表项时,均在该项中注明帧的到达时间。每当目的地已在表中的帧到达时,将以当前时间更新该项。这样,从表中每项的时间即可知道该机器最后帧到来的时间。网桥中有一个进程定期地扫描散列表,清除时间早于当前时间若干分钟的全部表项。于是,如果从LAN上取下一台计算机,并在别处重新连到LAN上的话,那么在几分钟内,它即可重新开始正常工作而无须人工干预。这个算法同时也意味着,如果机器在几分钟内无动作,那么发给它的帧将不得不散发,一直到它自己发送出一帧为止。 

  到达帧的路由选择过程取决于发送的LAN(源LAN)和目的地所在的LAN(目的LAN),如下所示: 

  1、如果源LAN和目的LAN相同,则丢弃该帧。 

  2、如果源LAN和目的LAN不同,则转发该帧。 

  3、如果目的LAN未知,则进行扩散。 

  为了提高可靠性,有人在LAN之间设置了并行的两个或多个网桥,但是,这种配置引起了另外一些问题,因为在拓扑结构中产生了回路,可能引发无限循环。

生成树算法

透明网桥还使用了一个生成树(spanning tree)算法,即互连在一起的网桥在进行彼此通信后,就能找出原来的网络拓扑的一个子集。在这个子集里,整个连通的网络中不存在回路,即在任何两个站之间只有一条路径。

为了得能够反映网络拓扑发生变化时的生成树,在生成树上的根网桥每隔一段时间还要对生成树的拓扑进行更新。

透明网桥的路径选择算法归纳

(1)若目的局域网和源局域网一样,则网桥将该帧删除。

(2)若源局域网和目的局域网是不同的网,则将该帧转发到目的局域网。

(3)若目的局域网不知道,则采用扩散法处理。

 透明网桥的优缺点: 

  透明网桥的优点是易于安装,只需要插入电缆即大功告成。一般用在总线网中。缺点是不能最佳地利用网络带宽。

 

以下来自:http://blog.sina.com.cn/s/blog_4ad104de010008ft.html

1、每个网桥保存一个动态路由表(目的站点地址,端口号)。

2、初始时,该路由表为空,以后通过逆向自学习方法获取路由信息。逆向自学习方法:当一个MAC帧到达网桥时,网桥根据其源MAC地址以及到达的端口号,向路由表增加或刷新一条记录。

3、路由表的每一项都设置一个超时计时器,若超时,则删除该项,以适应拓扑结构的变化。

4、当某一帧到达网桥时,查询路由表。

若找到目的地址,则向对应的端口转发。

若找不到目的地址,则向所有的端口广播(除了它所到达的端口外)。

5、当网络拓扑结构出现环路时,应阻塞某些网桥的某些端口,消除环路,使网络呈现出生成树结构(Spaning tree)。

  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
是用于连接不同段的络设备,它的主要功能是根据目的地址来决定是否转发帧。下面是一个使用Java模拟工作原理的示例: ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class BridgeSimulation { private Map<String, String> forwardingTable; public BridgeSimulation() { forwardingTable = new HashMap<>(); } public void readFrames(String file1, String file2) { try (BufferedReader reader1 = new BufferedReader(new FileReader(file1)); BufferedReader reader2 = new BufferedReader(new FileReader(file2))) { String frame1, frame2; while ((frame1 = reader1.readLine()) != null && (frame2 = reader2.readLine()) != null) { System.out.println("Received frame from file 1: " + frame1); System.out.println("Received frame from file 2: " + frame2); String destAddress1 = frame1.split(",")[0]; String destAddress2 = frame2.split(",")[0]; if (forwardingTable.containsKey(destAddress1)) { System.out.println("Forwarding frame from file 1 to " + forwardingTable.get(destAddress1)); } else { System.out.println("Discarding frame from file 1"); } if (forwardingTable.containsKey(destAddress2)) { System.out.println("Forwarding frame from file 2 to " + forwardingTable.get(destAddress2)); } else { System.out.println("Discarding frame from file 2"); } } } catch (IOException e) { e.printStackTrace(); } } public void addEntryToForwardingTable(String destAddress, String port) { forwardingTable.put(destAddress, port); } public static void main(String[] args) { BridgeSimulation bridge = new BridgeSimulation(); bridge.addEntryToForwardingTable("00:11:22:33:44:55", "Port 1"); bridge.addEntryToForwardingTable("AA:BB:CC:DD:EE:FF", "Port 2"); bridge.readFrames("file1.txt", "file2.txt"); } } ``` 这个示例中,我们首先创建了一个`BridgeSimulation`类来模拟工作原理。在`readFrames`方法中,我们从两个文件中读取帧数据,并根据目的地址来判断是否转发帧。转发表使用`forwardingTable`来存储目的地址和对应的端口。 在`main`方法中,我们创建了一个`BridgeSimulation`对象,并添加了一些转发表的条目。然后调用`readFrames`方法来模拟从文件中接收帧并进行转发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值