冗余链路
- 扩展阅读:
-
- 1
冗余链路会造成网络环路,当交换网络中出现环路会产生广播风暴、多帧复制和MAC地址表不稳定等现象。严重影响网络正常运行。
- 1
什么是交换机的冗余链路
就是指交换机到目的主机之间除最短路径之外的其它多余的链路。它是一些备用的链路,当出现当前的最短链路不可用的时候,可以再从这些冗余链路中再找出一条合适的链路链接到目的主机。
它可将多物理连接当作一个单一的逻辑连接来处理,它允许两个交换器之间通过多个端口并行连接同时传输数据以提供更高的带宽、更大的吞吐量和可恢复性的技术。
一般来说,两个普通交换器连接的最大带宽取决于媒介的连接速度(100BAST-TX双绞线为200M),而使用Trunk技术可以将4个200M的端口捆绑后成为一个高达800M的连接。这一技术的优点是以较低的成本通过捆绑多端口提高带宽,而其增加的开销只是连接用的普通五类网线和多占用的端口,它可以有效地提高子网的上行速度,从而消除网络访问中的瓶颈。另外Trunk还具有自动带宽平衡,即容错功能:即使Trunk只有一个连接存在时,仍然会工作,这无形中增加了系统的可靠性。
冗余链路
在骨干网设备连接中,在多台交换机组成的网络环境中,以提高网络的健壮性、稳定性.
这里的备份连接也称为备份链路或者冗余链路.备份链路之间的交换机经常互相连接,通过环路可以在一定程度上实现冗余。
双adsl链路冗余互备及流量分担的实现
经过一周的摸索,实现了双adsl链路冗余互备及流量分担,整理如下:
目的:实现双adsl的冗余热备和流量分担
双adsl同时连线;
当两条adsl同时连线时,流量经策略路由分流到两条链路上;
当其中一条adsl掉线时,所有流量自动分配另一条可用连接;
可以扩展到多条ppp连接.
1.添加网卡
插入网卡,启动机器,修改/etc/modules.conf并加入
alias eth2 driver.o
2.配置adsl拨号
通过adsl-setup程序创建ppp0和ppp1的拨号配置文件,并保存配置。
修改/etc/sysconfig/network-script/ifcfg-ppp*文件,将其中的PIDFILE参数设为:
PIDFILE=/var/run/ppp-adsl*.pid
其中*对应0、1等
如果不修改此参数将无法启动第二个ppp接口。
3.启动ppp接口
因为adsl-start 命令缺省只能启动第一的ppp接口。所以要启动两个接口,必须指定配置文件。
adsl-start /etc/sysconfig/network-script/ifcfg-ppp0
adsl-start /etc/sysconfig/network-script/ifcfg-ppp1
4.添加路由表
缺省情况下,系统只有3个路由表,local、main、default,路由规则为所有进入的数据报都参照main、defaul来决策路由,这可以通过ip rule ls来查看。其输出如下:
代码:
[root@linuxrouter root]# ip rule ls
0: from all lookup local
32766:from all lookup main
32767:from all lookup 253
[root@linuxrouter root]#
要实现策略路由,添加额外的路由表是必须的。
下面两条命令分别添加名为ppp0和ppp1的路由表。
echo 201 ppp0 >> /etc/iproutes/rt_tables
echo 202 ppp1 >> /etc/iproutes/rt_tables
5.创建路由表项
上面创建的两个路由表都是空表,需要在其中注入路由表项。
本人编写了如下脚本用于注入路由表项:
代码:
#!/bin/bash
# Name: cprt
# This program copy the route from $1 route table to $2 route table,
# exclude the default route entry.
if [ -z "$1" -o -z "$2" ]; then
echo $"usage: cprt"
exit 1
fi
SOURCE=$1
DEST=$2
# Clear the destination route table
echo $"Clearing route table $DEST ......"
echo
/sbin/ip route flush table $DEST
# Inject routes from source to destination
echo $"Injecting route from $SOURCE to $DEST ......"
/sbin/ip route ls table $SOURCE | grep -v default > /tmp/route-tmp
while read line; do
/sbin/ip route add table $DEST $line
done
把main表中的路由表项复制到ppp0和ppp1中。
将下面命令加入到/etc/rc.d/rc.local中。
cprt main ppp0
cprt main ppp1
此时,两个路由表中都有相同的路由表项了,除了default路由以外。缺省路由的添加要通过另外的途径添加。当ppp激活,或者掉线时,pppd守护进程会调用/etc/ppp/目录下的ip-up、ip-down脚本,这些教本又分别调用ip-up.local、ip-down.local。在此我们利用这两个脚本来对路由表和流量控制策略进行维护,此脚本需要人工创建。
下面时本例中的脚本:
/etc/ppp/ip-up.local
代码:
#!/bin/bash
# Name: ip-up.local
# Created by lyking@CU
# If the if-down is not completed,this script can't be excute.
while [ -e /var/lock/subsys/if-down.$IFNAME ] ; do
sleep 3
done
# Creat a lock file to prevent the if-down from running on my turn
touch /var/lock/subsys/if-up.$IFNAME
# Determin device here
# We should use IFNAME as the interface name.For some reason,the IFNAME maybe not
# same as the LINKNAME. And the route table should associate with the IFNAME. For
# some conveniency,I name the route table as "ppp0" and "ppp1".
RT_TABLE=$IFNAME
# Add or change static route here,including default route.
# Check if a default is exist.
RS=""
ip route ls table $RT_TABLE | grep default
RS=$?
if [ $RS -eq 0 ] ; then
ip route change default dev $IFNAME table $RT_TABLE
else
ip route add default dev $IFNAME table $RT_TABLE
fi
echo >> /var/log/ifchang.log
echo "$0: $IFNAME going up at `date`." >> /var/log/ifchang.log
echo "$0: $IFNAME got address: $IPLOCAL,peer address is $IPREMOTE." >> /var/log/ifchang.log
echo "$0: Table $RT_TABLE default route change to `ip route ls table $RT_TABLE | grep default`." >> /var/log/ifchang.log
# Refresh routing cache to activating the routing immediately.
ip route flush cache
# Add traffic control policy here
tc qdisc add dev $IFNAME root handle 1: prio
## This *instantly* creates classes 1:1,1:2,1:3
tc qdisc add dev $IFNAME parent 1:1 handle 10 sfq perturb 20
tc qdisc add dev $IFNAME parent 1:2 handle 20 sfq perturb 20
tc qdisc add dev $IFNAME parent 1:3 handle 30 sfq
# Remove the lock file
rm -f /var/lock/subsys/if-up.$IFNAME
/etc/ppp/ip-down.local
代码:
#!/bin/bash
# Name: ip-down.local
# Created by lyking@CU
while [ -e /var/lock/subsys/if-up.$IFNAME ] ; do
sleep 3
done
touch /var/lock/subsys/if-down.$IFNAME
cd /etc/sysconfig/network-scripts
. network-functions
# Determin device here
# We should use IFNAME as the interface name.For some reason,I name the route table as "ppp0" and "ppp1".
RT_TABLE=$IFNAME
# Looking for a valide connection to Internet
DEFAULT_RT=""
PPPS='ppp0 ppp1'
for i in $PPPS ; do
ifconfig | grep $i
RS=$?
if [ $RS -eq 0 ] ; then
DEFAULT_RT=$i
break
fi
done
# Update default route here as nesessary
if [ $DEFAULT_RT != $IFNAME ] ; then
if [ $DEFAULT_RT != "" ] ; then
ip route add default dev $DEFAULT_RT table $RT_TABLE
else
for i in $PPPS ; do
ip route del default dev $i table $i
done
echo >> /var/log/ifchang.log
echo "$0: All connection is down,remove all default route from all branch tables" >> /var/log/ifchang.log
fi
echo >> /var/log/ifchang.log
echo "$0: $IFNAME going down at `date`." >> /var/log/ifchang.log
echo "$0: Connection lasted $CONNECT_TIME seconds." >> /var/log/ifchang.log
echo "$0: $BYTES_SENT bytes sent,$BYTES_RCVD bytes received." >> /var/log/ifchang.log
echo "$0: $DEFAULT_RT is available." >> /var/log/ifchang.log
echo "$0: Table $RT_TABLE default route changed to `ip route ls table $RT_TABLE | grep default`. " >> /var/log/ifchang.log
fi
# Refresh routing cache to activating the routing immediately.
ip route flush cache
rm -f /var/lock/subsys/if-down.$IFNAME
注意,创建完脚本后必须将其属性改为可执行,否则不会被执行。
策略路由可以通过源地址、目标地址、ToS或者fwmark标记来进行选择。在此,为了利用iptables的强大的过滤功能采用fwmark标记来决策路由。
在/etc/rc.d/rc.local中添加如下命令:
/sbin/ip rule add fwmark 1 table ppp0
/sbin/ip rule add fwmark 2 table ppp1
7.防火墙规则的添加
这里利用的iptables的强大过滤功能来对流量进行标记。本例中仅根据ip地址的奇偶性来拆分流量,根据具体需求,你还可以根据第4层端口号、ToS等来拆分流量。防火墙需要添加如下命令:
代码:
# Divid traffic to different mark
iptables -t mangle -A PREROUTING -s 10.0.0.0/255.255.255.1 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -s 10.0.0.1/255.255.255.1 -j MARK --set-mark 0x2
# NAT
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE
至此,双adsl链路的热互备及负载分担基本完成。
下面是一些运行结果
A.ifconfig显示结果
ppp0 Link encap oint-to-Point Protocol
inet addr:220.163.38.208 P-t-P:220.163.38.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:100295 errors:0 dropped:0 overruns:0 frame:0
TX packets:67817 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:108844271 (103.8 Mb) TX bytes:6073206 (5.7 Mb)
ppp1 Link encapoint-to-Point Protocol
inet addr:220.163.36.57 P-t-P:220.163.36.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:150583 errors:0 dropped:0 overruns:0 frame:0
TX packets:125136 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:132921157 (126.7 Mb) TX bytes:8749585 (8.3 Mb)
B./var/log/ifchang.log部分内容
/etc/ppp/ip-down.local: ppp0 going down at Tue Aug 10 08:05:45 CST 2004.
/etc/ppp/ip-down.local: Connection lasted 22 seconds.
/etc/ppp/ip-down.local: 30 bytes sent,30 bytes received.
/etc/ppp/ip-down.local: ppp1 is available.
/etc/ppp/ip-down.local: Table ppp0 default route changed to default dev ppp1 scope link .
/etc/ppp/ip-up.local: ppp0 going up at Tue Aug 10 08:05:53 CST 2004.
/etc/ppp/ip-up.local: ppp0 got address: 61.159.254.30,peer address is 61.159.254.1.
/etc/ppp/ip-up.local: Table ppp0 default route change to default dev ppp0 scope link .
/etc/ppp/ip-down.local: ppp1 going down at Tue Aug 10 08:12:45 CST 2004.
/etc/ppp/ip-down.local: Connection lasted 853 seconds.
/etc/ppp/ip-down.local: 9313 bytes sent,116181 bytes received.
/etc/ppp/ip-down.local: ppp0 is available.
/etc/ppp/ip-down.local: Table ppp1 default route changed to default dev ppp0 scope link .
/etc/ppp/ip-up.local: ppp1 going up at Tue Aug 10 08:12:53 CST 2004.
/etc/ppp/ip-up.local: ppp1 got address: 220.163.38.20,peer address is 220.163.38.1.
/etc/ppp/ip-up.local: Table ppp1 default route change to default dev ppp1 scope link .
第3章 交换网络中的冗余链路管理
3.1 交换机网络中的冗余链路
在许多交换机或交换机设备组成的网络环境中,通常都使用一些备份连接,以提高网络的健全性、稳定性。备份连接也叫备份链路、冗余链路等。备份链路如图2-1所示,交换机SW1与交换机SW3的端口1之间的链路就是一个备份连接。在主链路(交换机SW1与SW2的端口2之间的链路或者交换机SW2的端口1与交换机SW3的端口2之间的链路)出现故障时,备份链路自动启用,从而提高网络的整体可靠性。
PC2 |
PC1 |
SW1 |
SW3 |
VOD Server |
SW2 |
图3-1 备份链路 |
使用冗余备份能够为网络带来健全性、稳定性和可靠性等好处,但是备份链路使网络存在环路。图3-1中SW1-SW2-SW3就是一个环路。环路问题是备份链路所面临的最为严重的问题,环路问题将会导致:广播风暴、多帧复制以及不稳定的MAC地址表等问题。
3.2 生成树协议概述
在由交换机构成的交换网络中通常设计有冗余链路和设备。这种设计的目的是防止一个点的失败导致整个网络功能的丢失。虽然冗余设计可能消除的单点失败问题,但也导致了交换回路的产生,它会带来如下问题:
A. 广播风暴
B. 同一帧的多份拷贝
C. 不稳定的MAC地址表
因此,在交换网络中必须有一个机制来阻止回路,而生成树协议(Spanning Tree Protocol)的作用正在于此。
生成树协议 Spanning Tree 定义在 IEEE 802.1D 中,是一种桥到桥的链路管理协议,它在防止产生自循环的基础上提供路径冗余。为使以太网更好地工作,两个工作站之间只能有一条活动路径。网络环路的发生有多种原因,最常见的一种是故意生成的冗余,万一一个链路或交换机失败,会有另一个链路或交换机替代。
所以,STP协议的主要思想就是当网络中存在备份链路时,只允许主链路激活,如果主链路因故障而被断开后,备用链路才会被打开。
生成树协议的发展过程划分成三代:
第一代生成树协议:STP/RSTP
第二代生成树协议:PVST/PVST+
第三代生成树协议:MISTP/MSTP
STP协议的主要作用:避免回路,冗余备份。
3.3 STP协议工作原理
3.3.1 生成树协议介绍
生成树协议基于以下几点:(1)有一个唯一的组地址(01-80-C2-00-00-00)标识一个特定LAN上的所有的交换机。这个组地址能被所有的交换机识别;(2)每个交换机有一个唯一的标识(Brideg Identifier);(3)每个交换机的端口有一个唯一的端口标识(Port Identifier)。对生成树的配置进行管理还需要:对每个交换机调协一个相对的优先级;对每个交换机的每个端口调协一个相对的优先级;对每个端口调协一个路径花费。
具有最高优先级的交换机被称为根(root)交换机。每个交换机端口都有一个根路径花费,根路径花费是该交换机到根交换机所经过的各个路段的路径花费的总和。一个交换机中根路径花费的值为最低的端口称为根端口,若有多个端口具有相同的根路径花费,则具有最高优先级的端口为根端口。
在每个LAN中都有一个交换机被称为指定(designated)交换机,它属于该LAN中根路径花费最少的交换机。把LAN和指定交换机连接起来的端口就是LAN的指定端口(designated port)。如果指定交换机中有两个以上的端口连在这个LAN上,则具有最高优先级的端口被选为指定端口。拓扑结构如图3-2所示。
图3-2 根交换机和根端口
由于交换机A具有最高优先级(桥标识最低),被选为根交换机,所以交换机A是LAN A和LAN B的指定交换机;假设交换机B的根路径花费为6,交换机C的根路径花费为4,那么交换机C被选为LAN C的指定交换机,亦即LAN C与交换机A之间的消息通过交换机C转发,而不是通过交换机B。LAN C与交换机B之间的链路是一条冗余链路。
3.3.2 BPDU编码
交换机之间定期发送BPDU包,交换生成树配置信息,以便能够对网络的拓扑、花费或优先级的变化做出及时的响应。BPDU分为两种类型,包含配置信息的BPDU包称为配置BPDU(Configuration BPDU),当检测到网络拓扑结构变化时则要发送拓扑变化通知BPDU(Topology cHANGE nOTIFICATION BPDU)。配置BPDU编码如图3-3所示。
图3-3 配置BPDU编码
拓扑变化通知BPDU编码如图3-4所示。
图3-4 发送拓扑变化通知BPDU
对于配置BPDU,超过35个字节以外的字节将被忽略掉;对于拓扑变化通知BPDU,超过4个字节以外的字节将被忽略掉。
BPDU的组成说明:
1.版本号:00(IEEE 802.1D) ;02(IEEE 802.1W)
2.Bridge ID(交换机ID=交换机优先级+交换机MAC地址)
3.Root ID(根交换机 ID)
4.Root Path Cost(到达根的路径开销)
5.Port ID(发送BPDU的端口ID=端口优先级+端口编号)
6.Hello Time(定期发送BPDU的时间间隔)
7.Max-Age Time(保留对方BPDU消息的最长时间)
8.Forward-Delay Time(发送延迟:端口状态改变的时间间隔)
9.其他一些诸如表示发现网络拓扑变化、本端口状态的标志位。
3.4 形成一个生成树所必需决定的要素
3.4.1 决定根交换机
1、交换机的BridgeID由两部分构成:优先级+MAC地址
2、最开始所有的交换机都认为自己是根交换机;
3、交换机向与之相连的LAN广播发送配置BPDU,其root_id与bridge_id的值相同;
4、当交换机收到另一个交换机发来的配置BPDU后,若发现收到的配置BPDU中root_id字段的值大于该交换机中root_id参数的值,则丢弃该帧,否则更新该交换机的root_id、根路径花费root_path_cost等参数的值,该交换机将以新值继续广播发送配置BPDU。
3.4.2 决定根端口
一个交换机中根路径花费的值为最低的端口称为根端口。
若有多个端口具有相同的最低根路径花费,则具有最高优先级的端口为根端口。若有两个或多个端口具有相同的最低根路径花费和最高优先级,则端口号最小的端口为默认的根端口。
生成树的选举过程中,应遵循以下优先顺序来选择最佳路径:
1. 比较Root Path Cost;
2. 比较Sender’s Bridge ID;
3. 比较Sender’s Port ID;
4. 比较本交换机的Port ID。
3.4.3 认定LAN的指定交换机
1、 开始时,所有的交换机都认为自己是LAN的指定交换机。
2、 当交换机接收到具有更低根路径花费的(同一个LAN中)其他交换机发来的BPDU,该交换机就不再宣称自己是指定交换机。如果在一个LAN中,有两个或多个交换机具有同样的根路径花费,具有最高优先级的交换机被先为指定交换机。在一个LAN中,只有指定交换机可以接收和转发帧,其他交换机的所有端口都被置为阻塞状态。
3、 如果指定交换机在某个时刻收一了LAN上其他交换机因竞争指定交换机而发来的配置BPDU,该指定交换机将发送一个回应的配置BPDU,以重新确定指定交换机。
3.4.4 决定指定端口
LAN的指定交换机中与该LAN相连的端口为指定端口。若指定交换机有两个或多个端口与该LAN相连,那么具有最低标识的端口为指定端口。
除了根端口和指定端口外,其他端口都将置为阻塞状态。这样,在决定了根交换机、交换机的根端口、以及每个LAN的指定交换机和指定端口后,一个生成树的拓扑结构也就产生。
1. 网络中选择了一个交换机为根交换机(Root Bridge);
2. 除根交换机外的每个交换机都有一个根口(Root Port),
即提供最短路径到Root Bridge的端口;
3. 每个交换机都计算出了到根交换机(Root Bridge)的最短
路径;
4. 每个LAN都有了指定交换机(Designated Bridge),位于该
LAN与根交换机之间的最短路径中。指定交换机和LAN相连的端
口称为指定端口(Designated port);
5. 根口(Roor port)和指定端口(Designated port)进入转
发Forwarding状态;
6. 其他的冗余端口就处于阻塞状态(Blocking或
Discarding)。
3.5 拓扑变化
拓扑信息在网络上的传播有一个时间限制,这个时间信息包含在每个配置BPDU中,即为消息时限。每个交换机存储来自LAN指定端口的协议信息,并监视这些信息存储的时间。在正常稳定状态下,根交换机定期发送配置消息以保证拓扑信息不超时。如果根交换机失效了,其他交换机中的协议信息就会超时,新的拓扑结构很快在网络中传播。
当某个交换机检测到拓扑变化,它将向根交换机方向的指定交换机发送拓扑变化通知BPDU,以拓扑变化通知定时器的时间间隔定期发送拓扑变化通知BPDU,直到收到了指定交换机发来的确认拓扑变化信息(这个确认信号在配置BPDU中,即拓扑变化标志位置位),同时指定交换机重复以上过程,继续向根交换机方向的交换机发送拓扑变化通知BPDU。这样,拓扑变化的通知最终传到根交换机。根交换机收到了这样一个通知,或其自身改变了拓扑结构,它将发送一段时间的配置BPDU,在配置BPDU中拓扑变化标志位被置位。所有的交换机将会收到一个或多个配置消息,并使用转发延迟参数的值来老化过滤数据库中的地址。所有的交换机将重新决定根交换机、交换机的根端口、以及每个LAN的指定交换机和指定端口,这样生成树的拓扑结构也就重新决定了。
3.6 STP的端口状态
运行生成树协议的交换机上的端口,总是处于下面四个状态中的一个:
1)阻塞:所有端口以阻塞状态启动以防止回路,由生成树确定哪个端口切换为转发状态,处于阻塞状态的端口不转发数据帧但可接受BPDU。
2)监听:不转发数据帧,但检测BPDU(临时状态)。
3)学习:不转发数据帧,但学习MAC地址表(临时状态)。
4)转发:可以传送和接受数据数据帧。
在正常操作期间,端口处于转发或阻塞状态。当检测到网络拓扑结构有变化时,交换机会自动进行状态转换,在这个期间端口暂时处于监听和学习状态。
生成树经过一段时间(默认值是50秒左右)稳定之后,所有端口要么进入转发状态,要么进入阻塞状态。STP BPDU仍然会定时从各个网桥的指定端口发出,以维护链路的状态。如果网络拓扑发生变化,生成树就会重新计算,端口状态也会随之改变。
当拓扑发生变化,新的配置消息要经过一定的时延才能传播到整个网络,这个时延称为Forward Delay,协议默认值是15秒。在所有网桥收到这个变化的消息之前,若旧拓扑结构中处于转发的端口还没有发现自己应该在新的拓扑中停止转发,则可能存在临时环路。为了解决临时环路的问题,生成树使用了一种定时器策略,即在端口从阻塞状态到转发状态中间加上一个只学习MAC地址但不参与转发的中间状态,两次状态切换的时间长度都是Forward Delay,这样就可以保证在拓扑变化的时候不会产生临时环路。但是,这个看似良好的解决方案实际上带来的却是至少两倍Forward Delay的收敛时间!
默认情况下,交换机端口由阻塞状态到侦听状时间为20秒。
3.7 STP/MSTP生成树协议
3.7.1 RSTP简述
为了解决STP协议收敛时间长这个缺陷,在世纪之初IEEE推出了802.1w标准,作为对802.1D标准的补充。在IEEE 802.1w标准里定义了快速生成树协议RSTP(Rapid Spanning Tree Protocol)。RSTP协议在STP协议基础上做了三点重要改进,使得收敛速度快得多(最快1秒以内)。
第一点改进:为根端口和指定端口设置了快速切换用的替换端口(Alternate Port)和备份端口(Backup Port)两种角色,当根端口/指定端口失效的情况下,替换端口/备份端口就会无时延地进入转发状态。图3-1中所有网桥都运行RSTP协议,SW1是根桥,假设SW2的端口1是根端口,端口2将能够识别这种拓扑结构,成为根端口的替换端口,进入阻塞状态。当端口1所在链路失效的情况下,端口2就能够立即进入转发状态,无需等待两倍Forward Delay时间。
图3-1 RSTP冗余链路快速切换示意图
第二点改进:在只连接了两个交换端口的点对点链路中,指定端口只需与下游网桥进行一次握手就可以无时延地进入转发状态。如果是连接了三个以上网桥的共享链路,下游网桥是不会响应上游指定端口发出的握手请求的,只能等待两倍Forward Delay时间进入转发状态。
第三点改进:直接与终端相连而不是把其他网桥相连的端口定义为边缘端口(Edge Port)。边缘端口可以直接进入转发状态,不需要任何延时。由于网桥无法知道端口是否是直接与终端相连,所以需要人工配置。
可见,RSTP协议相对于STP协议的确改进了很多。为了支持这些改进,BPDU的格式做了一些修改,但RSTP协议仍然向下兼容STP协议,可以混合组网。虽然如此,RSTP和STP一样同属于单生成树SST(Single Spanning Tree),有它自身的诸多缺陷,主要表现在三个方面。
第一点缺陷:由于整个交换网络只有一棵生成树,在网络规模比较大的时候会导致较长的收敛时间,拓扑改变的影响面也较大。
第二点缺陷:近些年IEEE 802.1Q大行其道,逐渐成为交换机的标准协议。在网络结构对称的情况下,单生成树也没什么大碍。但是,在网络结构不对称的时候,单生成树就会影响网络的连通性。
图3-2 非对称网络示意图
图3-2中假设SW1是根桥,实线链路是VLAN 10,虚线链路是802.1Q的Trunk链路,Trunk了VLAN 10和VLAN 20。当SW2的Trunk端口被阻塞的时候,显然SW1和SW2之间VLAN 20的通路就被切断了。
第三点缺陷:当链路被阻塞后将不承载任何流量,造成了带宽的极大浪费,这在环行城域网的情况下比较明显。
图3-3 SST带宽利用率低下示意图
图3-3中假设SW1是根桥,SW4的一个端口被阻塞。在这种情况下,SW2和SW4之间铺设的光纤将不承载任何流量,所有SW2和SW4之间的业务流量都将经过SW1和SW3转发,增加了其他几条链路的负担。
这些缺陷都是单生成树SST无法克服的,于是支持VLAN的多生成树协议出现了。
3.7.2 PVST/PVST+
每个VLAN都生成一棵树是一种比较直接,而且最简单的解决方法。它能够保证每一个VLAN都不存在环路。但是由于种种原因,以这种方式工作的生成树协议并没有形成标准,而是各个厂商各有一套,尤其是以Cisco的VLAN生成树PVST(Per VLAN Spanning Tree)为代表。
为了携带更多的信息,PVST BPDU的格式和STP/RSTP BPDU格式已经不一样,发送的目的地址也改成了Cisco保留地址01-00-0C-CC-CC-CD,而且在VLAN Trunk的情况下PVST BPDU被打上了802.1Q VLAN标签。所以,PVST协议并不兼容STP/RSTP协议。
Cisco很快又推出了经过改进的PVST+协议,并成为了交换机产品的默认生成树协议。经过改进的PVST+协议在VLAN 1上运行的是普通STP协议,在其他VLAN上运行PVST协议。PVST+协议可以与STP/RSTP互通,在VLAN 1上生成树状态按照STP协议计算。在其他VLAN上,普通交换机只会把PVST BPDU当作多播报文按照VLAN号进行转发。但这并不影响环路的消除,只是有可能VLAN 1和其他VLAN的根桥状态可能不一致。
图3-4 PVST+与SST对接示意图
图3-4中所有链路默认VLAN是VLAN 1,并且都Trunk了VLAN 10和VLAN 20。SW1和SW3运行单生成树SST协议,而SW2运行PVST+协议。在VLAN 1上,可能SW1是根桥,SW2的端口1被阻塞。在VLAN 10和VLAN 20上,SW2只能看到自己的PVST BPDU,所以在这两个VLAN上它认为自己是根桥。VLAN 10和VLAN 20的PVST BPDU会被SW1和SW3转发,所以SW2检测到这种环路后,会在端口2上阻塞VLAN 10和VLAN 20。这就是PVST+协议提供的STP/RSTP兼容性。可以看出,网络中的二层环路能够被识别并消除,强制根桥的一致性是没有任何意义的。
由于每个VLAN都有一棵独立的生成树,单生成树的种种缺陷都被克服了。同时,PVST带来了新的好处,那就是二层负载均衡。
图3-5 PVST+负载均衡示意图
图3-5中四台设备都运行PVST+协议,并且都Trunk了VLAN 10和VLAN 20。假设SW1是所有VLAN的根桥,通过配置可以使得SW4端口1上的VLAN 10和端口2上的VLAN 20阻塞,SW4的端口1所在链路仍然可以承载VLAN 20的流量,端口2所在链路也可以承载VLAN 10的流量,同时具备链路备份的功能。这在以往的单生成树情况下是无法实现的。
聪明伶俐的PVST/PVST+协议实现了VLAN认知能力和负载均衡能力,但是新技术也带来了新问题,PVST/PVST+协议也有它们的“难言之隐”。
第一点缺陷:由于每个VLAN都需要生成一棵树,PVST BPDU的通信量将正比于Trunk的VLAN个数。
第二点缺陷:在VLAN个数比较多的时候,维护多棵生成树的计算量和资源占用量将急剧增长。特别是当Trunk了很多VLAN的接口状态变化的时候,所有生成树的状态都要重新计算,cpu将不堪重负。所以,Cisco交换机限制了VLAN的使用个数,同时不建议在一个端口上Trunk很多VLAN。
第三点缺陷:由于协议的私有性,PVST/PVST+不能像STP/RSTP一样得到广泛的支持,不同厂家的设备并不能在这种模式下直接互通,只能通过一些变通的方式实现,例如Foundry的IronSpan。IronSpan默认情况下运行的是STP协议,当某个端口收到PVST BPDU时,该端口的生成树模式会自动切换成PVST/PVST+兼容模式。
一般情况下,网络的拓扑结构不会频繁变化,所以PVST/PVST+的这些缺点并不会很致命。但是,端口Trunk大量VLAN这种需求还是存在的。于是,Cisco对PVST/PVST+又做了新的改进,推出了多实例化的MISTP协议。
3.7.3 MISTP/MSTP
多实例生成树协议MISTP(Multi-Instance Spanning Tree Protocol)定义了“实例”(Instance)的概念。简单的说,STP/RSTP是基于端口的,PVST/PVST+是基于VLAN的,而MISTP就是基于实例的。所谓实例就是多个VLAN的一个集合,通过多个VLAN捆绑到一个实例中去的方法可以节省通信开销和资源占用率。
在使用的时候可以把多个相同拓扑结构的VLAN映射到一个实例里,这些VLAN在端口上转发状态将取决于对应实例在MISTP里的状态。值得注意的是网络里的所有交换机的VLAN和实例映射关系必须都一致,否则会影响网络连通性。为了检测这种错误,MISTP BPDU里除了携带实例号以外,还要携带实例对应的VLAN关系等信息。MISTP协议不处理STP/RSTP/PVST BPDU,所以不能兼容STP/RSTP协议,甚至不能向下兼容PVST/PVST+协议,在一起组网的时候会出现环路。为了让网络能够平滑地从PVST+模式迁移到MISTP模式,Cisco在交换机产品里又做了一个可以处理PVST BPDU的混合模式MISTP-PVST+。网络升级的时候需要先把设备都设置成MISTP-PVST+模式,然后再全部设置成MISTP模式。
MISTP带来的好处是显而易见的。它既有PVST的VLAN认知能力和负载均衡能力,又拥有可以和SST媲美的低cpu占用率。不过,极差的向下兼容性和协议的私有性阻挡了MISTP的大范围应用。
MSTP协议精妙的地方在于把支持MSTP的交换机和不支持MSTP交换机划分成不同的区域,分别称作MST域和SST域。在MST域内部运行多实例化的生成树,在MST域的边缘运行RSTP兼容的内部生成树IST(Internal Spanning Tree)。
图3-6 MSTP工作原理示意图
图3-6中间的MST域内的交换机间使用MSTP BPDU交换拓扑信息, SST域内的交换机使用STP/RSTP/PVST+ BPDU交换拓扑信息。在MST域与SST域之间的边缘上,SST设备会认为对接的设备也是一台RSTP设备。而MST设备在边缘端口上的状态将取决于内部生成树的状态,也就是说端口上所有VLAN的生成树状态将保持一致。
MSTP设备内部需要维护的生成树包括若干个内部生成树IST,个数和连接了多少个SST域有关。另外,还有若干个多生成树实例MSTI(MultIPle Spanning Tree Instance)确定的MSTP生成树,个数由配置了多少个实例决定。
MSTP相对于之前的种种生成树协议而言,优势非常明显。MSTP具有VLAN认知能力,可以实现负载均衡,可以实现类似RSTP的端口状态快速切换,可以捆绑多个VLAN到一个实例中以降低资源占用率。最难能可贵的是MSTP可以很好地向下兼容STP/RSTP协议。而且,MSTP是IEEE标准协议,推广的阻力相对小得多。
可见,各项全能的MSTP协议能够成为当今生成树发展的一致方向是当之无愧的。
3.7.4 配置STP、RSTP
1、 Spanning Tree 的缺省配置:
关闭STP,且STP Priority 是32768,STP port Priority 是128。
STP port cost 根据端口速率自动判断;
Hello Time: 2秒;
Forward-delay Time: 15秒;
Max-age Time: 20秒。
2、 打开、关闭Spanning Tree协议
可通过spanning-tree reset 命令让spanning tree参数恢复到缺省配置。
Switch(config)#Spanning-tree
如果您要关闭Spanning Tree协议,可用no spanning-tree 全局配置命令进行设置。
3、 配置Spanning Tree的类型
Switch(config)#
Spanning-tree mode STP/RSTP
4、 配置交换机优先级
Switch(config)#spanning-tree priority <0-61440> (“0”或“4096”的倍数、共16个、缺省32768)
如果要恢复到缺省值,可用 no spanning-tree priority全局配置命令进行设置。
5、 配置交换机端口优先级
Switch(config-if)#spanning-tree port-priority <0-240>
(“0”或“16”的倍数、共16个、缺省128)
如果要恢复到缺省值,可用 no spanning-tree port-priority接口配置命令进行设置。
6、 STP、RSTP信息显示
SwitchA#show spanning-tree
SwitchA#show spanning-tree interface fastthernet 0/1
!显示交换机接口
3.8 以太网链路聚合
3.8.1 网络压力
对于局域网交换机之间以及从交换机到高需求服务的许多网络连接来说,100M甚至1Gbps的带宽是不够的。链路聚合技术(也称端口聚合)帮助用户减少了这种压力。
802.3ad 标准定义了如何将两个以上的以太网链路组合起来为高带宽网络连接实现负载共享、负载平衡以及提供更好的弹性。端口聚合将交换机上的多个端口在物理上连接起来,在逻辑上捆绑在一起,形成一个拥有较大宽带的端口,形成一条干路,可以实现均衡负载,并提供冗余链路。
Aggregate Port(以下简称AP)符合IEEE802.3ad标准,它可以把多个端口的带宽叠加起来使用,比如全双工快速以太网端口形成的AP最大可以达到800Mbps,或者千兆以太网接口形成的AP最大可以达到8Gbps。
1. 802.3ad的主要优点
1)链路聚合技术(也称端口聚合)帮助用户减少了这种压力。
2)802.3ad的另一个主要优点是可靠性。
3)链路聚合标准在点到点链路上提供了固有的、自动的冗余性。
3.8.2 流量平衡
AP根据报文的MAC地址或IP地址进行流量平衡,即把流量平均地分配到AP的成员链路中去。流量平衡可以根据源MAC地址、目的MAC地址或源IP地址/目的IP地址对。
3.8.3 配置aggregate port
1. 配置二层aggregate port
可以通过全局配置模式下的interface aggregateport命令手工创建一个AP。
无论二、三层物理接口,当把接口加入一个不存在的AP时,AP会被自动创建。
无论二、三层物理接口,都可以使用接口配置模式下的port-group命令将一个AP接口加入。
用户可以使用接口配置模式下的port-group命令,将一个以太网接口配置成一个AP的成员口。从特权模式出发,按以下步骤将以太网接口配置成一个AP接口的成员口。
Switch#configure terminal
Switch(config) # interface interface-id 选择端口,进入接口配置模式
Switch(config-if)#port-group port-group-number将该接口加入一个AP(如果这个AP 不存在,则同时创建这个AP)。
Switch(config-if-range)#end 回到特权模式
在接口配置模式下no port-group命令删除一个AP成员接口。
下面的例子是将二层的以太网接口0/1和0/2配置成二层AP 5成员。
Switch#configure terminal
Switch(config) # interface range fastethernet 0/1-2
Switch(config-if-range)#port-group 5
Switch(config-if-range)#end
可以在全局配置模式下使用命令interface aggregatepor n(n为AP号)来直接创建一个AP(如果AP n不存在)。
2. 配置三层aggregate
默认情况下,一个aggregate port是一个二层的AP,如果要配置一个三层AP,则需要进行下面的操作。
从特权模式出发,按以下步骤将一个AP接口配置成三层AP接口。
Switch#configure terminal
Switch(config) #interface aggregate-port aggregate-port-number 创建一个AP
Switch(config-if)#no switchport 将该接口设置为三层模式;
Switch(config-if)#ip address ip-address mask 给AP接口配置IP地址和子网掩码;
Switch(config-if)#end 回到特权模式。
下面的例子是如何配置一个三层AP接口(AP3),并且给它配置IP地址(192.168.1.1)。
Switch#configure terminal
Switch(config) #interface aggregate-port 3
Switch(config-if)#no switchport
Switch(config-if)#ip address 192.168.1.1 255.255.255.0
Switch(config-if)#end
3. 配置AP 的流量平衡算法
Switch(config) # aggregateport load-balance {dst-mac |src-mac |ip}
dst-mac 根据报文的目的MAC地址进行流量分配。
src-mac 根据报文的源MAC地址进行流量分配。
ip 根据源IP与目的IP进行流量分配。在三层条件下,建议采用此流量平衡的方式。
要将AP 的流量平衡设置恢复到缺省值,可以在全局配置模式下使用:
no aggregateport loag-balance 命令。
4. 显示aggregate port
可以在特权模式下显示AP 设置。
show aggregateport [port-number]{load-balance| summary}
5. 配置aggregate port的注意事项
1) 组端口的速度必须一致;
2) 组端口必须属于同一个VLAN;
3)
3)组端口使用的传输介质相同;
4)组端口必须属于同一层次,并与AP也要在同一层次。