Um cabo só entre dois switches é um ponto único de falha e ainda limita a banda. Com dois cabos, você tem um loop, e o spanning tree vai fazer o papel dele e bloquear um dos dois, que fica parado. A agregação de links (link aggregation) resolve esse dilema: vários links paralelos viram um único link lógico, os dois cabos passam a carregar tráfego, e perder um deles reduz a capacidade, mas não derruba a conexão.

O que é um LAG (link aggregation group)

O padrão do define isso numa frase só: links full-duplex paralelos são "aggregated together to form a Link Aggregation Group (LAG), such that a MAC Client can treat the LAG as if it were a single link" (IEEE 802.1AX-2020). A Juniper aponta os dois benefícios: a agregação "effectively increases the uplink bandwidth", e "if one member link fails, the LAG continues to carry traffic over the remaining links" (Juniper, aggregated Ethernet).

Cada fabricante dá um nome diferente para a mesma coisa. A Arista fala em "link aggregation groups (LAGs, also called channel groups or port channels)" (Arista, port channels e LACP); a Cisco chama de EtherChannel ou port-channel, a Juniper, de interface aggregated , e o Linux, de bond. A ideia é a mesma, e equipamentos de fabricantes diferentes funcionam juntos quando as duas pontas falam o protocolo padrão.

Do 802.3ad ao 802.1AX

A agregação de links foi padronizada pela primeira vez como IEEE 802.3ad, aprovado "at the March 2000 IEEE Standards Board meeting" (IEEE 802.3ad). Mais tarde, ela saiu do padrão Ethernet: o pedido de autorização do projeto, de 2007, diz que o protocolo "defined in Clause 43 will be separated out into this new standard" (PAR do P802.1AX, 2007), e o IEEE 802.1AX-2008 foi aprovado em setembro de 2008 (IEEE 802.3ax/ay). A edição atual, o 802.1AX-2020, foi aprovada em 30 de janeiro de 2020 (IEEE 802.1AX-2020, como acima), e uma emenda de 2025, o 802.1AXdz, acrescenta modelos de dados YANG para a configuração (IEEE 802.1AXdz). Muita documentação de fabricante ainda fala em "802.3ad"; é o mesmo protocolo.

LACP: primeiro as duas pontas entram em acordo

O Link Aggregation Control Protocol () é o que torna um LAG seguro: as duas pontas trocam LACPDUs (LACP data units, as mensagens do protocolo) e só agregam os links em que ambas concordam. "Within LACP, the local end of a child link is known as the actor and the remote end of the link is known as the partner" (Juniper, LACP), ou seja, a ponta local é o actor, e a remota, o partner.

Cada ponta trabalha em um de dois modos. Uma porta em modo active "starts negotiations with other ports by sending LACP packets"; uma porta em modo passive "responds to LACP packets that it receives, but does not start LACP packet negotiation", o que significa que "a port in the passive mode cannot form an EtherChannel with another port that is also in the passive mode because neither port starts LACP negotiation" (Cisco, configuração de EtherChannels). A regra é: modo active em pelo menos uma das pontas, de preferência nas duas.

O que as duas pontas confirmam entre si é a identidade. Cada lado tem um system ID, formado por "LACP system priority and the switch or stack ", em que "numerically lower values have higher priority"; o sistema com o melhor ID "decides which ports are active and which are hot standby, based on its values for port priority and port number" (Cisco, como acima). As portas só entram no mesmo LAG quando coincidem o system ID e a key do actor e o system ID e a key do partner (HPE Aruba, LACP). É aí que está a proteção: um cabo ligado no switch errado traz um system ID de partner diferente e simplesmente fica fora do LAG.

O LACP faz parte dos "slow protocols" do IEEE, que usam todos o mesmo , 0x8809, "Slow Protocols (Link Aggregation, OAM, etc.)" (IANA, IEEE 802 Numbers), e o IEEE registra o endereço multicast 01-80--00-00-02 como o "IEEE 802.3 Slow_Protocols_Multicast address" usado pelo 802.1AX (IEEE SA, endereços MAC de grupo).

Modo fast, modo slow e as três mensagens perdidas

O LACP envia as mensagens em uma de duas taxas: uma por segundo (fast) ou uma a cada 30 segundos (slow). O driver de bonding do Linux descreve essa configuração como um pedido ao partner: "Request partner to transmit LACPDUs every 30 seconds" ou "every 1 second", e "the default is slow" (kernel do Linux, bonding). Um link é considerado down depois de três intervalos sem mensagem: "The short timeout period is 3 seconds and the long timeout period is 90 seconds" (Extreme Networks, LACP no SLX-OS); a Arista descreve a mesma coisa como "a default timeout of 30 seconds and a failure tolerance of three" (Arista).

Os valores padrão mudam de um fabricante para outro, e isso pesa quando equipamentos de fabricantes diferentes se encontram. No Catalyst 9300 da Cisco, dá para mudar "from the default rate (30 seconds) to the fast rate (1 second)" (Cisco, configuração de EtherChannels), enquanto nos equipamentos de segurança da Juniper "by default, the actor and partner transmit link aggregation control PDUs every second" (Juniper, LACP). Com a taxa slow, um membro cuja outra ponta falhou em silêncio, com a luz do link ainda acesa, pode continuar recebendo tráfego por até 90 segundos; com a taxa fast, esse tempo cai para três segundos.

LAG estático e por que o LACP é mais seguro

A maioria dos equipamentos também consegue agregar links sem LACP. Na Cisco, isso é o mode on: "a usable EtherChannel exists only when the devices at both ends of the link are configured in the on mode", e o aviso vem logo em seguida: "If the group is misconfigured, packet loss or spanning-tree loops can occur" (Cisco, configuração de EtherChannels). A HPE Aruba explica o motivo: num LAG estático, "Link failure is not detected as there is no keep alive PDU communication between the devices", e "a misconfiguration on one side can cause much trouble and be difficult to troubleshoot, because no signaling takes place between the two peers" (HPE Aruba, modos de LAG do AOS-CX). Só deixe de usar LACP se o equipamento não suportar o protocolo.

Como o tráfego é distribuído: um fluxo, um link

Um LAG não reparte os frames (quadros) entre os membros. O switch reduz "part of the binary pattern that is formed from the addresses in the frame to a numerical value that selects one of the links in the channel" (Cisco, configuração de EtherChannels), ou seja, um hash dos endereços escolhe o membro. "The algorithm is deterministic; if you use the same addresses and session information, you always hash to the same port in the channel. This method prevents out-of-order packet delivery" (Cisco, balanceamento de carga do EtherChannel).

Isso tem três consequências, e as três pegam muita gente de surpresa:

  • Um fluxo nunca passa da velocidade de um membro. Uma única cópia de arquivo num LAG de quatro links de 10 Gb/s continua limitada a 10 Gb/s. A documentação do Linux é explícita: com o hash de camadas 3 e 4, "a single connection will not span multiple slaves" (kernel do Linux, bonding). Só o modo round-robin do Linux espalha um mesmo fluxo por vários links: ele envia os pacotes em rodízio, um em cada link, e aceita que eles possam chegar fora de ordem.
  • Com poucos fluxos, a distribuição fica desigual. Uns poucos fluxos grandes podem cair no mesmo membro enquanto outro membro fica parado; a Cisco observa que, para o hash que ela descreve, "you can only achieve perfect load balancing, even with random addresses, if you have two, four, or eight ports in the port channel" (Cisco, balanceamento de carga do EtherChannel).
  • Cada ponta decide sobre o tráfego que ela mesma envia. "Slave selection for outgoing traffic is done according to the transmit hash policy" (kernel do Linux, bonding): o switch faz o hash do que ele envia, o servidor faz o hash do que ele envia, e as duas escolhas são independentes. Incluir endereços IP e portas no hash (as políticas layer2+3 e layer3+4 do Linux) dá ao cálculo mais variedade do que usar só os endereços MAC, que são o padrão no Linux.

As regras que todos os membros seguem

Os membros precisam ser iguais. Diz a Cisco: "Configure all ports in an EtherChannel to operate at the same speeds and duplex modes", e "all ports in an EtherChannel must be assigned to the same or they must be configured as trunk port" (Cisco, configuração de EtherChannels). E a Juniper: "All the interfaces must have the same speed and be in full-duplex mode" (Juniper, aggregated Ethernet). O número de membros é um limite da plataforma, não do protocolo: o Catalyst 9300 aceita 16 membros LACP, mas "only eight LACP links can be active at one time; the remaining eight links are placed in hot-standby mode" (Cisco, como acima); na Juniper, o máximo vai de 8 a 128, dependendo da plataforma (Juniper, como acima).

LAGs entre dois switches

Um LAG com membros terminando em dois switches diferentes elimina o último ponto único de falha, que é o próprio switch, e todos os fabricantes têm a sua versão: o vPC da Cisco "allows links that are physically connected to two different Cisco Nexus 9000 Series devices to appear as a single port channel to a third device" (Cisco, vPC); o MLAG da Arista "supports LAGs across paired Arista switches" (Arista, como acima); o VSX da HPE Aruba "binds two AOS-CX switches of the same model type to operate as one device for layer 2" (HPE Aruba, VSX); e o multihoming EVPN (Ethernet virtual private network) da Juniper, o ESI-LAG, faz isso por meio de uma fabric EVPN (Juniper, EVPN LAG). O equipamento do outro lado enxerga um partner LACP comum. São recursos de cada fabricante; a versão do próprio padrão é o DRNI (Distributed Resilient Network Interconnect), que o 802.1AX descreve como links entre "one to three nodes in a network and one to three nodes in another, separately administered, network" (IEEE 802.1AX-2020).

No servidor: os modos de bonding do Linux

O Linux oferece sete modos de bonding, e só um deles é o protocolo padrão (kernel do Linux, bonding):

ModoO que faz
balance-rr (0)Envia os pacotes "in sequential order from the first available slave through the last"; é o único modo em que um fluxo usa vários links
active-backup (1)"Only one slave in the bond is active"; outro link só assume em caso de falha. Não exige nada do switch
balance-xor (2)Escolhe o link pela política de hash de transmissão (transmit hash policy)
broadcast (3)"Transmits everything on all slave interfaces"
802.3ad (4)"IEEE 802.3ad Dynamic link aggregation": o LACP
balance-tlb (5)Distribui o tráfego de saída; "does not require any special switch support"
balance-alb (6)balance-tlb mais balanceamento do tráfego de entrada para IPv4

O kernel ainda usa o termo antigo, "slave", e a configuração também. A regra prática está no mesmo documento: "the balance-rr, balance-xor and broadcast modes generally require that the switch have the appropriate ports grouped together", e o 802.3ad exige que o switch rode LACP. Quando não dá para mexer na configuração do switch, o active-backup é a escolha segura.

Para lembrar

  • Um LAG transforma links paralelos em um único link lógico: mais banda, e um membro que falha custa capacidade, não conectividade.
  • Use LACP, em modo active nas duas pontas; LAGs estáticos falham em silêncio.
  • O hash coloca cada fluxo em um único membro: nenhuma transferência sozinha passa da velocidade de um link, e poucos fluxos se distribuem de forma desigual.
  • Os membros precisam ter a mesma velocidade, o mesmo duplex e a mesma configuração de VLAN; o número de membros é um limite da plataforma.
  • LAGs entre chassis diferentes (vPC, MLAG, VSX, ESI-LAG) são recursos de fabricante; o DRNI é a versão do padrão.

Fontes