(BCM方案)Linux网桥的实现分析与使用_第1页
(BCM方案)Linux网桥的实现分析与使用_第2页
(BCM方案)Linux网桥的实现分析与使用_第3页
(BCM方案)Linux网桥的实现分析与使用_第4页
(BCM方案)Linux网桥的实现分析与使用_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LinuxLinuxLinuxLinuxLinuxLinux 网桥的实现和在网桥的实现和在网桥的实现和在网桥的实现和在网桥的实现和在网桥的实现和在 BCMBCMBCMBCMBCMBCM 中的应用中的应用中的应用中的应用中的应用中的应用 深圳市共进电子有限公司深圳市共进电子有限公司 版权所有版权所有 不得复制不得复制 20072007 年年 1010 月月 作者:陈万里作者:陈万里 目录目录 简介简介.2 2 1 1、LINUX 桥的概念桥的概念.4 4 1.11.1、生成树算法和协议(翻译、生成树算法和协议(翻译 802.1D802.1D).4 4 1.1.11.1.1、拓扑信息的传播、拓扑信

2、息的传播.6 6 1.1.21.1.2、拓扑结构的改变导致重配、拓扑结构的改变导致重配.7 7 1.1.31.1.3、通知拓扑改变、通知拓扑改变.7 7 1.1.41.1.4、端口状态(、端口状态(PortPort StatesStates).8 8 1.1.51.1.5、STPSTP 协议参数和时间值协议参数和时间值 .9 9 1.1.61.1.6、STPSTP 协议例子协议例子 .1212 1.21.2、理解生成树(、理解生成树(STPSTP)协议)协议 .1212 1.2.11.2.1、以太网交换机在以太网交换机在 MACMAC 层的体系结构层的体系结构.1212 1.2.21.2.2、

3、生成树协议生成树协议.1414 1.2.31.2.3 结论结论 .1717 1.31.3、桥用到的、桥用到的 LINUXLINUX 网络通知链网络通知链 .1717 1.41.4、生成树协议在、生成树协议在 LINUXLINUX 中的实现中的实现 .1717 2 2、桥代码中的重要数据结构、桥代码中的重要数据结构.1818 2.12.1、BR_CONFIG_BPDUBR_CONFIG_BPDU 结构结构.1818 2.22.2、NET_BRIDGENET_BRIDGE 结构结构.1919 2.32.3、NET_BRIDGE_PORTNET_BRIDGE_PORT 结构结构.2020 2.42.

4、4、NET_DEVICENET_DEVICE 结构结构.2121 2.52.5、NET_BRIDGENET_BRIDGE、NET_BRIDGE_PORTNET_BRIDGE_PORT、NET_DEVICENET_DEVICE 三个数据结构之间的关联三个数据结构之间的关联.2525 简介简介 LinuxLinux 网桥的实现和在网桥的实现和在 BCMBCM 中的应用中的应用主要分析了 linux2.4.x 内核的网 桥的实现方法,并且结合实际描述了 Broadcom 方案如何利用 linux 网桥,因为 Broadcom 方案用的是 linux2.6.x 内核,但是 linux2.6.x 内核在

5、桥代码中只是 多了 Ebtables 应用,其它并无变化,所以对于桥的研究在 linux2.4.x 内核中 和 linux2.6.x 内核中并无差别。 桥代码中很大一部分是 STP(spanning-tree protocol)协议的实现,此 文档也把 STP 协议(IEEE 802.1D)重要的部分翻译成了中文,并且也写了一些 一步一步帮助读者去理解 STP 协议的文档,相信结合原版协议能很快理解 STP 协议的工作方式和它在 linux 操作系统中怎样和桥其它相关代码结合在一起使 用的。 桥代码是在 linux 操作系统中实现的,所以用到了一些和 linux 操作系统 结合的很紧密的操作系

6、统相关的知识,本文也有相应的描述。 网桥,类似于中继器,连接局域网中两个或者多个网段。它与中继器的不 同之处就在于它能够解析它收发的数据,读取目标地址信息(以太网头中的 MAC 数据),并决定是否向所连接网络的其他网段转发数据包。为了能够决策 向那个网段发送数据包,网桥学习(learning)接收到的数据包的源源 MACMAC 地址, 在本地建立一个以 MAC 和端口为记录项的信息数据库,这就是网桥的工作原理。 1 1、LINUX 桥的概念桥的概念 1.11.1、生成树算法和协议(翻译、生成树算法和协议(翻译 802.1D802.1D) 这章描述的配置算法和协议将一个由多个桥连接的局域网(LA

7、N)的拓扑结 构缩减成一棵生成树。 Figure 8-1 是一个普通的多个桥连接的局域网的例子,Figure 8-2 是它的 逻辑拓扑结构。Figure 8-1 其中的一个桥作为根桥(RootRoot BridgeBridge)。每个 LAN 有 一个桥的端口向根桥转发数据并接收根桥发送的数据,这个端口就是这个 LAN 的指定端口(DesignatedDesignated PortPort),且这个桥也作为这个 LAN 的指定桥(DesignatedDesignated BridgeBridge)。根桥是整个拓扑结构的指定桥。如果桥的端口在转发状态那么距离根 桥最近的就是根端口,其它的是指定端

8、口,如果在桥上即不是作为根端口又不 是作为指定端口的桥端口不能进入转发状态。 稳定的拓扑结构由以下的条件决定 a)每一个桥的桥 ID(BridgeBridge IdentifiersIdentifiers)。 b)每一个桥的端口的路径价值(PathPath IdentifierIdentifier)。 c)每一个端口的端口 ID(PortPort IdentifierIdentifier)。 有最高优先级的桥 ID 作为根桥(数值越低优先级越高) ,每个桥端口都有一个 指定的路径价值,指定端口是到根桥路径价值最低的端口:如果两个端口路径 价值一样,桥 ID 最小的就作为指定端口。 1.1.11

9、.1.1、拓扑信息的传播、拓扑信息的传播 桥和桥之间发送一种叫做配置桥协议数据单元(Configuration BPDU)的 帧来计算拓扑结构。一个含有 BPDU 信息的 MAC 帧发送它的信息到这个拓扑结构 中的每个桥。BPDU 信息是不会被桥直接转发的,但是收到 BPDU 信息的桥能用 它来和自己的相关数据做比较并激励数据传输。 每一个 BPDU 信息包括传输 BPDU 信息的桥认为的根桥的桥 ID,从传输端口 到根桥的路径价值,传输 BPDU 信息的桥的 ID,传输 BPDU 信息的端口 ID,这些 信息允许一个收到信息的桥来决定是否这个传输端口能有更好的条件成为指定 端口和接收端口应该

10、成为根端口。 如下三个条件可以触发及时的传输信息到整个网络拓扑,以便决定桥端口 的状态: a)所有桥开始都认为自己是根桥,并在固定的时间间隔发送配置 BPDU 信息。 b)桥收到了一个认为它自己的根端口具有更好传输性能的配置信息,它会 传 输这个信息到这个网路拓扑中。 c)桥收到了次一等的配置消息,它会传输它自己的信息回复这条配置消息, 并让整个拓扑都收到这个消息。 1.1.21.1.2、拓扑结构的改变导致重配、拓扑结构的改变导致重配 为了允许拓扑结构的重新配置,在整个 LAN 的网络拓扑中传输的拓扑信息 有一个有限的时间生命。配置信息从根发出来以后时间就开始递减。每个桥存 储这个信息并监视它

11、的变化。 在一个稳定的拓扑结构中根桥在固定的一个时间间隔传输配置 BPDU 以致于 拓扑信息不会超时而导致重配。 1.1.31.1.3、通知拓扑改变、通知拓扑改变 拓扑结构在一些情况下有可能重新配置,这样桥可能需要更新它的 FDB(FilteringFiltering DatabaseDatabase)信息。生成树算法和协议提供了一种机制来检查拓扑 改变并通知根桥,并且根桥在收到拓扑改变通知后也会通知网络拓扑中的所有 桥。当所有桥收到了网络拓扑改变通知以后它们会缩短 FDB(FilteringFiltering DatabaseDatabase)中动态项的超时时间。如下两图所示: 1.1.41

12、.1.4、端口状态(、端口状态(PortPort StatesStates) 端口状态改变的另一种表示方法: 1.1.51.1.5、STPSTP 协议参数和时间值协议参数和时间值 这章讲解在桥之间传输的 BPDU 信息的各个参数和时间值,这些参数主要被 包含在两类 BPDU 中:配置 BPDU 和拓扑改变 BPDU,而各个参数的维护分别在桥 和桥的端口中。 1.1.5.11.1.5.1、配置、配置 BPDUBPDU 参数参数 a a)RootRoot IdentifierIdentifier STP 网络拓扑中的根桥的唯一身份(根桥(根桥 IDID) b b)RootRoot PathPath

13、 CostCost 到根桥的路径价值 c c)BridgeBridge IdentifierIdentifier STP 网络拓扑中的桥的唯一身份(桥(桥 IDID) d d)PortPort IdentifierIdentifier 在每个桥中端口的编号 e e)MessageMessage AgeAge 非根桥记录的收到根桥发送的 BPDU 信息到再一次收到根桥发送 BPDU 信息 的这段时间。如果 Message Age 超过了 Max Age(看下面介绍)(看下面介绍)桥将丢弃先前 的配置信息,并进行重配。 f f)MaxMax AgeAge 这个值被根桥设置。表示各个桥存储配置信息的

14、最长时间。 g g)HelloHello TimeTime 根桥产生配置 BPDU 信息的时间间隔。 h h)ForwardForward DelayDelay 端口状态到转发态所经历的时间。这个参数也被用来作为 FDB 超时的时间。 i i)TopologyTopology ChangeChange AcknowledgmentAcknowledgment 响应拓扑改变通知。 j j)TopologyTopology ChangeChange 为了通知所有桥这个网络拓扑结构有变化。 1.1.5.21.1.5.2、拓扑改变通知、拓扑改变通知 BPDUBPDU 参数参数 拓扑改变通知没有任何参数

15、。 1.1.5.31.1.5.3、桥参数、桥参数 a a)DesignatedDesignated RootRoot 被桥认为是根桥的桥 ID。 b b)RootRoot PathPath CostCost 从非根桥到根桥的路径价值的总和。 c c)RootRoot PortPort 从非根桥到根桥路径价值最低的端口成为根端口,如果几个端口路径价值 一样则优先级越高的端口成为根端口。 d d)MaxMax AgeAge 在协议的配置信息被丢弃之前收到的配置信息保留的时间。 e e)HelloHello TimeTime 对一个想变成桥或者是根桥的桥在固定的时间发送的配置 BPDU 信息。 f

16、f)ForwardForward DelayDelay 从 Listening 状态到 Learning 状态和从 Learning 状态到 Forwarding 状态 花费的时间。 g)Bridgeg)Bridge IdentifierIdentifier 网络中传输的配置 BPDU 的桥的唯一编号。 h)Bridgeh)Bridge MaxMax AgeAge 桥作为根或想成为根桥的桥标识的它作为根桥的最大年龄。 i)Bridgei)Bridge HelloHello TimeTime 非根桥向根桥发送 TCN(TopologyTopology ChangeChange Notificat

17、ionNotification)BPDU 的时间间隔。 j)Bridgej)Bridge ForwardForward DelayDelay 和上面介绍的 Forward Delay 值一样。 k)Topologyk)Topology ChangeChange DetectedDetected 用来标识网络拓扑结构改变的布尔变量。 l)Topologyl)Topology ChangeChange 参数设置表示拓扑改变。 m)Topologym)Topology ChangeChange TimeTime 根桥产生配置消息指明拓扑改变的时间间隔。 n)Holdn)Hold TimeTime 在

18、这个时间间隔至少应该收到一个配置 BPDU 信息。 1.1.5.41.1.5.4、桥时间参数、桥时间参数 a)Helloa)Hello TimerTimer 根桥定时传输配置 BPDU 信息的时间间隔。 b)Topologyb)Topology ChangeChange NotificationNotification TimerTimer 如果没收到拓扑改变回应消息便会定时发送拓扑改变通知。 c)Topologyc)Topology ChangeChange TimeTime 定时发送拓扑改变通知来通知桥进行重配。 1.1.5.51.1.5.5、端口参数、端口参数 a)Porta)Port

19、IdentifierIdentifier 桥的端口的编号。 b)Portb)Port StateState 标识各个端口行为的参数。 c)Pathc)Path CostCost 从这个端口到根桥的路径价值。 d)Designatedd)Designated RootRoot 根桥的桥 ID。 e)Designatede)Designated CostCost 从这个端口到根桥的路径价值。 f)Designatedf)Designated BridgeBridge 表示相对于这个端口的指定桥的桥 ID。 g)Designatedg)Designated PortPort 指定桥中和它交互的端口的

20、 ID。 h)Topologyh)Topology ChangeChange AcknowledgeAcknowledge 参数设置来回应拓扑改变通知。 i)Configurationi)Configuration PendingPending 参数设置表示在 Holdtimer 超时后应该传输配置 BPDU 性息。 j)Changej)Change DetectionDetection EnabledEnabled 表示是否理会拓扑改变通知。 1.1.5.61.1.5.6、端口时间参数、端口时间参数 a)Messagea)Message AgeAge TimerTimer 表示超时丢弃协议信

21、息的时间。 b)Forwardb)Forward DelayDelay TimerTimer 和端口状态改变的时间值有关。 c)Holdc)Hold TimerTimer 在这个时间间隔至少应该收到一个配置 BPDU 信息。 1.1.61.1.6、STPSTP 协议例子协议例子 1.21.2、理解生成树(、理解生成树(STPSTP)协议)协议 生成树算法和协议是自动生成网络拓扑结构的基础,本节只阐述了生成树 算法和协议的内容,主要是帮助读者理解协议的原理。 以太网交换机在第二层即 MAC 层必须具有路由功能。目前普遍使用的 MAC 层路由方式是 IEEE802.1 组织发布的标准:基于生成树算

22、法的路由。在局域网 内的交换机执行了生成树算法以后,会组成一个生成树动态拓扑结构,该拓扑 结构使局域网内任意两个工作站之间不存在环路(也可以称做回路),以防止 由此产生的局域网广播风暴。同时,生成树算法还负责监测物理拓扑结构的变 化,并能在拓扑结构发生变化之后建立新的生成树。例如当一个交换机坏了或 某一条数据通路断了后,能提供一定的容错能力而重新配置生成树的拓扑结构。 交换机根据生成树动态拓扑结构的状态信息来维护和更新 MAC 路由表,最终实 现 MAC 层的路由。 1.2.11.2.1、以太网交换机在以太网交换机在 MACMAC 层的体系结构层的体系结构 以太网交换机在 MAC 层的功能主要

23、是实现 LAN 的互连。根据 IEEE802.1D 协议的规定,在 MAC 层工作的体系结构必须包含以下内容: (1)一个用于连接交换机端口的 MAC 转发实体;(2)至少两个端口; (3)高层协议实体(逻辑链路控制(逻辑链路控制(LogicalLogical LinkLink ControlControl 或简称或简称 LLCLLC)是局域网中数据链)是局域网中数据链 路层的上层部分,路层的上层部分,IEEEIEEE 802.2802.2 中定义了逻辑链路控制协议中定义了逻辑链路控制协议)。如图 1 所示。 MAC 转发实体主要实现交换机不同端口间的内部通信。该实体存储各个端 口的工作状态并

24、维护一个过滤数据库。数据库中存放了一张 MAC 地址表(端口和(端口和 macmac 的对应关系)的对应关系),用以实现 MAC 层的路由。当数据帧从一个端口的底层服务进程 传上来时,MAC 实体首先判断目的端口的工作状态,如果目的端口没有被阻塞 或不是在 DISABLE 状态,MAC 转发实体将依据 MAC 地址表的对应关系将该帧从 目的端口转发出去。同时 MAC 转发实体还可以进行过滤、记录 MAC 地址等操作。 交换机端口的功能是从与其相连的 LAN 上接收或传送数据。端口的状态由 生成树算法规定,包括转发(FORWARDINGFORWARDING)、学习(LEARNINGLEARNIN

25、G)、监听(LISTENINGLISTENING)、阻 塞(BLOCKINGBLOCKING)和禁止(DISABLEDDISABLED)状态。(阻塞:所有端口以阻塞状态启动以防止回路,由生成阻塞:所有端口以阻塞状态启动以防止回路,由生成 树确定哪个端口转换到转发状态,处于阻塞状态的端口不转发数据但可接受树确定哪个端口转换到转发状态,处于阻塞状态的端口不转发数据但可接受 BPDUBPDU;监听:不发送接收数;监听:不发送接收数 据,接收并发送据,接收并发送 bpdubpdu,不进行地址学习(临时状态),不进行地址学习(临时状态) ;学习:不接收或转发数据,接收并发送;学习:不接收或转发数据,接收

26、并发送 bpdubpdu,开始,开始 地址学习地址学习 MACMAC 地址和端口对应表(临时状态)地址和端口对应表(临时状态) ;转发:端口能转送和接受数据);转发:端口能转送和接受数据) 高层协议实体位于 LLC(逻辑链路控制逻辑链路控制 LogicalLogical LinkLink ControlControl)层,主要用于计算和 配置 LAN 的拓扑结构。代码实现的生成树协议算法就是运行在该协议实体内, 用来实现 MAC 层的路由。在运行生成树算法时,高层协议实体可以直接调用 MAC 转发实体提供的服务,并能读取或更改 MAC 实体数据库中维护的信息,如 从 MAC 实体中读取或更改某

27、端口的状态信息等。 在运行生成树算法时,交换机的高层协议实体将使用一个统一的组地址 01-80-C2-00-00-00(全部多播地址从(全部多播地址从 01-00-5e-00-00-0001-00-5e-00-00-00 到到 01-00-5e-7f-ff-ff01-00-5e-7f-ff-ff)作为目的 MAC 地址,该数据被称为 BPDU(桥协议数据单元)。BPDU 中携带了实现生成树 算法的有关信息。在实现生成树算法时,从端口接收上来 BPDU,由 LLC 层的服 务进程将其传给交换机协议实体。在执行了生成树算法以后,交换机的协议实 体将根据算法的结果更新端口的状态信息并更新过滤数据库,

28、以决定交换机端 口的工作状态(阻塞或转发等),从而建立生成树拓扑结构。 1.2.21.2.2、生成树协议生成树协议 1.2.2.11.2.2.1、生成树协议介绍生成树协议介绍 生成树协议基于以下几点:(1)有一个唯一的组地址(01-80-C2-00-00- 00)标识一个特定 LAN 上的所有的交换机。这个组地址能被所有的交换机识别; (2)每个交换机有一个唯一的标识(Brideg Identifier);(3)每个交换机 的端口有一个唯一的端口标识(Port Identifier)。对生成树的配置进行管理 还需要:对每个交换机分配一个相对的优先级;对每个交换机的每个端口分配 一个相对的优先级

29、;对每个端口分配一个路径花费。 具有最高优先级的交换机被称为根(root)交换机。每个交换机端口都有 一个根路径花费,根路径花费是该交换机到根交换机所经过的各个跳段的路径 花费的总和。一个交换机中根路径花费的值为最低的端口称为根端口,若有多 个端口具有相同的根路径花费,则具有最高优先级(数值较低)(数值较低)的端口为根端口。 在每个 LAN 中都有一个交换机被称为指定(designateddesignated)交换机,它属于该 LAN 中根路径花费最少的交换机。把 LAN 和指定交换机连接起来的端口就是 LAN 的指定端口(designateddesignated portport)。如果指定

30、交换机中有两个以上的端口连在这个 LAN 上,则具有最高优先级的端口被选为指定端口。拓扑结构如图 2 所示。 由于交换机 A 具有最高优先级(桥标识最低)(桥标识最低),被选为根交换机,所以交换机 A 是 LAN A 和 LAN B 的指定交换机;假设交换机 B 的根路径花费为 6,交换机 C 的根路径花费为 4,那么交换机 C 被选为 LAN C 的指定交换机,亦即 LAN C 与 交换机 A 之间的消息通过交换机 C 转发,而不是通过交换机 B。LAN C 与交换机 B 之间的链路是一条冗余链路。 1.2.2.21.2.2.2、BPDUBPDU 编码编码 交换机之间定期(默认默认 2 2

31、秒秒)发送 BPDU 包,交换生成树配置信息,以便能够 对网络的拓扑、花费或优先级的变化做出及时的响应。BPDU 分为两种类型,包 含配置信息的 BPDU 包称为配置 BPDU(Configuration BPDU),当检测到网络 拓扑结构变化时则要发送拓扑变化通知 BPDU(Topology Change Notificationn BPDU)。配置 BPDU 编码如图 3 所示。 拓扑变化通知 BPDU 编码如图 4 所示。 对于配置对于配置 BPDUBPDU,超过,超过 3535 个字节以外的字节将被忽略掉;对于拓扑变化通知个字节以外的字节将被忽略掉;对于拓扑变化通知 BPDUBPDU,

32、超过,超过 4 4 个字节以外的字节将被忽略掉。个字节以外的字节将被忽略掉。 1.2.2.31.2.2.3、形成一棵生成树的决定要素、形成一棵生成树的决定要素 1.2.2.3.11.2.2.3.1、决定根交换机、决定根交换机 a、最开始所有的交换机都认为自己是根交换机最开始所有的交换机都认为自己是根交换机; b、交换机向与之相连的 LAN 广播发送配置 BPDU,其 root_id 与 bridge_id 的值相同; c、当交换机收到另一个交换机发来的配置 BPDU 后,若发现收到的配置 BPDU 中 root_id 字段的值大于该交换机中 root_id 参数的值,则丢弃该帧, 否则更新该交

33、换机的 root_id、根路径花费 root_path_cost 等参数的值, 该交换机将以新值继续广播发送配置 BPDU。 1.2.2.3.21.2.2.3.2、决定根端口、决定根端口 a、一个交换机中根路径花费的值为最低的端口称为根端口。 b、若有多个端口具有相同的最低根路径花费,则具有最高优先级的端口为 根端口。若有两个或多个端口具有相同的最低根路径花费和最高优先级, 则端口号最小的端口为默认的根端口。 1.2.2.3.31.2.2.3.3、决定、决定 LANLAN 的指定交换机的指定交换机 a、开始时,所有的交换机都认为自己是 LAN 的指定交换机。 b、当交换机接收到具有更低根路径花

34、费的(同一个 LAN 中)其他交换机发 来的 BPDU,该交换机就不再宣称自己是指定交换机。如果在一个 LAN 中, 有两个或多个交换机具有同样的根路径花费,具有最高优先级的交换机被 先定为指定交换机。在一个 LAN 中,只有指定交换机可以接收和转发帧, 其它交换机的所有端口都被置为阻塞状态。 c、如果指定交换机在某个时刻收一了 LAN 上其他交换机因竞争指定交换机 而发来的配置 BPDU,该指定交换机将发送一个回应的配置 BPDU,以重新确 定指定交换机。 1.2.2.3.41.2.2.3.4、决定指定端口、决定指定端口 a、LAN 的指定交换机中与该 LAN 相连的端口为指定端口。若指定交

35、换机有 两个或多个端口与该 LAN 相连,那么具有最低标识的端口为指定端口。 b、除了根端口和指定端口外,其他端口都将置为阻塞状态。这样,在决定 了根交换机、交换机的根端口、以及每个 LAN 的指定交换机和指定端口后, 一个生成树的拓扑结构也就决定了。 1.2.2.3.51.2.2.3.5、拓扑变化、拓扑变化 a、拓扑信息在网络上的传播有一个时间限制,这个时间信息包含在每个配 置 BPDU 中,即为消息时限。每个交换机存储来自 LAN 指定端口的协议信息, 并监视这些信息存储的时间。在正常稳定状态下,根交换机定期发送配置 消息以保证拓扑信息不超时。如果根交换机失效了,其他交换机中的协议 信息就

36、会超时,新的拓扑结构很快在网络中传播。 b、当某个交换机检测到拓扑变化,它将向根交换机方向的指定交换机发送 拓扑变化通知 BPDU,以拓扑变化通知定时器的时间间隔定期发送拓扑变化 通知 BPDU,直到收到了指定交换机发来的确认拓扑变化信息(这个确认信 号在配置 BPDU 中,即拓扑变化标志位置位),同时指定交换机重复以上过 程,继续向根交换机方向的交换机发送拓扑变化通知 BPDU。这样,拓扑变 化的通知最终传到根交换机。根交换机收到了这样一个通知,或其自身改 变了拓扑结构,它将发送一段时间的配置 BPDU,在配置 BPDU 中拓扑变化标 志位被置位。所有的交换机将会收到一个或多个配置消息,并使

37、用转发延 迟参数的值来老化过滤数据库中的地址。所有的交换机将重新决定根交换 机、交换机的根端口、以及每个 LAN 的选取交换机和选取端口,这样生成 树的拓扑结构也就重新决定了。 1.2.31.2.3 结论结论 按照如上的算法描述能很快理解 Linux 操作系统生成树协议的源代码实现, 并且能理解生成树协议的工作原理。想要更全面的了解生成树协议必须去 阅读 802.1D 协议文档。 1.31.3、桥用到的、桥用到的 LINUXLINUX 网络通知链网络通知链 在 Linux 内核中,大多数内核子系统都是相互独立的,但是,某个子系统 可能对其他子系统产生或者检测到的事件感兴趣,为了满足 Linux

38、 内核子系统 之间交互的需求,linux 使用了通知链表机制Linux Notifer。 Linux 桥的代码中就注册了一个 br_device_event()函数来得知它感兴趣的 事件并做相应的处理,注册事件如下描述: NETDEV_CHANGEMTUNETDEV_CHANGEMTU:表示 MTU(Maximum Transfer Unit,最大传输单元) 已经改变。 NETDEV_CHANGEADDRNETDEV_CHANGEADDR:表示网络设备硬件地址已经改变。 NETDEV_CHANGENETDEV_CHANGE:通知网络设备已改变其状态。 NETDEV_DOWNNETDEV_DOW

39、N:停止网络设备,作为该消息的结果,所有对网络设备的引用 都必须删除。 NETDEV_UPNETDEV_UP:激活网络设备(通过 dev_open()函数) 。 NETDEV_UNREGISTERNETDEV_UNREGISTER:通知网络驱动程序已经被删除。 1.41.4、生成树协议在、生成树协议在 LINUXLINUX 中的实现中的实现 生成树协议的核心:生成树协议的核心:rememberremember thatthat thethe spanningspanning treetree isis calculatedcalculated basedbased onon thethe se

40、lectionselection ofof thethe treestrees rootroot。 在 linux 操作系统中,桥是一个虚拟设备虚拟设备。除非它绑定了一个或多个真实 的设备,否则它不能接收和转发数据。因此在创建桥的时候,必须告诉桥那个 真实的设备从属于这个桥。桥就类似于一个管理工具,管理着从属于它的真实 接口。 1.4.11.4.1、桥使用的重要数据结构:、桥使用的重要数据结构: struct mac_addr 桥的唯一身份,mac 地址。 struct bridge_id 生成树对桥的一个编号。 struct net_bridge_mc_fdb_entry 转发数据库中的一项

41、。这是被桥学习到的 mac 地址。 struct net_bridge_port 一个从属于桥的真实设备在这里被定义为桥端口。 struct net_bridge 桥设备信息。这个结构会附加在 linux 系统中的 net_device 网络管理设 备数据结构上。这个结构保存了桥的一些私有信息。 struct br_config_bpdu 一种 bpdu 数据类型。 1.4.2、桥代码初始化、桥代码初始化 桥代码作为模块被编译进内核,因为桥的创建和端口的绑定都是在应用层 完成的,所有内核桥代码的初始化只注册桥的回调函数和为转发表分配内存空 间,并描述如下: 为转发数据库创建一个 slab ca

42、che(一块内存区)。 初始化 br_ioctl_hook 函数指针,为应用层输入的各种 ioctl 命令做解 释。 初始化 handle_frame_hook 函数指针,为处理驱动进来的 BPDU 包。 注册网络通知链,并对感兴趣的事件做相应的处理。 我们的系统支持 Bridging-Firewalling,所以由 br_netfilter_init 完 成相应的 Ebtables 初始化工作。 1.4.3、桥代码中的重要数据结构、桥代码中的重要数据结构 1.4.3.1、BR_CONFIG_BPDU 结构结构 structstruct br_config_bpdubr_config_bpdu

43、 unsignedunsignedtopology_change:1topology_change:1;/拓朴改变标志 unsignedunsignedtopology_change_ack:1topology_change_ack:1;/拓朴改变回应标志 bridge_idbridge_idrootroot;/根 ID,用于会聚后的网桥网络中,所有配置 BPDU 中的该字段都应该具有相同值(同 VLAN) ,又可分为两个 BID 子字段:网桥 优先级和网桥 MAC 地址 intint root_path_costroot_path_cost;/路径开销,通向有根网桥(Root Bridge)

44、的所有链路的积累资本 bridge_idbridge_id bridge_idbridge_id;/创建当前 BPDU 的网桥 BID。对于单交换机 (单个 VLAN)发送的所有 BPDU 而言,该字段值都相同,而对于交换机与 交换机之间发送的 BPDU 而言,该字段值不同) port_idport_idport_idport_id;/端口 ID,每个端口值都是唯一的。端口 1/1 值 为 08001,而端口 1/2 值为 08002 intintmessage_agemessage_age;/记录 Root Bridge 生成当前 BPDU 起源信 息的所消耗时间 intintmax_age

45、max_age;/保存 BPDU 的最长时间,也反映了拓朴变化通 知(Topology Change Notification)过程中的网桥表生存时间情况 intinthello_timehello_time;/指周期性配置 BPDU 间的时间 intintforward_delayforward_delay;/用于在 Listening 和 Learning 状态的 时间,也反映了拓朴变化通知(Topology Change Notification)过程中 的时间情况 1.4.3.2、NET_BRIDGE 结构结构 structstruct net_bridgenet_bridge rwl

46、ock_trwlock_tlocklock; structstruct net_bridge_portnet_bridge_port*port_list*port_list; structstruct net_devicenet_devicedevdev; structstruct net_device_statsnet_device_statsstatisticsstatistics; rwlock_trwlock_thash_lockhash_lock; structstruct net_bridge_fdb_entrynet_bridge_fdb_entry*hashBR_HASH_SI

47、ZE*hashBR_HASH_SIZE; structstruct timer_listtimer_listticktick; /*/* STPSTP */*/ bridge_idbridge_iddesignated_rootdesignated_root;/初始化时候因为每一个桥都认为自己 是根桥,所以这个值在初始化时候被赋值成当前网桥结构的网桥 ID;最终 它被赋值成此桥根端口所指向的根桥。 intintroot_path_costroot_path_cost;/初始化时候因为每一个桥都认为自己 是根桥,所以这时候到根桥的路径价值为 0;最终它被赋值成? intintroot_portr

48、oot_port;/初始化时候因为每一个桥都认为自己是根桥 (根桥是没有根端口的) ,所以这个根端口被赋值成 0(0 表示没有对应端 口,因为桥的端口是从 1 开始编号) ;最终它被赋值成此桥根端口的 port_no。 intintmax_agemax_age;/初始化时候被赋值成 20*HZ intinthello_timehello_time;/初始化时候被赋值成 2*HZ intintforward_delayforward_delay;/初始化时候被赋值成 15*HZ bridge_idbridge_idbridge_idbridge_id;/初始化时候初始化成创建当前网桥结构的网 桥

49、 ID,初始化时候桥优先级默认为 32768,mac 地址为全 0 intintbridge_max_agebridge_max_age;/初始化时候被赋值成 20*HZ intintbridge_hello_timebridge_hello_time;/初始化时候被赋值成 2*HZ intintbridge_forward_delaybridge_forward_delay;/初始化时候被赋值成 15*HZ unsignedunsignedstp_enabled:1stp_enabled:1;/初始化时候被赋值成 0 unsignedunsignedtopology_change:1topo

50、logy_change:1;/初始化时候被赋值成 0 unsignedunsignedtopology_change_detected:1topology_change_detected:1;/初始化时候被赋值成 0 structstruct br_timerbr_timerhello_timerhello_timer; structstruct br_timerbr_timertcn_timertcn_timer; structstruct br_timerbr_timertopology_change_timertopology_change_timer; structstruct br_

51、timerbr_timergc_timergc_timer; intintageing_timeageing_time;/初始化时候被赋值成 300*HZ intintgc_intervalgc_interval;/初始化时候被赋值成 4*HZ 1.4.3.3、NET_BRIDGE_PORT 结构结构 structstruct net_bridge_portnet_bridge_port structstruct net_bridge_portnet_bridge_port*next*next; structstruct net_bridgenet_bridge*br*br; structst

52、ruct net_devicenet_device*dev*dev; intintport_noport_no;/桥端口在桥设备中的编号, port_no 编号是从 1-254 /*/* STPSTP */*/(注意:初始化时候因为每一个桥都认为自己是根桥,所以桥的(注意:初始化时候因为每一个桥都认为自己是根桥,所以桥的 每一个端口都被认为是指定端口)每一个端口都被认为是指定端口) port_idport_idport_idport_id;/初始化时候初始化成高 8 位是 priority,低 8 位是 port_no intintstatestate;/初始化时候状态是 BR_STATE_DISABLED intintpath_costpath_cost;/初始化时候初始化以太网的路径价 值是 100 bridge_idbridge_iddesignated_rootdesignated_root;/初始化时候初始化成此端口 对应的桥的 designated_root(初始化时候因为每一个桥都认为自己是根桥,所以这个值(初始化时候因为每一个桥都认为自己是根桥,所以这个值 在初始化时

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论