相比于中继器,网桥能够解析它收发的数据,读取目标地址信息,并决定是否向所连接网络的其他网段转发数据包。由于网桥工作在二层,因此将学习数据包的源MAC地址,建立mac-port的映射表。
网桥中的每个端口实际上就是一个冲突域的结束点,每个冲突中时刻只能有一个节点发送数据包。网桥的所有端口都在同一个广播域内,因为每个节点都能收到广播包。
在Linux的实现版本中(本文先考虑STP 协议),主要数据结构如下:
逻辑网段:net_bridge
端口:net_bridge_port
CAM表:net_bridge_fdb_entry
统计数据和STP信息,
它们的关系图如下
网桥处理包遵循着以下几条原则:
-
在一个接口上接收到的包不会再在那个接口上发送这个数据包。
-
每个接收到的数据包都要学习其源MAC地址。
-
如果数据包是多播包或广播包,则要在同一个网段中除了接收端口外的其他所有端口发送这个数据包,如果上层协议栈对多播包感兴趣,则需要把数据包提交给上层协议栈。
-
如果数据包的目的MAC地址不能在CAM表中找到,则要在同一个网段中除了接收端口外的其他所有端口发送这个数据包。
-
如果能够在CAM表中查询到目的MAC地址,则在特定的端口上发送这个数据包,如果发送端口和接收端口是同一端口,则不发送。
阅读(2476) | 评论(0) | 转发(0) |