3.4 网桥和交换机


IEEE 802.1d 标准规定了网桥操作,交换机的本质是高性能网桥。网桥或交换机用于多个物理的链路层网络 或 成组的站。 每个网络单元(也包括每个交换机)有自己的 MAC地址。每个网桥经过一段时间对域外 MAC地址 “学习”后,最终每个交换机都会知道那个站可由那个端口到达。每个交换机基于端口的列表被储存在一张表(称为 过滤数据库)中。 当第一次打开一个交换机(网桥)时,它的数据库是空的,因此它不知道除自己外的任何站的位置。当它每次接收到一个目的地不是自己的帧时,它为除该帧到达的端口之外的所有端口做一个备份,并向所有端口发送这个帧的备份。如果 交换机未学习到站的位置,每个帧将会被交付到每个网段,这样会导致不必要的开销。学习能力可以显著降低开销,它是交换机和网桥的一个基本功能。 具体的例子详见P68-69 由于可能出现站移动、网卡更换、MAC地址改变或其他情况,所以就算网桥曾发现一个MAC 地址可通过某个端口访问,这个信息也不是永久正确的。 为了解决这个问题,在每次学习一个地址之后,网桥启动一个计时器 。在Linux 中,每个学习条目使用一个与网桥相关的固定时间。 当一个条目因为有效期满而被删除时,之后的帧将被发送到接收端口之外的所有端口(称为 洪泛),并更新过滤数据库中的这个条目。实际上,过滤数据库的使用和学习有利于优化性能,如果列表是空的,网络将花费更多开销,但仍能履行职责。  

3.4.1 生成树协议(Spanning Tree ProtocolSTP


当两个以上的网桥通过冗余的链路互链时,帧的洪泛可能导致帧永远循环的洪泛灾难。见P70 图3-12 STP 通过在每个网桥之间禁用某些端口来工作,这样可以避免拓扑环路(即两个网桥之间不允许出现重复路径),但如果拓扑结构未分区,则仍可以到达所有站。在数学上,一个生成树是一张图中所有节点和线的集合,从任何节点到其他节点有一条路径或路由,但是没有环路。STP 用于找出这图中的一棵树。 用于转发数据库时,STP必须处理以下情况,例如 网桥的启动和关闭、接口卡更换或MAC地址改变。显然这种变化会影响STP的运行,因此STP必须适应这些变化。这种适应通过交换一种称为 网桥协议数据单元BPDU)的帧来实现。同时,一个以太网可能有多棵生成树,如何确定那棵树适合转发那个帧,这基于每条链路和根网桥的 相关成本。  

3.4.1.1 端口状态和角色


为了理解STP 的基本操作,我们需要了解网桥端口的状态机,以及BPDU内容。网桥的端口可能有五个状态:1. 阻塞 2.侦听 3.学习 4.转发 5.禁用 。在正常的STP操作中,端口在1-4个主要状态之间转换。在阻塞状态下,帧不被转发,但一次拓扑变化或者超时可能转入侦听状态。转发状态是活跃的交换机端口承载数据流量的正常状态。 在初始化后,一个端口进入阻塞状态。在这种状态下,它不进行地址学习、数据转发或BPDU发送,但它会监控接收的BPDU,并在它需要被包含在将到达的根网桥的路径中的情况下,转换到转发状态。 在侦听状态下,改端口允许接收和发送BPDU,但不进行地址学习或数据转发。经过一个经典的15s的转发延迟,端口进入转发学习状态。这时,他被允许执行数据转发之外的所有操作。在进入转发状态并开始转发数据之前,需要等到另一个转发延迟。 相对于端口的状态机,每个端口都扮演一定的 角色。端口可扮演 根端口指定端口备用端口备份端口 等角色。根端口是生成树中位于指向根的线段终点的那些端口。 指定端口 是指处于转发状态,并与根项链段中路径成本最小的端口。备用端口 是指与根项链的段中成本更高的端口。它们不处于转发状态。 备份端口 是指连接到同一线段中作为同一网桥指定端口使用的端口,因此 备份端口可以轻易接管一个失效的端口,而不影响生成树拓扑的其余部分,但它不能再全部网桥失效的情况下提供一条道根的备用路径。  

3.4.1.2 BPDU结构


BPDU被放置在802帧的有效载荷区,并在网桥之间交换以建立生成树。重要字段包括 源、根节点、到根的成本和拓扑变化提示。 上图所示的BPDU格式适用于最初的STP,以及新的RSTP。在该图中,DST 、SRC 和 L/T(长度/类型)字段是携带BPDU的传统以太网(802.3)帧头部的一部分。3字节的LLC/SNAP 头部由802.1定义,并针对BPDU被设置为常数0x424203.并非素有的BPDU都用 LLC/SNAP封装,但这是一个常见选项。



协议(Prot)字段给出协议ID号,它被设置为0 。 版本(Vers)字段被设置为0或2,取决于使用STP还是RSTP。 类型(Type)字段的分配与版本类似。 标志(Flags)字段包含 拓扑变化(TC)和 拓扑变化确认(TCA),它由最初的802.1d标准定义。 附加位被定义为 建议(P)端口角色(00为未知,01为备用,10为根,11为定义)、学习(L)转发(F)协议 (A) 根ID字段给出发送方使用的根网桥标识符,即从网桥ID字段中获得MAC地址。这些ID字段都用一种特殊的方式编码,包括MAC地址之前的一个2字节的 优先级 字段。 PID字段是端口标识符和由发送帧给出的端口号,它被附在一个可配置的1字节的优先级字段(默认ox80)之后。 消息有效期(MsgA)字段指出消息有效期;最大有效期(MaxA)字段指出超时的最大期限。这个字段不像其他字段那样是固定值。当网桥发送一个BPDU时,它将该字段设置为0。网桥转发接收到的不是根端口帧,并将消息有效期加1,本质上来说相当于一个计数器,记录BPDU经过的网桥数量。 欢迎时间(Hello Time)字段指出配置帧的传输周期。 转发延迟字段指出处于学习和侦听状态的时间。所有有效期和时间字段在1/256秒内获得。



 

3.4.1.3 建立生成树


STP的第一个工作是选举根网桥。根网桥是在网络中标识最小的(优先级与MAC地址结合)的网桥。 当一个网桥初始化时,它假设自己是根网桥,并用自己的网桥ID作为根ID字段的值发送配置BPDU消息,如果他检测到一个ID跟小的网桥,则停止发送自己的帧,并积极与接收到的ID更小的帧构造下一步发送的BPDU。  

3.4.1.4 拓扑变化


STP的另一个重要工作是处理拓扑变化。虽然可以用前面所述的数据库有效期机制适应拓扑变化,但这是一种较差的方法,因为需要花费时间。 相反,STP采用一种方法检测拓扑变化,并通知他们所在的网络。在STP中,当一个端口进入阻塞或者转发状态时,将意味着拓扑发生变化。 当网桥检测到一个连接发生变化,它向根端口之外的所有端口发送 拓扑变化通知(TCN)BPDU,通知自己所在树种的父网桥,直到根网桥为止。树中通向根的下一个网桥发送通知的网桥确认 TCN BPDU,并将它们发送到根。当根接收到变化通知时,在后续的周期性配置消息中设置TC位。这种消息被网络中的每一个网桥转发,并被处于阻塞或者转发状态的端口接收。  

3.4.1.6 快速生成树协议


传统的STP问题之一是在拓扑变化之后,只能通过一定时间内未接收到BPDU来检测。 IEEE 改进了传统STP,它定义了采用了新名称的 快速生成树协议 (RSTP)。在RSTP中,对STP的主要改进是监视每一个端口的状态,并在故障后立即发送一个拓扑变化通知。另外RSTP使用BPDU的 标志字段 中的全部6位来支持网桥之间的协议以避免由计时器启动协议操作它将正常的STP端口状态由五个减少到三个(丢弃、学习、转发)RSTP的丢弃状态代替了传统的STP的禁止、阻塞、和侦听。并创建了一个 备用端口 的新角色由于 RSTP 只使用一种类型的 BPDU ,因此这里没有专门拓扑变化的 BPDU 。即  RSTP 的 BPDU 使用版本和类型号2而不是0。在 RSTP 中,检测到一次拓扑变化的交换机会发送一个表示拓扑变化的 BPDU,任何接收到它的交换机立即清除自己的过滤数据库。 RSTP 使边缘端口(只连接到端站的端口)和正常的生成树端口之间,以及点到点链路和共享链路之间都有区别。边缘端口和点到点链路上的端口通常不会形成循环,因此允许它们跳过侦听和学习状态,直接进入转发状态。点到点链路可根据接口操作模式来识别。如果这个接口运行在全双工模式下,则这条链路是点到点链路。 在普通的STP中,BPDU 通常由一个通知网桥或根网桥来转发。在RSTP中,BPDU为了”保持活跃”而有所有网桥来定期发送,以便确定相连的邻居是否正常运行。当检测一次拓扑变化时,通知网桥发送TC位被设置的BPDU,不仅到根网桥,而且到所有网桥。  

3.4.2 802.1ak:多注册协议


多注册协议(MRP)提供了在桥接局域网环境中的站之间注册属性的通用方法。同时还有两个特殊的MRP 应用程序,为MVRP(用于注册VLAN)和MMRP (用于注册组MAC地址)。MRP 代替了早期的GARP框架;MVRP和MMRP分别代替了旧的GVRP和GMRP协议。 在使用MVRP时,当一个站被配置为一个VLAN成员时,该信息被传输到它所有链接的交换机,并由该交换机将站加入VLAN通知其他交换机。这允许交换机根据站的VLAN ID 添加自己的过滤表,也允许VLAN拓扑变化不必通过STP而重新计算现有生成树。 而MMRP 是一个站注册其感兴趣的组MAC地址的方法这个信息可能被用于交换机组建端口,组播流量必须通过该端口来交付。如果没有这样的功能,交换机将不得不广播所有组播流量。MMRP是一个第二层协议,他与第三层的IGMP和MDL相似。这里将在后面讨论。