跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 管理:网络接口和网络虚拟化 Oracle Solaris 11 Information Library (简体中文) |
网桥用于连接不同的网段。不同网段通过网桥连接后,连接的网段进行通信时,就如同是一个网段一样。桥接是在网络栈的数据链路层 (L2) 中实现的。网桥使用数据包转发机制将子网连接在一起。
桥接和路由都可用于分发关于网络中资源的位置的信息,而它们有几方面的区别。路由在 IP 层 (L3) 实现并使用路由协议。数据链路层不使用路由协议,而通过检查连接到网桥的链路中接收的网络通信流量确定转发数据包的目的地。
收到数据包后,将检查其源地址。数据包从某个节点被发送到接收该数据包的链路,数据包的源地址与该节点相关联。此后,当接收的数据包使用同一地址作为目标地址时,网桥将数据包通过链路转发到该地址。
与源地址关联的链路可能是一个中间链路,连接到桥接的子网中的另一个网桥。随着时间的推移,桥接的子网中的所有的网桥都将“学会”通过哪个链路向给定的节点发送数据包。因此,数据包的目标地址用于通过逐跳桥接的方式将数据包导向其最终目的。
本地“链路断开”通知指示给定的链路上的所有节点都不再可访问。在此情况下,到该链路的数据包转发将停止,而通过该链路的所有转发条目将被清除。转发条目还将随时间的推移老化。当恢复一个链路时,此链路上接收的数据包被视为新数据包。基于数据包源地址的“学习”过程再次开始。通过此过程,当该地址用作目标地址时,网桥能够通过该链路正确转发数据包。
要将数据包转发到目的地,网桥必须侦听每个连接到该网桥的链路上的混杂模式。侦听混杂模式导致网桥容易发生转发循环,发生转发循环时,数据包不停地以全线速循环。因此,桥接使用跨树协议 (Spanning Tree Protocol, STP) 机制防止网络循环使子网不可用。
桥除了使用 STP 和快速跨树协议(RSTP)之外,Oracle Solaris 支持 TRILL 保护加强。缺省情况下使用 STP,但您可以通过为桥接命令指定 -P trill 选项来使用 TRILL。
通过将网络中的各个节点连接到一个单独的网络,使用网桥配置简化了对这些节点的管理。采用通过网桥连接这些区段的方式,所有节点都可共享单个广播网络。因此,通过使用网络协议(如 IP)而不是通过使用路由器跨网段转发通信,每个节点都可以访问其他节点。如果不使用网桥,就必须配置 IP 路由以允许节点之间的 IP 通信转发。
下图显示了一个简单的桥接网络配置。网桥 goldengate 是一个已进行桥接配置的 Oracle Solaris 系统。sanfrancisco 和 sausalito 是物理连接到该网桥的系统。网络 A 使用一个集线器,该集线器一侧物理连接到网桥,另一侧连接到计算机系统。网桥端口是链路,例如 bge0、bge1 和 bge2。
图 11-1 简单的桥接网络
桥接网络可以形成环,将多个网桥物理连接在一起。这种配置在网络中很常见。这种类型的配置可能导致因旧数据包无休止地在环中循环而使网络链路饱和的问题。为了防止出现这种循环情况,Oracle Solaris 网桥实现 STP 和 TRILL 协议。请注意,大多数硬件网桥还实现 STP 循环保护。
下图显示配置成一个环的桥接网络。此配置显示三个网桥。两个系统物理连接到 westminster。一个系统物理连接到 waterloo。一个系统物理连接到 tower。每个网桥通过网桥端口物理连接到其他各网桥。
当 STP 或 RSTP 用于循环保护时,通过防止循环中的一个连接转发数据包,降低了出现物理循环的风险。上图显示 westminster 和 tower 网桥之间的物理链路不用于转发数据包。
请注意,因为采用关闭可用物理链路来执行循环保护的方式,STP 和 RSTP 会消耗您的带宽。
与 STP 和 RSTP 不同,TRILL 不通过关闭物理链路来防止出现循环。相反,TRILL 计算网络中的每个 TRILL 节点的最短路径信息,并使用该信息将数据包转发到各个目的地。
因此,TRILL 使系统的所有链路始终处于使用状态。循环不是问题,因为采用了 IP 处理循环的方式来处理循环,即 TRILL 根据需要创建路由并使用转发跳数限制来避免出现导致瞬时循环状态的问题。
图 11-2 桥接的网络环
注意 - 不要在 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 Identifie, PVID)。当 default_tag 非零时,不能在链路上创建具有相同 ID 的 VLAN,因为基本链路本身自动表示 PVID。
例如,如果 PVID 在 net0 上设置为 5,则无法在 net0 上创建 ID 为 5 的 VLAN。在这种情况下,要指定 VLAN 5,请使用 net0。
不能将 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 时,链路不使用任何类型的跨树协议,并始终置于转发模式下。转发模式使用网桥协议数据单元(Bridge Protocol Data Unit, BPDU)保护。当您要配置连接到结束节点的点对点链路时,请禁用 STP 和 RSTP。只有非 VLAN 和非 VNIC 类型的链路才具有此属性。
表示与使用此链路对应的 STP 和 RSTP 成本值。有效值介于 1 至 65535 之间。缺省值为 0,用于指示成本由链路类型自动计算。以下值分别表示几种链路类型的成本:100 对应 10 Mbps、19 对应 100 Mbps、4 对应 1 Gbps和 2 对应 10 Gbps。
指定该端口是否连接到其他网桥。有效值是 1 (true) 和 0 (false)。缺省值为 1。如果设置为 0,守护进程就会假定即使看不到任何类型的 BPDU,端口也是连接到其他网桥的。
指定连接模式类型。有效值为 true、false 和 auto。缺省值是 auto,它会自动发现点对点连接。指定 true 将强制采用点对点模式,指定 false 将强制采用正常多点模式。
设置 STP 和 RSTP 端口优先级值。有效值介于 0 至 255 之间。缺省值为 128。STP 和 RSTP 端口优先级值用于通过将该值加到端口标识符之前来确定网桥的首选根端口。该数值越低,优先级越高。
使用 dladm create-bridge 命令创建的各网桥被表示为 svc:/network/bridge 的同名 SMF 实例。每个实例运行实现 STP 的 /usr/lib/bridged 守护进程的一个副本。
以下命令示例创建名为 pontevecchio 的网桥:
# dladm create-bridge pontevecchio
系统将创建名为 svc:/network/bridge:pontevecchio 的 SMF 服务和名为 /dev/net/pontevecchio0 的可观测节点。
出于安全目的,缺省情况下所有端口都运行标准 STP。不运行某种形式的桥接协议(如 STP)的网桥,可能会在网络中形成不终结的转发循环。因为以太网数据包上没有跃点计数或 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),除非您使用被动选项。
使用该选项时,可观测节点会为每个由用户可用的网桥处理的数据包制作一个未经修改的副本。此行为类似于传统网桥上的“监视”端口,并遵循普通的 DLPI“混杂模式”规则。您可以使用 pfmod 或者 snoop 和 wireshark 实用程序中的功能基于 VLAN ID 进行过滤。
传送的数据包表示网桥接收的数据。
注意 - 如果是在桥接过程中添加、删除或修改了 VLAN 标记的情况,显示的数据描述此过程发生之前的状态。如果不同的链路中使用不同的 default_tag 值(这种情况极为少见),可能会造成混乱。 |
要查看特定链路(桥接过程完成后)传送和接收的数据包,请在单个链路上(而不是在网桥的可观测节点上)运行 snoop。
有关可观测节点的信息,请参见网络虚拟化和资源控制的观察功能。
以下各节描述当网桥用在配置中时,链路的行为是如何更改的。
有关标准链路行为的信息,请参见管理虚拟局域网。
下面介绍启用网桥时链路行为的差异:
链路接通 (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 命令设置 forward 属性禁用转发。
当底层链路配置为网桥的一部分时,使用 dladm create-vlan 命令会自动启用桥接的 VLAN。
在符合标准的 STP 中,VLAN 将被忽略。桥接协议通过使用无标记 BPDU 消息只计算一个无环拓扑,并使用此树启用和禁用链路。必须配置网络中预分配的所有重复链路,以使配置的 VLAN 在 STP 自动禁用这些重复链路时不会断开连接。这意味着您应在您桥接的主干的任何位置运行所有 VLAN 或仔细检查所有冗余链路。
TRILL 不需要遵循复杂的 STP 规则。相反,TRILL 自动封装有完整 VLAN 标记的数据包并通过网络传递它们。这意味着如果在一个桥接网络内重用了相同的 VLAN ID,TRILL 会将对应的单个不同 VLAN 捆绑在一起。
这是与 STP 的一个重要的区别,在 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 -- --