跳过导航链接 | |
退出打印视图 | |
管理 Oracle Solaris 11.1 网络性能 Oracle Solaris 11.1 Information Library (简体中文) |
网桥用于连接不同的网段,是两个节点之间的通路。不同网段通过网桥连接后,连接的网段进行通信时,就如同是一个网段一样。桥接是在网络栈的数据链路层 (L2) 中实现的。网桥使用包转发机制将子网连接在一起。
虽然桥接和路由都可用于分发关于网络中资源位置的信息,但它们在多个方面存在区别。路由在 IP 层 (L3) 实现并使用路由协议。数据链路层不使用路由协议,而通过检查连接到网桥的链路中接收的网络通信流量确定转发包的目的地。
收到包后,将检查其源地址。包从某个节点被发送到接收该包的链路,包的源地址与该节点相关联。此后,当接收的包使用同一地址作为目标地址时,网桥将包通过链路转发到该地址。
与源地址关联的链路可能是连接到桥接网络中另一个网桥的中间链路。随着时间的推移,桥接网络中所有网桥都将“学会”通过哪个链路向给定的节点发送包。因此,包的目标地址用于通过逐跳桥接的方式将包导向其最终目的。
本地“链路断开”通知指示给定的链路上的所有节点都不再可访问。在此情况下,到该链路的包转发将停止,而通过该链路的所有转发条目将被清除。随时间的推移,还将清除早期转发条目。当恢复一个链路时,此链路上接收的包被视为新包。基于包源地址的“学习”过程再次开始。通过此过程,当该地址用作目标地址时,网桥能够通过该链路正确转发包。
要将包转发到目的地,网桥必须以混杂模式侦听连接到该网桥的每个链路。以混杂模式侦听导致网桥容易发生转发循环,发生转发循环时,包不停地以全线速循环。因此,桥接使用生成树协议 (Spanning Tree Protocol, STP) 机制防止网络循环使子网不可用。
除了对网桥使用 STP 和快速生成树协议 (Rapid Spanning Tree Protocol, RSTP) 之外,Oracle Solaris 还支持多链路透明互连 (Transparent Interconnection of Lots of Links, TRILL) 保护增强。缺省情况下使用 STP,但您可以通过为桥接命令指定 -P trill 选项来使用 TRILL。
通过将网络中的各个节点连接到一个单独的网络,使用网桥配置简化了对这些节点的管理。采用通过网桥连接这些区段的方式,所有节点都可共享单个广播网络。因此,通过使用网络协议(如 IP)而不是路由器来跨网段转发通信,每个节点都可以访问其他节点。如果不使用网桥,就必须配置 IP 路由以允许节点之间的 IP 通信转发。
图 4-1 简单的桥接网络
上图显示了一个简单的桥接网络配置。网桥 goldengate 是一个已配置了桥接的 Oracle Solaris 系统。系统 sanfrancisco 和 sausalito 物理连接到该网桥。网络 A 使用一个集线器,该集线器一侧物理连接到网桥,另一侧连接到计算机系统。网桥端口是链路,例如 bge0、bge1 和 bge2。
桥接的网络可以形成环,将多个网桥物理连接在一起。这种配置在网络中很常见。这种类型的配置可能导致因旧包无休止地在环中循环而使网络链路饱和的问题。为了防止出现这种循环情况,Oracle Solaris 网桥实现 STP 和 TRILL 协议。请注意,大多数硬件网桥还实现 STP 循环保护。
下图显示配置成一个环的桥接网络。此配置显示三个网桥。两个系统物理连接到 westminster 网桥。一个系统物理连接到 waterloo 网桥。一个系统物理连接到 tower 网桥。网桥通过网桥端口彼此物理连接。
图 4-2 桥接的网络环
当 STP 或 RSTP 用于循环保护时,通过防止循环中的一个连接转发包,降低了出现物理循环的风险。图 4-2 显示 westminster 和 tower 网桥之间的物理链路不用于转发包。
请注意,因为采用关闭可用物理链路来执行循环保护的方式,STP 和 RSTP 会消耗您的带宽。
与 STP 和 RSTP 不同,TRILL 不通过关闭物理链路来防止出现循环。相反,TRILL 计算网络中的每个 TRILL 节点的最短路径信息,并使用该信息将包转发到各个目的地。
因此,TRILL 使系统可以保持所有链路始终处于使用状态。循环不是问题,因为采用了 IP 处理循环的方式来处理循环,即 TRILL 根据需要创建路由并使用转发跳数限制来避免出现导致瞬时循环状态的问题。
注意 - 请勿在 SPARC 平台上设置 local-mac-address?=false。如果这样做,系统会错误地对同一个网络中的多个端口使用同一 MAC 地址。 |
注意 - 如果要求最高级别的性能,请不要将链路配置到网桥中。桥接要求底层接口处于混杂模式下,而该模式会禁用对硬件、驱动程序和系统其他层的多种重要优化。禁用这些性能增强功能是桥接机制不可避免的结果。 如果系统中的某些链路不是桥接的,因而不会受到这些限制,您就可以在该系统中使用网桥。这些性能问题只影响那些被配置为网桥的一部分的链路。 |
有关 STP 的信息,请参见 IEEE 802.1 D-1998。有关 RSTP 的信息,请参见 IEEE 820.1Q-2004。有关 TRILL 的信息,请参见 Internet 工程任务组 (Engineering Task Force, IETF) TRILL 草稿。
以下链路属性可以通过 dladm show-linkprop 命令查看并通过 dladm set-linkprop 和 reset-linkprop 命令修改:
为通过某链路发送或接收的不带标记的包定义缺省虚拟局域网 (virtual local area network, VLAN) ID。有效值从 0 到 4094。缺省值为 1。只有非 VLAN 和非虚拟网络接口卡 (network interface card, VNIC) 类型的链路具有此属性。将此值设置为 0 将禁用以该端口为转发目的地或源的不带标记的包的转发。(这是一个 MAC 属性。)
注 - 此属性还在桥接范围之外使用,用于指定链路的 IEEE 端口 VLAN 标识符 (port VLAN identifier, PVID)。当 default_tag 非零时,不能在链路上创建具有相同 ID 的 VLAN,因为基本链路本身自动表示 PVID。
例如,如果 PVID 在 net0 上设置为 5,则无法在 net0 上创建 ID 为 5 的 VLAN。在这种情况下,要指定 VLAN 5,请使用 net1。
不能将 default_tag 设置为与该链路上创建的任何现有 VLAN 的 ID 相同。例如,以下命令在 net0 上创建 VLAN 22:
# dladm create-vlan -l net0 -v 22 myvlan0
在这种情况下,不能将 default_tag 设置为 22,因为这将使 net0 和 myvlan0 表示同一个 VLAN。
通过将 default_tag 设置为 0,您可以使 net0 上不带标记的包与任何 VLAN 都不关联。这样可以防止此类包被已配置的网桥转发。
启用和禁用通过网桥的通信转发。除了 VNIC 链路外的所有链路都具有此属性。有效值是 1 (true) 和 0 (false)。缺省值为 1。禁用通信转发时,与链路实例关联的 VLAN 不会通过网桥转发通信。禁用转发相当于传统网桥中的从“允许的组”删除 VLAN。这意味着从本地客户端到底层链路的基于 VLAN 的 I/O 将继续,但不执行基于网桥的转发。
启用和禁用 STP 和 RSTP。有效值是 1 (true) 和 0 (false)。缺省值是 1,这将启用 STP 和 RSTP。当该属性设置为 0 时,链路不使用 STP 或 RSTP,并始终处于转发模式下。转发模式使用网桥协议数据单元(Bridge Protocol Data Unit, BPDU)保护。当您要配置连接到结束节点的点对点链路时,请禁用 STP 和 RSTP。只有非 VLAN 和非 VNIC 类型的链路才具有此属性。
表示与使用此链路对应的 STP 和 RSTP 成本值。有效值介于 1 至 65535 之间。缺省值为 0,用于指示成本由链路类型自动计算。以下值分别表示几种链路类型的成本:100 对应 10 兆位/秒,19 对应 100 兆位/秒,4 对应 1 千兆位/秒,2 对应 10 千兆位/秒。
指定该端口是否连接到其他网桥。有效值是 1 (true) 和 0 (false)。缺省值为 1。如果该属性设置为 0,守护进程会假定端口连接到其他网桥(即使检测不到任何类型的 BPDU)。
指定连接模式类型。有效值为 true、false 和 auto。缺省值是 auto,它会自动发现点对点连接。指定 true 可强制采用点对点模式。指定 false 可强制采用正常多点模式。
设置 STP 和 RSTP 端口优先级值。有效值介于 0 至 255 之间。缺省值为 128。STP 和 RSTP 端口优先级值用于附加到 PVID 之前来确定网桥的首选根端口。该数值越低,优先级越高。
使用 dladm create-bridge 命令创建的各网桥被表示为 svc:/network/bridge 的同名服务管理工具 (Service Management Facility, SMF) 实例。每个实例运行实现 STP 的 /usr/lib/bridged 守护进程的一个副本。
例如,以下命令创建名为 pontevecchio 的网桥:
# dladm create-bridge pontevecchio
系统将创建名为 svc:/network/bridge:pontevecchio 的 SMF 服务实例和名为 /dev/net/pontevecchio0 的可观测节点。
出于安全目的,缺省情况下所有端口都运行标准 STP。不运行某种形式的桥接协议(如 STP)的网桥,可能会在网络中形成不终结的转发循环。因为以太网包上没有跃点计数或晶体管-晶体管逻辑 (transistor-to-transistor logic, TTL),所以任何此类循环对网络来说都是致命的。
如果特定端口未连接到另一网桥(例如,由于该端口有到主机系统的直接点对点连接),您可以从管理角度禁用该端口的 STP。即使网桥上的所有端口都禁用了 STP,STP 守护进程也仍然运行。守护进程继续运行的原因如下:
处理添加的任何新端口
实现 BPDU 保护
根据需要在端口上启用或禁用转发
当端口已禁用 STP 时,bridged 守护进程会继续侦听 BPDU(BPDU 保护)。此守护进程使用 syslog 标记所有错误并在端口上禁用转发来指示严重错误的网络配置。当链路从不可用重新变为可用,或者将链路手动删除再重新添加时,链路将重新启用。
如果禁用网桥的 SMF 服务实例,随着 STP 守护进程的停止,这些端口上的网桥转发也将停止。如果重新启动该实例,STP 将从初始状态启动。
使用 dladm create-bridge 命令创建的各网桥表示为 svc:/network/bridge 和 svc:/network/routing/trill 的同名 SMF 实例。svc:/network/routing/trill 的每个实例运行实现 TRILL 协议的 /usr/lib/trilld 守护进程的一个副本。
例如,以下命令创建名为 bridgeofsighs 的网桥:
# dladm create-bridge -P trill bridgeofsighs
系统将创建两个分别名为 svc:/network/bridge:bridgeofsighs 和 svc:/network/routing/trill:bridgeofsighs 的 SMF 服务。另外,系统将创建名为 /dev/net/bridgeofsighs0 的可观测节点。
为每个网桥实例指定一个可观测节点,此节点显示在 /dev/net/ 目录下,用网桥名称加后缀 0 的形式命名。
可观测节点用于与 snoop 和 wireshark 实用程序配合使用。此节点行为类似于标准的以太网接口,不同的是,此节点传递包时会无提示丢弃。不能在可观测节点的顶部激活 IP,也不能执行绑定请求 (DL_BIND_REQ),除非您使用被动选项。
使用该选项时,可观测节点会为每个由用户可用的网桥处理的包生成一个未经修改的副本,用于于监视和调试。此行为类似于传统网桥上的监视端口,并遵循普通的数据链路提供者接口 (data link provider interface, DLPI) 混杂模式规则。您可以使用 pfmod 命令或者 snoop 和 wireshark 实用程序中的功能基于 VLAN ID 对包进行过滤。
传送的包表示网桥接收的数据。
注 - 如果在桥接过程中添加、删除或修改了 VLAN 标记,dlstat 命令显示的数据将描述此过程发生之前的状态。如果不同的链路中使用不同的 default_tag 值(这种情况极为少见),可能会造成混乱。
要查看特定链路(桥接过程完成后)传送和接收的包,请在单个链路上(而不是在网桥的可观测节点上)运行 snoop。
您也可以使用 dlstat 命令获取有关网络包如何使用链路上的网络资源的统计信息。有关信息,请参见《在 Oracle Solaris 11.1 中使用虚拟网络》中的第 4 章 "监视 Oracle Solaris 中的网络通信和资源使用情况"。
以下各节描述当网络配置中使用网桥时,链路的行为将如何变化。
有关标准链路行为的信息,请参见部署 VLAN:概述。
下面介绍启用网桥时链路行为的差异:
链路接通 (DL_NOTE_LINK_UP) 和链路关闭 (DL_NOTE_LINK_DOWN) 通知是作为一个整体提供的。这意味着当所有的外部链路均显示链路关闭状态时,使用 MAC 层的较高级别客户机也将看到链路关闭事件。当网桥上的任何外部链路显示链路接通状态时,所有较高级别的客户机将看到链路接通事件。
执行此整体链路接通和链路关闭报告的原因如下:
当显示为链路关闭状态时,此链路上的节点将不再可访问。这种情况在桥接代码仍可以通过另一个链路发送和接收包时是不真实的。需要链路实际状态的管理应用程序可以使用现有的 MAC 层内核统计信息来显示状态。这些应用程序与普通的客户机(如 IP)不同,它们报告硬件状态信息,但不参与转发包。
当所有外部链路处于关闭状态时,显示的状态就仿佛网桥本身被关闭。在这种特殊情况下,系统将认为不可访问任何节点。折中办法是在所有接口为“真实的”(非虚拟的)并且所有链路全部断开的情况下,网桥不能用于允许仅本地通信。
所有链路特定的功能都是通用功能。支持特殊的硬件加速功能的链路无法使用这些硬件加速功能,因为实际的输出链路不是完全由客户端确定的。转发功能的网桥必须基于目标 MAC 地址选择输出链路,此输出链路可以是网桥上的任何链路。
缺省情况下,系统中配置的 VLAN 在网桥实例的所有端口之间转发包。如果底层链路是网桥的一部分,则调用 dladm create-vlan 或 dladm create-vnic -v 命令时该命令还将启用此网桥链路上指定 VLAN 的包转发。
要在一个链路上配置 VLAN 并禁用通过网桥上其他链路发送或接收的包转发,就必须通过使用 dladm set-linkprop 命令设置 VLAN 的 forward 属性来禁用转发。
当底层链路配置为网桥的一部分时,使用 dladm create-vlan 命令会自动启用桥接的 VLAN。
在符合标准的 STP 中,VLAN 将被忽略。桥接协议通过使用无标记 BPDU 消息只计算一个无环拓扑,并使用此树拓扑启用和禁用链路。必须配置网络中预分配的所有重复链路,以使配置的 VLAN 在 STP 自动禁用这些重复链路时不会断开连接。这意味着您必须在桥接主干中的所有位置运行所有 VLAN 或仔细检查所有冗余链路。
TRILL 协议不遵循复杂的 STP 规则。相反,TRILL 自动封装有完整 VLAN 标记的包并通过网络传递它们。这意味着如果在一个桥接网络内重用了相同的 VLAN ID,TRILL 会将分离的 VLAN 绑定。
这一与 STP 的重要区别意味着您可以在网络的各不同部分中重用 VLAN 标记来管理大于 4094 限制的 VLAN 集。虽然不能使用 TRILL 以这种方式管理网络,但您可能能够实现其他解决方案,例如基于提供者的 VLAN。
在具有 VLAN 的 STP 网络中,当 STP 禁用了“错误的”链路时,可能很难配置故障转移特征来防止 VLAN 分隔开。分离的 VLAN 的功能损失相对较小,与 TRILL 模型的稳健相比是次要的。
网桥通过检查允许的 VLAN 集和每个链路的 default_tag 属性来执行包转发。一般过程如下所示:
确定输入 VLAN。链路中的系统收到传入包时,此过程即开始。收到包时,将检查包的 VLAN 标记。如果该标记不存在,或标记只用于优先级(设置为零),会将该链路上配置的 default_tag 属性值(如果未设置为零)用作内部 VLAN 标记。如果该标记不存在或为零,并且 default_tag 为零,将忽略该包。将执行不带标记的转发。如果该标记存在且等于 default_tag 值,也将忽略该包。否则,该标记被视为代表传入 VLAN 包。
检查链路成员身份。如果输入 VLAN 未配置为此链路上的允许 VLAN,将忽略该包。然后计算转发,并对输出链路进行相同的检查。
更新标记。如果 VLAN 标记(此时非零)等于输出链路上的 default_tag 值,将删除包上的标记(如果有),而不管优先级如何。如果 VLAN 标记不等于输出链路上的 default_tag 值,且当前没有标记,则添加一个标记,并为传出包设置该标记,并将当前优先级复制到该包。
注 - 在转发向多个接口(用于广播、多播和未知目标)发送包的情况下,必须对每个输出链路独立执行输出链路检查和标记更新。某些传送可能已加标记,而有些则未标记。
以下示例显示如何查看有关网桥配置和桥接服务的信息:
可通过运行以下命令查看有关网桥的信息:
# dladm show-bridge BRIDGE PROTECT ADDRESS PRIORITY DESROOT tonowhere trill 32768/66:ca:b0:39:31:5d 32768 32768/66:ca:b0:39:31:5d sanluisrey stp 32768/ee:2:63:ed:41:94 32768 32768/ee:2:63:ed:41:94 pontoon trill 32768/56:db:46:be:b9:62 32768 32768/56:db:46:be:b9:62
可通过运行以下命令查看网桥的 TRILL 昵称信息:
# dladm show-bridge -t tonowhere NICK FLAGS LINK NEXTHOP 38628 -- simblue2 56:db:46:be:b9:62 58753 L -- --