网桥工作原理1

网桥的工作原理(1)


缓存:网桥首先会对收到的数据帧进行缓存并处理

过滤: 判断入帧的目标节点是否位于发送这个帧的网段中(同一端口中) ,如果是,网桥就不把帧转发到网桥的其他端口

转发:如果帧的目标节点位于另一个网络,网桥就将帧发往正确的网段 (向另一端口转发) 

网桥的工作原理(2) 


学习:当帧经过网桥, 网桥首先在网桥表中查找帧的源MAC地址

如果该地址不在网桥表中,则将有该MAC地址及其所对应的网桥端口信息加入(逆向学习法)

aa

扩散:如果在表中找不到目标地址,则按扩散的办法将该 数据发送给与该网桥连接的除发送该数据的网段外的所有网段。

以混杂方式工作(接收连接到该网桥的局域网上传送的所有帧)。

每个桥维护了一个基于MAC地址的过滤数据库,网桥根据这个数据库,把收到的帧往相应的局域网(端口)进行转发。

在过滤数据库中, 列出了每个可能的目的地(目的MAC地址),以及它属于哪一条输出线路(一个端口号,即表示转发给哪个LAN),每个表项还有一个超时设置

(可以及时学习改变了的地址) 


假设桥在端口x上接收到一个MAC帧,有如下规则

1查询过滤数据库,决定该目的MAC地址是否列在除端口x外的其它端口中。

2如果目的MAC地址没有找到,把该帧往除了它所到来的端口外的所有端口发送,即进行扩散。

3如果目的地址列在过滤数据库中的某个端口y中,其中,决定是否端口y处在阻塞或转发状态。在以后的生成树算法中我们可以看到,一个端口可能有时候是阻塞的,以防止它接收或发送帧。

4如果端口y是非阻塞的,把该帧通过端口y转发到它所连接的LAN中




网桥会把广播帧向网桥的到来端口外的所有其它端口转发,即通过网桥连接的站点位于同一个广播域(broadcast

 domain),这些节点能相互接收彼此的广播帧。 

ss


学习:站点A给B发送数据,网桥通过察看帧的源地址了解到A在端口1,过滤数据库中加入<A,1>。

扩散:网桥并不知道B在何处,因此把帧向所有其它端口(即端口2和3)进行扩散。

转发:B收到A发过来的帧之后,可能会进行回应,即B发送数据给A这个时候网桥察看源地址了解到B在端口2上,加入表项<B,2>,同时帧的目的地址A在

过滤

数据库中存在,并且在端口1上,因此B发回给A的帧向端口1转发

过滤:现在站点C向A发送数据,由于A、C和网桥连接到同一个集线器上,网桥也会收到该帧,察看源地址C,记录C在端口1,加入表项<C,1>,同时目的地址A在

过滤数据库中并且所在的端口正是收到该帧的端口,因此不进行转发。

老化:过滤数据库表项的TTL每秒都增加,超过某个值则从数据库中清除,一般缺省的TTL设置为300秒。老化主要是考虑到网桥的内存有限、节点移动的情况。

定期清除,像计时器一样






  • 11
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网桥是用于连接不同网段的网络设备,它的主要功能是根据目的地址来决定是否转发帧。下面是一个使用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`方法来模拟网桥从文件中接收帧并进行转发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值