LACP链路聚合控制协议

来源: https://www.cnblogs.com/taosim/articles/4378691.html

http://storage.chinabyte.com/64/12541564.shtml

http://storage.chinabyte.com/64/12541564.shtml

在过去的10年里,以太网线速(Line Rate)的发展从10Mb/s -> 100Mb/s -> 1Gb/s -> 10Gb/s(40GE和100GE也已出现),而然有的时候single 10GE link依然无法满足VLAN Trunk或iSCSI/FCoE流量对带宽和冗余性的需求。于是链路聚合(Link Aggregation,LA)技术出现了,这是一种将多个网络链路合并成单条逻辑链路,从而提供更大带宽和冗余的网络技术。

  注:本文多次用到Link Aggregation、Port Aggregation、Port Channel、Link Channel等术语,如未特别指出,可认为是同一个意思。

  Link Aggregation

  不同厂商交换机的端口聚合(Port Aggregation,PA)采用不同术语,Cisco的EtherChannel,Brocade的Brocade LAG,还有基于标准的IEEE 802.3ad LACP(Link Aggregation Control Protocol,该标准在2008年被转入IEEE 802.1ax),LACP可以动态配置端口聚合,且不依赖任何厂商,因此大部分以太网交换机都支持该协议。所有这些实现的目标都是一致的,即将两个或多个端口绑定在一起作为一个高带宽的逻辑端口来提升链路速度、冗余、弹性和负载均衡。技术上来讲,我们可以在交换机之间使用多个端口创建并行trunk链路,但生成树协议(STP)将其视为环路,从而会关闭所有可能造成环路的链接。端口聚合生成single logical link,不会造成环路,可作为Access Port(连接主机)或Trunk Port(承载Multi-VLAN traffic)使用。

  在使用LA技术之前,有必要了解如下技术属性:

  兼容性/正常运行:聚合链路每一端的交换机或主机必须理解或使用公共的端口聚合技术

  负载均衡:通过哈希算法在single link中区分不同的traffic pattern来实现

  链路冗余:如果逻辑链路中的一条物理链路故障,流量转走临近的链路,故障转移时间一般小于几个毫秒。一旦失败链路恢复,流量会重新分布。

  在选择端口做端口聚合或端口隧道(port channel)时,每个端口需要互相兼容,可以在允许将端口加入端口聚合组(Port Channel Group)之前,检查端口的运行属性,兼容性检查通常包括以下接口运行属性:

  Port Mode

  Access VLAN

  Trunk native VLAN

  允许的VLAN列表

  Speed

  Link Aggregation Control Protocol (LACP)

  LACP是通过向所有启用LACP协议的链路发送LACPDU Frame来工作的,如果发现链路另一端的设备也启用了LACP,LACP将独自在同一条链路上发送Frame,使得两者能够发现它们之间的多条链路,并将它们合并成单条逻辑链路。

  LACP可以配置为两种模式中的一种:Active或Passive。在Active模式下,LACP主动在配置的链路上发送Frame;在Passive模式下,LACP的反应是“speak when spoken to”,从而可以作为控制意外环路的一种方法(只要其他设备在Active模式下)。

  IEEE 802.3ad定义的LAC(Link Aggregation Group)是一个允许交换机自动协商端口绑定链路的协议,通过发送LACP Frame给Peer来实现。这些Frame在支持port channel的交换机端口之间进行交换,从而学习【邻居身份】以及【port group capability】并与本地交换机对比,然后LACP为port channel的端点分配角色。

  系统优先级最低的交换机根据端口优先级决定哪些端口可在某一时段作为端口聚合的Active port。例如,一组8 link的port channel,在任何时候LACP选择4个优先级最高的端口作为Active port,通常数值越小的端口优先级越高。另外8条链路置于hot-standby状态,如果一条Active Link down,就会激活其它的链路。端口优先级是可配置的,如果没有配置,则使用不同厂商自己的默认值。如果端口使用了相同的值,厂商通常会实现一个“tie breaker”,比如lower port number作为Active port,即port 1/1 > port 1/5。

  Port Channel中的每一个端口必须分配同样且唯一的channel group number,LACP自动在【配置为使用LACP的端口上】配置一个等于channel group number的管理键值(Administrative key value),该管理键值定义了端口与其他端口聚合的能力(ability)。一个端口与其他端口做聚合的能力取决于带宽、双工模式、点对点或共享介质的状态。通道协商必须设置为ON(无条件通道;没有LACP协商),Passive(被动监听并等待询问)或Active(主动询问)

http://www.huawei.com/ecommunity/bbs/10215387.html

其他三个交换都是网关2层交换机带lacp功能,不是备用线路那种,都是叠加带宽的种类,实测有效,华为是三层交换机,华为启用lacp模式后就不能和原来的交换通讯,2台艾泰之间用的是端口汇聚不是链路汇聚特有技术和思科差不多的那种,虽然不能通讯,但是艾太的lacp界面里显示已经连接上了,

18.19是给服务器用的,服务器有双网口。。。4.8是连接华为的,对方端口上的数字如果是0标示端口协商未成功但状态为up,如果非0标识已经协商成功并会分配组

服务器和2层路由只要在这里显示都能通讯正常

http://jackwang713.blog.163.com/blog/static/1742984112012191121325/

工作中经常使用链路聚合,随着用户对网络管理性和可用性的要求越来越高,LACP逐渐成为链路聚合的主流。

传统的以太网链路聚合是纯静态方式,聚合两端的设备之间是不需要互通信息的,数据帧在转发时本地交换机只是依照自己的链路聚合算法将流量分担在每条静态聚合线路上,远端交换机无论是从那条聚合线路上收到的数据帧,都统一认为是来自于聚合端口。纯静态的链路聚合方式优点和缺点都非常明显,优点是不存在兼容性问题,端口聚合只是本地属性与远端无关,对聚合端口的配置要求也较低,甚至有可能将不同速率的端口聚合在一起。缺点是由于两端设备互相不交换信息,如果在设备间还存在中间环节(如光纤收发器、协议转换器、安全设备等)中间环节出现问题,还有存在光纤单向通讯的情况下,会出现交换机无法感知链路故障,仍然向已经中断的线路分发流量的现象,这种部分聚合端口无法正常工作后流量仍然沿着其转发的情况,会造成部分节点通讯中断(具体要看交换机负载分担的算法),出现这种故障对于网管人员来说是比较棘手的,故障比较隐蔽不容易察觉,排查难度也较大。

基于 IEEE802.3ad标准的 LACP(Link Aggregation Control Protocol,链路聚合控制协议)协议是一种实现链路动态聚合的协议,运行该协议的设备之间通过互发 LACPDU(Link Aggregation Control Protocol Data Unit,链路聚合控制协议数据单元)来交互链路聚合的相关信息。

实现的主要功能:

1、有了LACP后,两端交换机可以交换信息,如果某条线路中间环节出现问题或者单向通讯,信息交换就会停止,等待计时器超时后,该条问题线路就会自动被撤出聚合组。个人认为这个功能是最主要的,是解决实际问题的。

2、 使用动态LACP,只需要在端口上使能LACP,不需要单独建立聚合组,端口连接后会根据LACPDU获得的信息实现自动聚合功能,例如交换机A需要与交换机B和C分别建立两条线路的聚合连接,只需要在交换机A上开启四个端口的LACP,在B和C上分别开启两个端口的LACP,然后进行物理连接即可,也就是不需要指定交换机A的哪两个接口对应交换机B,哪两个接口对应交换机C。

实际上对于LACP一直想好好研究一下,曾经在两台可以聚合的交换机之间串一台交换机进行测试,发现LACPDU根本就无法穿过中间的交换机,一般厂家都会建议LACP两端直接连接(废话,如果直接连接我还要LACP干啥呀),实际上LACPDU这个数据帧目的MAC地址是一个特殊组播MAC,与生成树的BPDU类似,通常可网管的二层交换机或三层交换机收到这类的数据帧会送给自己上层CPU进行处理,不会继续转发(这也是二层环境下黑客攻击交换机的一个重要手段)。

直到最近在做某防火墙测试时,发现其可以正常二层透传BPDU,进而对LACP进行测试,发现也可以正常通过,再后来就进行了如下实验:

实验一:没有防火墙5800和470直接连接,LACP聚合正常。

实验二(蓝色字体标示):中间接上防火墙后,LACPDU可以看到,LACP不能正常聚合:

排查时发现从LACPDU上可以正常看到对方MAC、优先级、端口号等信息,但两个接口的操作KEY不一致,这时突然想起来470是百兆交换机,5800和防火墙是千兆自适应接口,如图连接后缺省配置,5800两个接口一个是1000M全双工,一个是100M全双工,所以本端的操作KEY肯定不一致,两条线路自然不能聚合在一起。

实验三(红色字体标示):将所有接口都改为手工100M全双工,LACP聚合正常。这时如果拔掉470到防火墙之间的连线,5800会在一分多种后(时间有点长?应该在三次长超时之内),将自己与防火墙连接的线路撤出链路聚合组。

通过查找部分资料对LACP有了进一步的了解:

1、启用LACP的接口会发送LACPDU报文,包含本机的MAC地址,优先级,接口号,操作key等内容,双方都收到LACPDU后对方的情况就都掌握了。

2、需要聚合的两端交换机按照协议规范先选出一台交换机,在选出一个参考端口。

3、根据这个参考端口,这台交换机确定那些端口满足条件可以聚合,并将状态消息传递到对端。

4、对端根据收到的状态最终确定自己那些端口可以聚合。

5、LACP工作原理要比想象中复杂的多,可以看看关于多个状态机的内容。

下面是当时做实验时的信息:

[H3C]dis link-aggregation ver 
Loadsharing Type: Shar -- Loadsharing, NonS -- Non-Loadsharing 
Port Status: S -- Selected, U -- Unselected 
Flags:  A -- LACP_Activity, B -- LACP_Timeout, C -- Aggregation, 
        D -- Synchronization, E -- Collecting, F -- Distributing, 
        G -- Defaulted, H -- Expired

Aggregation Interface: Bridge-Aggregation2 
Aggregation Mode: Dynamic 
Loadsharing Type: Shar 
System ID: 0x8000, 3822-d673-9260 
Local: 
  Port             Status  Priority Oper-Key  Flag 
-------------------------------------------------------------------------------- 
  GE1/0/5          S       32768    3         {ACDEF} 
  GE1/0/6          S       32768    3         {ACDEF} 
Remote: 
  Actor            Partner Priority Oper-Key  SystemID               Flag 
-------------------------------------------------------------------------------- 
  GE1/0/5          6       32768    8193      0x8000, 000c-f83c-2da0 {CDEF} 
  GE1/0/6          5       32768    8193      0x8000, 000c-f83c-2da0 {CDEF}

1、两条线路正常聚合

<H3C>debug link-aggregation lacp fsm all 
<H3C>debug link-aggregation lacp packet all

*Apr 26 16:42:09:042 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.RX.0-16914315: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Collector: type=3, len=16, col-max-delay=0x1 
Terminator: type=0, len=0 
*Apr 26 16:42:09:583 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.RX.0-16914316: 
CURRENT-->CURRENT, PDU_Indicate 
*Apr 26 16:42:09:849 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-16915119: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:42:10:019 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-16915119: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:42:10:180 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.TX.0-16915119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
<H3C> 
*Apr 26 16:42:26:848 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-16932118: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:42:27:019 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-16932118: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:42:27:179 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-16932119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
*Apr 26 16:42:27:720 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.RX.0-16932318: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x3c 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x3d 
Collector: type=3, len=16, col-max-delay=0x1 
Terminator: type=0, len=0 
*Apr 26 16:42:28:260 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.RX.0-16932318: 
CURRENT-->CURRENT, PDU_Indicate 
*Apr 26 16:42:39:045 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.RX.0-16944318: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Collector: type=3, len=16, col-max-delay=0x1 
Terminator: type=0, len=0

注意黑体部分,网络稳定的时候LACPDU,每隔30秒发一次。 
*Apr 26 16:42:39:585 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.RX.0-16944318: 
CURRENT-->CURRENT, PDU_Indicate 
*Apr 26 16:42:39:849 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-16945118: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:42:40:019 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-16945119: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:42:40:189 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.TX.0-16945119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0

*Apr 26 16:42:56:848 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-16962118: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expireda 
*Apr 26 16:42:57:036 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-16962119: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeoutt 
*Apr 26 16:42:57:197 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-16962119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0e 
*Apr 26 16:42:57:737 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.RX.0-16962323: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x3c 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x3d 
Collector: type=3, len=16, col-max-delay=0x1 
Terminator: type=0, len=0

*Apr 26 16:42:58:278 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.RX.0-16962323: 
CURRENT-->CURRENT, PDU_Indicate         ^

*Apr 26 16:43:09:047 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.RX.0-16974320: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Collector: type=3, len=16, col-max-delay=0x1 
Terminator: type=0, l    
*Apr 26 16:43:09:588 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.RX.0-16974320: 
CURRENT-->CURRENT, PDU_Indicatedis time 
*Apr 26 16:43:09:853 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-16975119: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:43:10:024 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-16975119: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:43:10:194 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.TX.0-16975119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0q 
  
[H3C]dis time all 
Current time is 16:43:15 4/26/2000 Wednesday 
2、在这个时间点上拔掉一根线(防火墙到470)

*Apr 26 16:43:26:848 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-16992118: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:43:27:019 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-16992118: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:43:27:179 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-16992119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
*Apr 26 16:43:39:049 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.RX.0-17004323: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Collector: type=3, len=16, col-max-delay=0x1 
Terminator: type=0, len=0 
*Apr 26 16:43:39:590 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.RX.0-17004323: 
CURRENT-->CURRENT, PDU_Indicate 
*Apr 26 16:43:39:848 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-17005118: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:43:40:019 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-17005118: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:43:40:179 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.TX.0-17005119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
*Apr 26 16:43:56:848 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17022118: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:43:57:019 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17022118: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:43:57:179 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-17022119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0

拔掉线以后第一次发出LACPDU

*Apr 26 16:44:09:052 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.RX.0-17034326: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Collector: type=3, len=16, col-max-delay=0x1 
Terminator: type=0, len=0 
*Apr 26 16:44:09:593 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.RX.0-17034326: 
CURRENT-->CURRENT, PDU_Indicate 
*Apr 26 16:44:09:848 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-17035118: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:44:10:019 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-17035118: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:44:10:179 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.TX.0-17035119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
*Apr 26 16:44:26:848 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17052118: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:44:27:020 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17052118: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:44:27:180 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-17052119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0

拔掉线以后第二次发出LACPDU,与第一次间隔时间30秒 
*Apr 26 16:44:27:848 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.RX.0-17053118: 
CURRENT-->EXPIRED, CurrentWaitTimer_Expired 
*Apr 26 16:44:28:019 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17053118: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:44:28:189 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17053119: 
PERIODIC_TX-->FAST_PERIODIC, Short_Timeout 
*Apr 26 16:44:28:359 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.MUX.0-17053119: 
COLLECTING_DISTRIBUTING-->ATTACHED, Partner_Outsync 
*Apr 26 16:44:28:540 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PARTNER-CHURN.0-17053119: 
NO_PARTNER_CHURN-->PARTNER_CHURN_MONITOR, Partner_Outsync 
*Apr 26 16:44:28:740 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-17053119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x8d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x36 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
*Apr 26 16:44:29:280 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17054118: 
FAST_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:44:29:451 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17054118: 
PERIODIC_TX-->FAST_PERIODIC, Short_Timeout 
*Apr 26 16:44:29:621 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-17054119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x8d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x36 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0

拔掉线以后第三次发出LACPDU,与第二次间隔二秒左右。 
*Apr 26 16:44:30:162 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17055118: 
FAST_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:44:30:332 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17055118: 
PERIODIC_TX-->FAST_PERIODIC, Short_Timeout 
*Apr 26 16:44:30:512 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-17055119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x8d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x36 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
*Apr 26 16:44:31:053 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17056118: 
FAST_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:44:31:223 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17056118: 
PERIODIC_TX-->FAST_PERIODIC, Short_Timeout 
*Apr 26 16:44:31:393 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-17056119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x8d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x5, state=0x36 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
*Apr 26 16:44:31:934 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.RX.0-17056119: 
EXPIRED-->DEFAULTED, CurrentWaitTimer_Expired 
*Apr 26 16:44:32:104 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PARTNER-CHURN.0-17056119: 
PARTNER_CHURN_MONITOR-->NO_PARTNER_CHURN, Partner_Insync 
*Apr 26 16:44:32:304 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.PTX.0-17056119: 
FAST_PERIODIC-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:44:32:475 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.MUX.0-17056119: 
ATTACHED-->COLLECTING_DISTRIBUTING, Partner_Insync 
*Apr 26 16:44:32:655 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-17056119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x7d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=0000-0000-0000, key=0x0, pri=0x8000, port-index=0x0, state=0x38 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0
 
#Apr 26 16:44:33:186 2000 H3C LAGG/1/AggPortInactive2: 
Trap 1.3.6.1.4.1.25506.8.25.2.3<hh3cAggPortInactiveNotification2>: Aggregation Group 2: port member 9437189 becomes INACTIVE! 
%Apr 26 16:44:33:417 2000 H3C LAGG/5/LAGG_INACTIVE_PARTNER: Member port GigabitEthernet1/0/6 of aggregation group BAGG2 becomes INACTIVE because the configuration of its partner is improper for aggregation.

拔掉线以后第四次发出LACPDU,与第三次间隔四秒左右(注意一下这次对端MAC地址等内容都清零了)发现问题了,将1/0/6撤出聚合组了。

*Apr 26 16:44:33:687 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.MUX.0-17058128: 
COLLECTING_DISTRIBUTING-->ATTACHED, Unselected 
*Apr 26 16:44:33:858 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.MUX.0-17058128: 
ATTACHED-->DETACHED, Unselected 
*Apr 26 16:44:34:008 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/6.ACTOR-CHURN.0-17058133: 
NO_ACTOR_CHURN-->ACTOR_CHURN_MONITOR, Actor_Outsync 
*Apr 26 16:44:34:199 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/6.TX.0-17058133: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x6, state=0x45 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=0000-0000-0000, key=0x0, pri=0x8000, port-index=0x0, state=0x38 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
[H3C] 
*Apr 26 16:44:39:055 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.RX.0-17064328: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Collector: type=3, len=16, col-max-delay=0x1 
Terminator: type=0, len=0 
[H3C] 
*Apr 26 16:44:39:595 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.RX.0-17064328: 
CURRENT-->CURRENT, PDU_Indicatebaxian 
*Apr 26 16:44:39:848 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-17065119: 
SLOW_PERIODIC-->PERIODIC_TX, PeriodTimer_Expired 
*Apr 26 16:44:40:019 2000 H3C LAGG/7/LAGG_DEBUG: FSM.GigabitEthernet1/0/5.PTX.0-17065119: 
PERIODIC_TX-->SLOW_PERIODIC, Long_Timeout 
*Apr 26 16:44:40:189 2000 H3C LAGG/7/LAGG_DEBUG: PACKET.GigabitEthernet1/0/5.TX.0-17065119: 
size=110, subtype=1, version=1 
Actor: type=1, len=20, sys-pri=0x8000, sys-mac=3822-d673-9260, key=0x3, pri=0x8000, port-index=0x5, state=0x3d 
Partner: type=2, len=20, sys-pri=0x8000, sys-mac=000c-f83c-2da0, key=0x2001, pri=0x8000, port-index=0x6, state=0x3c 
Collector: type=3, len=16, col-max-delay=0x0 
Terminator: type=0, len=0 
[H3C]dis link ver

Loadsharing Type: Shar -- Loadsharing, NonS -- Non-Loadsharing 
Port Status: S -- Selected, U -- Unselected 
Flags:  A -- LACP_Activity, B -- LACP_Timeout, C -- Aggregation, 
        D -- Synchronization, E -- Collecting, F -- Distributing, 
        G -- Defaulted, H -- Expired

Aggregation Interface: Bridge-Aggregation2 
Aggregation Mode: Dynamic 
Loadsharing Type: Shar 
System ID: 0x8000, 3822-d673-9260 
Local: 
  Port             Status  Priority Oper-Key  Flag 
-------------------------------------------------------------------------------- 
  GE1/0/5          S       32768    3         {ACDEF} 
  GE1/0/6          U       32768    3         {ACG} 
Remote: 
  Actor            Partner Priority Oper-Key  SystemID               Flag 
-------------------------------------------------------------------------------- 
  GE1/0/5          6       32768    8193      0x8000, 000c-f83c-2da0 {CDEF} 
  GE1/0/6          0       32768    0         0x8000, 0000-0000-0000 {DEF}

[H3C]dis time all 
Current time is 16:44:50 4/26/2000 Wednesday

文章最后是部分摘录的资料(有点乱主要是给自己备忘用的)

采用 LACP 聚合的双方(分别称为 Actor 和Partner)通过称之为 LACPDU(LACP Data Unit)的协议报文来交互本端(Actor)和对端(Partner)的聚合信息,以对整个链路聚合的认识达成一致。协议报文主要包含以下信息:本端和对端系统优先级、本端和对端系统 ID、本端和对端的端口操作 key、本端和对端的端口优先级、本端和对端的端口 ID、本端和对端的端口状态。聚合的双方就根据这些信息,按照一定的选择算法选择合适的链路,控制聚合的状态。被选中的成员链路可以正常转发流量,而未被选中的成员链路将被置为阻塞状态,不能转发任何流量。聚合链路的总带宽等于被选中的成员链路的带宽之和,并且聚合链路上的流量会按照一定的规则分担到各个选中的成员链路上,由于 LACPDU 是周期性交互,即聚合的双方每隔一段时间便互发一次协议报文,所以当有选中成员链路因为某种原因不能工作时,链路聚合可以很快的感知到,并重设链路状态,置该链路为阻塞,流量被重分配给其他选中成员链路。这样就实现了增加带宽,链路动态备份的功能。

使能某端口的 LACP 协议后,该端口将通过发送 LACPDU 向对端通告自己的系统LACP协议优先级、系统 MAC、端口的 LACP协议优先级、端口号和操作 Key。对端接收到 LACPDU后,将其中的信息与其它端口所收到的信息进行比较,以选择能够处于 Selected状态的端口,从而双方可以对端口处于 Selected状态达成一致。 操作 Key是在链路聚合时,聚合控制根据端口的配置(即速率、双工模式、up/down 
状态、基本配置等信息)自动生成的一个配置组合。在聚合组中,处于 Selected状态的端口有相同的操作 Key。

LACP 超时时间是动态聚合组内的成员端口等待接收 LACPDU 的超时时间。在三倍 LACP 超时时间之后,如果本端成员端口仍未收到来自对端的 LACPDU,则认为对端成员端口已失效。LACP超时间只有短超时(1秒)和长超时(30秒)两种取值。 在通讯稳定情况下使用长超时,出现问题后为了加快状态机转换的效率使用短超时。

利用LACPDU的基本字段可以实现LACP协议的基本功能,基本字段包含以下信息:系统LACP优先级、系统MAC地址、端口LACP优先级、端口编号和操作Key。 
动态聚合组内的成员端口会自动使能LACP协议,并通过发送LACPDU向对端通告本端的上述信息。当对端收到该LACPDU后,将其中的信息与本端其它成员端口收到的信息进行比较,以选择能够处于选中状态的成员端口,使双方可以对各自接口的选中/非选中状态达成一致,从而决定哪些链路可以加入聚合组以及某链路何时可以加入聚合组。

选择参考端口 
(1)  首先,从聚合链路的两端选出设备 ID(由系统的 LACP优先级和系统的 MAC地址共同构成)较小的一端:先比较两端的系统 LACP优先级,优先级数值越小其设备 ID越小;如果优先级相同再比较其系统 MAC地址,MAC地址越小其设备 ID越小。

(2)  其次,对于设备 ID较小的一端,再比较其聚合组内各成员端口的端口 ID(由端口的 LACP优先级和端口的编号共同构成):先比较端口的 LACP优先级,优先级数值越小其端口 ID越小;如果优先级相同再比较其端口号,端口号越小其端口 ID越小。端口 ID最小的端口作为参考端口。

与此同时,设备 ID 较大的一端也会随着对端成员端口状态的变化,随时调整本端各成员端口的状 
态,以确保聚合链路两端成员端口状态的一致。

动态链路聚合是一个完全的事件驱动系统,它的整个工作过程中的每个动作都是由事件触发的,并且这些事件的发生的顺序和时间是随机的,事件能以任何顺序、在任何时刻出现。而对于这种系统,有限状态机是一种最直观和有效的方法。为了能够高效稳定的控制动态链路聚合的运行,本文以 802.3ad 的LACP 协议为基础,运用有限状态机方法,通过一组状态机来管理和控制 LACP 协议的运转,主要有 RX状态机(Receive machine)、PTX 状态机(PeriodicTransmission machine) 、 MUX 状态机 (Mux machine)和TX 状态机(Transmit machine)。 它们在加入聚合链路的每个成员端口都会运行,这一组状态机控制 LACP 的各个方面,包括本端 LACP 协议报文的发送及发送的周期、解析收到的对端 LACP 协议报文、调整链路的状态、处理各种异常情况等等。它是实现动态链路聚合的核心模块之一。

http://xjsunjie.blog.51cto.com/999372/1614304

在路由/交换领域,VLAN的中继端口叫做trunk。trunk技术用在交换机之间互连,使不同VLAN通过共享链路与其它交换机中的相同VLAN通信。交换机之间互连的端口就称为trunk端口。trunk是基于OSI第二层数据链路层(DataLinkLayer)的技术。trunk不能实现不同VLAN间通信,不同VLAN之间通信,需要通过三层设备(路由/三层交换机)来实现。

LACP,基于IEEE802.3ad标准的LACP(Link Aggregation Control Protocol,链路汇聚控制协议)是一种实现链路动态汇聚的协议。LACP协议通过LACPDU(Link Aggregation Control Protocol Data Unit,链路汇聚控制协议数据单元)与对端交互信息。启用某端口的LACP协议后,该端口将通过发送LACPDU向对端通告自己的系统优先级、系统MAC地址、端口优先级、端口号和操作Key。对端接收到这些信息后,将这些信息与其它端口所保存的信息比较以选择能够汇聚的端口,从而双方可以对端口加入或退出某个动态汇聚组达成一致。端口汇聚是将多个端口汇聚在一起形成一个汇聚组,以实现出/入负荷在汇聚组中各个成员端口中的分担,同时也提供了更高的连接可靠性。

E-trunk与Eth-trunk都是一种链路聚合技术, 那么E-trunk与Eth-trunk又有什么区别呢?

Eth-Trunk:一般指同一设备的链路聚合

一台交换机将这多个接口捆绑,形成一个Eth-Trunk接口,从而实现了增加带宽和提高可靠性的目的。

Trunk接口连接的链路可以看成是一条点到点的直连链路。

Trunk的优势在于:

  • 负载分担

    通过Trunk接口可以实现负载分担。在一个Eth-Trunk接口内,可以实现流量负载分担。

  • 提高可靠性

    当某个成员接口连接的物理链路出现故障时,流量会切换到其他可用的链路上,从而提高整个Trunk链路的可靠性。

  • 增加带宽

    Trunk接口的总带宽是各成员接口带宽之和。

如果是两台交换机做堆叠,则端口的链路聚合为跨框的Eth-Trunk(跨不同背板或业务板)

E-Trunk:一般指跨设备链路聚合

E-Trunk(Enhanced Trunk)是一种实现跨设备链路聚合的机制,基于LACP(单台设备链路聚合的标准)进行了扩展,能够实现多台设备间的链路聚合。从而把链路可靠性从单板级提高到了设备级。

E-Trunk机制主要应用于CE双归接入VPLS、VLL、PWE3网络时,CE与PE间的链路保护以及对PE设备节点故障的保护。在没有使用E-Trunk前,CE通过Eth-Trunk链路只能单归到一个PE设备。如果Eth-Trunk出现故障或者PE设备故障,CE将无法与PE设备继续进行通信。使用E-Trunk后,CE可以双归到PE上,从而实现设备间保护。

如下图所示:

  如果两台设备做的CSS集群,那么两台设备可以看作是一台设备,这两台物理设备之间的链路聚合是通过Eth-trunk实现的,相当于同一台设备的链路聚合,而非跨设备的链路聚合。

 

附两个举例:

基于堆叠的二层架构数据中心网络部署

产品:华为CE12800/CE6800/CE5800系列产品

如下图所示的数据中心组网,采用接入层+核心层的两层方式部署。为了简化网络并提高可靠性,核心层由两台CE12800组成CSS,接入层由多台CE6800组成iStack。接入层与核心层之间通过跨设备Eth-Trunk连接,消除二层环路。同时,通过Eth-Trunk的流量本地优先转发功能减少框间链路的带宽承载压力。核心层通过创建VRF隔离业务网段路由与公网路由,采用旁挂方式部署防火墙,两台防火墙进行双机热备份,保证高可靠性。

基于堆叠的三层架构数据中心网络部署

产品:华为CE12800/CE6800/CE5800系列产品

如下图所示的三层数据中心组网中,核心层由两台CE12800组成,两台设备间通过2条10GE链路聚合,从而保证链路的高可靠性。汇聚层采用CE12800交换机堆叠实现冗余备份,堆叠与上下游设备间通过跨框Eth-Trunk连接。同时,通过Eth-Trunk的流量本地优先转发功能减少框间链路的带宽承载压力。汇聚层通过创建VRF隔离业务网段路由与公网路由,采用旁挂方式部署防火墙,两台防火墙进行双机热备份,保证高可靠性。

补充:

iStack堆叠是指将多台支持堆叠特性的交换机设备组合在一起,从逻辑上组合成一台整体交换设备。iStack是一种虚拟化技术,在不改变网络物理拓扑连接结构条件下,将网络同一层的多台设备虚拟化成单台逻辑设备,达到简化网络结构、简化网络协议部署、提高网络可靠性和可管理性的目的。iStack这种虚拟设备既具有盒式设备的低成本优点,又具有框式设备的扩展性以及高可靠性优点。

网络横向虚拟化示例

本文出自 “滴水穿石孙杰” 博客,请务必保留此出处http://xjsunjie.blog.51cto.com/999372/1614304

http://zh.wikipedia.org/wiki/%E9%93%BE%E8%B7%AF%E8%81%9A%E5%90%88

链路聚合英语:Link Aggregation)是一个计算机网络术语,又称Trunk,是指将多个物理端口捆绑在一起,成为一个逻辑端口,以实现出/ 入流量吞吐量在各成员端口中的负荷分担,交换机根据用户配置的端口负荷分担策略决定报文从哪一个成员端口发送到对端的交换机。当交换机检测到其中一个成员端口的链路发生故障时,就停止在此端口上发送报文,并根据负荷分担策略在剩下链路中重新计算报文发送的端口,故障端口恢复后再次重新计算报文发送端口。链路聚合在增加链路带宽、实现链路传输弹性和工程冗余等方面是一项很重要的技术。

进一步用来描述该方法伞形术语还包括port trunking[1]link bundling[2]以太网/网络/ NIC绑定Ethernet/network/NIC bonding),[1]网卡绑定NIC teaming)。这些伞形术语不仅包括与供应商无关的标准,如链路聚合控制协议(LACP)用于以太网IEEE802.1ax或以前的IEEE802.3ad的定义,而且包括各种专利的解决方案。

https://www.freebsd.org/doc/zh_CN.UTF-8/books/handbook/network-aggregation.html

32.6. 链路聚合与故障转移

Written by Andrew Thompson.

32.6.1. 介绍

使用 lagg(4) 接口, 能够将多个网络接口聚合为一个虚拟接口, 以提供容灾和高速连接的能力。

32.6.2. 运行模式

Failover (故障转移)

只通过主网口收发数据。 如果主网口不可用, 则使用下一个激活的网口。 您在这里加入的第一个网口便会被视为主网口; 此后加入的其他网口, 则会被视为故障转移的备用网口。 如果发生故障转移之后, 原先的网口又恢复了可用状态, 则它仍会作为主网口使用。

Cisco® Fast EtherChannel®

Cisco® Fast EtherChannel® (FEC) 是一种静态配置, 并不进行节点间协商或交换以太网帧来监控链路情况。 如果交换机支持 LACP, 则应使用后者而非这种配置。

FEC 将输出流量在激活的网口之间以协议头散列信息为依据分拆, 并接收来自任意激活网口的入流量。 散列信息包含以太网源地址、 目的地址, 以及 (如果有的话) VLAN tag 和 IPv4/IPv6 源地址及目的地址信息。

LACP

支持 IEEE® 802.3ad 链路聚合控制协议 (LACP) 和标记协议。 LACP 能够在节点与若干链路聚合组之间协商链路。 每一个链路聚合组 (LAG) 由一组相同速度、 以全双工模式运行的网口组成。 流量在 LAG 中的网口之间, 会以总速度最大的原则进行分摊。 当物理链路发生变化时, 链路聚合会迅速适应变动形成新的配置。

LACP 也是将输出流量在激活的网口之间以协议头散列信息为依据分拆, 并接收来自任意激活网口的入流量。 散列信息包含以太网源地址、 目的地址, 以及 (如果有的话) VLAN tag 和 IPv4/IPv6 源地址及目的地址信息。

Loadbalance (负载均衡)

这是 FEC 模式的别名。

Round-robin (轮转)

将输出流量以轮转方式在所有激活端口之间调度, 并从任意激活端口接收进入流量。 这种模式违反了以太网帧排序规则, 因此应小心使用。

32.6.3. 例子

例 32.1. 与 Cisco® 交换机配合完成 LACP 链路聚合

在这个例子中, 我们将 FreeBSD 的两个网口作为一个负载均衡和故障转移链路聚合组接到交换机上。 在此基础上, 还可以增加更多的网口, 以提高吞吐量和故障容灾能力。 由于以太网链路上两节点间的帧序是强制性的, 因此两个节点之间的连接速度, 会取决于一块网卡的最大速度。 传输算法会尽量采用更多的信息, 以便将不同的网络流量分摊到不同的网络接口上, 并平衡不同网口的负载。

在 Cisco® 交换机上将 FastEthernet0/1 和 FastEthernet0/2 这两个网口添加到 channel-group 1

interface FastEthernet0/1
channel-group 1 mode active
channel-protocol lacp

!
interface FastEthernet0/2
channel-group 1 mode active
channel-protocol lacp

使用 fxp0 和 fxp1 创建 lagg(4) 接口, 启用这个接口并配置 IP 地址 10.0.0.3/24

# ifconfig fxp0 up
# ifconfig fxp1 up
# ifconfig lagg0 create
# ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24

用下面的命令查看接口状态:

# ifconfig lagg0

标记为 ACTIVE 的接口是激活据合组的部分, 这表示它们已经完成了与远程交换机的协商, 同时, 流量将通过这些接口来收发。 在 ifconfig(8) 的详细输出中会给出 LAG 的标识。

lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether 00:05:5d:71:8d:b8
media: Ethernet autoselect
status: active
laggproto lacp
laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

如果需要查看交换机上的端口状态, 则应使用 show lacp neighbor 命令:

switch# show lacp neighbor
Flags: S - Device is requesting Slow LACPDUs
F - Device is requesting Fast LACPDUs
A - Device is in Active mode P - Device is in Passive mode Channel group 1 neighbors Partner's information: LACP port Oper Port Port
Port Flags Priority Dev ID Age Key Number State
Fa0/1 SA 32768 0005.5d71.8db8 29s 0x146 0x3 0x3D
Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D

如欲查看进一步的详情, 则需要使用 show lacp neighbor detail 命令。

如果希望在系统重启时保持这些设置, 应在 /etc/rc.conf 中增加如下配置:

ifconfig_fxp0="up"
ifconfig_fxp1="up"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24"
例 32.2. 故障转移模式

故障转移模式中, 当首选链路发生问题时, 会自动切换到备用端口。 首先启用成员接口, 接着是配置 lagg(4) 接口, 其中, 使用 fxp0 作为首选接口, fxp1 作为备用接口, 并在整个接口上配置 IP 地址 10.0.0.15/24

# ifconfig fxp0 up
# ifconfig fxp1 up
# ifconfig lagg0 create
# ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24

创建成功之后, 接口状态会是类似下面这样, 主要的区别是 MAC 地址和设备名:

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether 00:05:5d:71:8d:b8
inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet autoselect
status: active
laggproto failover
laggport: fxp1 flags=0<>
laggport: fxp0 flags=5<MASTER,ACTIVE>

系统将在 fxp0 上进行流量的收发。 如果 fxp0 的连接中断, 则 fxp1 会自动成为激活连接。 如果主端口的连接恢复, 则它又会成为激活连接。

如果希望在系统重启时保持这些设置, 应在 /etc/rc.conf 中增加如下配置:

ifconfig_fxp0="up"
ifconfig_fxp1="up"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24"
例 32.3. 有线网络和无线网络接口间的自动切换

对于使用笔记本的用户来说, 通常会希望使用无线网络接口作为备用接口, 以便在有线网络不可用时继续保持网络连接。 通过使用 lagg(4), 我们可以只使用一个 IP 地址的情况下, 优先使用性能和安全性都更好的有线网络, 同时保持通过无线网络连接来传输数据的能力。

要实现这样的目的, 就需要将用于连接无线网络的物理接口的 MAC 地址修改为与所配置的 lagg(4) 一致, 后者是从主网络接口, 也就是有线网络接口, 继承而来。

在这个配置中, 我们将优先使用有线网络接口 bge0 作为主网络接口, 而将无线网络接口 wlan0 作为备用网络接口。 这里的 wlan0 使用的物理设备是iwn0, 我们需要将它的 MAC 地址修改为与有线网络接口一致。 为了达到这个目的首先要得到有线网络接口上的 MAC 地址:

# ifconfig bge0
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
ether 00:21:70:da:ae:37
inet6 fe80::221:70ff:feda:ae37%bge0 prefixlen 64 scopeid 0x2
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active

您可能需要将 bge0 改为您系统上实际使用的接口, 并从输出结果中的 ether 这行找出有线网络的 MAC 地址。 接着是修改物理的无线网络接口, iwn0

# ifconfig iwn0 ether 00:21:70:da:ae:37

启用无线网络接口, 但不在其上配置 IP 地址:

# ifconfig wlan0 create wlandev iwn0 ssid my_router up

启用 bge0 接口。 创建 lagg(4) 接口, 其中 bge0 作为主网络接口, 而以 wlan0 作为备选接口:

# ifconfig bge0 up
# ifconfig lagg0 create
# ifconfig lagg0 up laggproto failover laggport bge0 laggport wlan0

新创建的接口的状态如下, 您系统上的 MAC 地址和设备名等可能会有所不同:

# ifconfig lagg0
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=8<VLAN_MTU>
ether 00:21:70:da:ae:37
media: Ethernet autoselect
status: active
laggproto failover
laggport: wlan0 flags=0<>
laggport: bge0 flags=5<MASTER,ACTIVE>

接着用 DHCP 客户端来获取 IP 地址:

# dhclient lagg0

如果希望在系统重启时保持这些设置, 应在 /etc/rc.conf 中增加如下配置:

ifconfig_bge0="up"
ifconfig_iwn0="ether 00:21:70:da:ae:37"
wlans_iwn0="wlan0"
ifconfig_wlan0="WPA"
cloned_interfaces="lagg0"
ifconfig_lagg0="laggproto failover laggport bge0 laggport wlan0 DHCP" http://support.huawei.com/ecommunity/bbs/10247554.html

交换机链路聚合手工模式和LACP模式的区别

链路聚合技术主要有以下三个优势: 
1、增加带宽 
链路聚合接口的最大带宽可以达到各成员接口带宽之和。 
2、提高可靠性 
当某条活动链路出现故障时,流量可以切换到其他可用的成员链路上,从而提高链 
路聚合接口的可靠性。 
3、负载分担 
在一个链路聚合组内,可以实现在各成员活动链路上的负载分担。

手工模式链路聚合:手工模式下,Eth-Trunk的建立、成员接口的加入由手工配置,没有链路聚合控制协议LACP的参与。当需要在两个直连设备间提供一个较大的链路带宽而设备又不支持LACP协议时,可以使用手工模式。手工模式可以实现增加带宽、提高可靠性、负载分担的目的。当一条链路故障时,故障链路无法转发数据,链路聚合组自动在剩余的两条活动链路中分担流量。手工模式Eth-Trunk可以完成多个物理接口聚合成一个Eth-Trunk口来提高带宽,同时能够检测到同一聚合组内的成员链路有断路等有限故障,但是无法检 
测到链路层故障、链路错连等故障。

LACP 模式链路聚合:为了提高Eth-Trunk的容错性,并且能提供备份功能,保证成员链路的高可靠性,出现了链路聚合控制协议LACP(Link Aggregation Control Protocol),LACP模式就是采用LACP 的一种链路聚合模式。 
LACP为交换数据的设备提供一种标准的协商方式,以供设备根据自身配置自动形成聚合链路并启动聚合链路收发数据。聚合链路形成以后,LACP负责维护链路状态,在聚合条件发生变化时,自动调整或解散链路聚合。

LACP链路聚合控制协议的更多相关文章

  1. 华为交换机以 LACP 模式实现链路聚合

    LACP 链路聚合模式简介 以太网链路聚合是指将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的.链路聚合分为手工模式和LACP模式. LACP模式需要有链路聚合控制协议LAC ...

  2. 配置交换机之间直连链路聚合-LACP模式

    组网图形 LACP模式链路聚合简介 以太网链路聚合是指将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的.链路聚合分为手工模式和LACP模式. LACP模式需要有链路聚合控制协 ...

  3. H3C链路聚合

    以太网链路聚合通过将多条以太网物理链路捆绑在一起形成一条以太网逻辑链路,实现增加链路带宽的目的,同时这些捆绑在一起的链路通过相互动态备份,可以有效地提高链路的可靠性. 一.基本概念 1.聚合接口/聚合 ...

  4. 实现不同VLAN间的通信(单臂路由和链路聚合)

    单臂路由与链路聚合 1.单臂路由 1.1 链路类型 1.2 子接口 2. 链路捆绑 1.单臂路由 是指在路由器的一个接口上通过配置子接口,实现原来相互隔离的不同VLAN(虚拟局域网)之间的互联互通. ...

  5. 关于在链路聚合下做smart,monitor link的转发测试

    关于在链路聚合下做smart,monitor link的转发测试 这次又要开始瞎折腾了.没事找事了.毕竟我还是很无聊的: 这个实验主要要涉及到以下几个方面: 1.gvrp的应用: 2.Smart Li ...

  6. HCNA配置静态LACP模式链路聚合

    1.静态LACP模式 静态LACP模式是一种利用LACP协议进行聚合参数协商.确定活动接口和非活动接口的链路聚合方式.该模式下,需手工创建Eth-Trunk,手工加入Eth-Trunk成员接口,由LA ...

  7. Eth-Trunk链路聚合配置

    Eth-Trunk概述 Eth-Trunk接口能够实现负载分担.增加带宽和提高可靠性 Eth-Trunk接口把多个物理接口捆绑成一个逻辑接口 Eth-Trunk接口的链路聚合模式 链路聚合模式 应用场 ...

  8. HCNA配置手工负载分担模式链路聚合

    一.配置手工负载分担模式链路聚合 链路聚合(Link Aggregation)是将—组物理接口捆绑在一起作为一个逻辑接口来增加带宽的一种方法,又称为多接口负载均衡组(Load Sharing Grou ...

  9. HCIA-Datacom 3.3 实验三:以太网链路聚合实验

    实验介绍 随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求.在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够 ...

随机推荐

  1. Spring的jdbcTemplate 与原始jdbc 整合c3p0的DBUtils 及Hibernate 对比 Spring配置文件生成约束的菜单方法

    以User为操作对象 package com.swift.jdbc; public class User { private Long user_id; private String user_cod ...

  2. ios xmppFramework框架的导入步骤和介绍

    一个将要开发xmpp的项目,建议在项目刚创建就导入框架,这样可以避免一些自己操作失误造成不必要的损失. xmpp中最常用的框架就是 xmppFrameWork 第一种方法直接拖 1> 拖入文件夹 ...

  3. vue登录插件引来的后续问题

    上次介绍了下写的登录弹框插件,过了几天发现点击去注册或者改密码的跳转失效.报错this.$router.push is not a function,继续打印this.$router也是undefin ...

  4. linux系统批量创建用户和生成8位随机密码

    1.1    脚本案例 批量创建20个用户,用户名为user1-user20,并生成8位随机登录密码,用户组采用键盘输入的方式,并将用户名及登录密码保存到/tmp/create_user.txt普通文 ...

  5. 列表,元组的操作,for循环

    1.列表 # li = ["wang","jian","wei"] # print(li) # 结果:['wang', 'jian', 'w ...

  6. SVN中Commit出现乱码的解决方案【转载】

    http://blog.csdn.net/thinkingcao/article/details/52797737 这几天在电脑上装了一个SVN,把Eclipse里面的工程全部Delete掉了,然后在 ...

  7. 以CentOS为操作系统的vps或服务器安装lnmp运行环境的方法

    安装步骤: 1.使用putty或类似的SSH工具登陆VPS或服务器: 登陆后运行:screen -S lnmp 如果提示screen: command not found 命令不存在可以执行:yum ...

  8. django-simple-captcha

    在注册页面生成验证码的时候,出现错误如下: build_attrs() takes from 1 to 2 positional arguments but 3 were given, 不知道为什么报 ...

  9. idea debug启动项目慢或者启动不了

    使用debug无法启动项目但是使用run就可以启动程序,而且启动比以前的debug模式快的多 原因: 启动不了的原因是在项目中的方法上打了断点,导致项目无法继续编译 取消方法断点就可以了 在idea官 ...

  10. 修改 cmd 字体为 Consolas

    windows 下的 cmd 窗口默认的字体有点难看,长时间使用操作 node.js 有点小疲劳,可以修改注册表替换字体为 Consolas,并且可以全屏 cmd 窗口,代码如下: Windows R ...