Агрегирование каналов
Агрегирование каналов (англ. link aggregation) — это объединение нескольких сетевых соединений параллельно различными способами. Агрегирование каналов позволяет увеличить общую пропускную способность сети сверх возможностей одного соединения, а также обеспечивает резервирование: при отказе одной или нескольких физических линий соединение сохраняется за счёт оставшихся. Совокупность физических портов, участвующих в агрегации, называется группой агрегирования каналов (LAG, от англ. link aggregation group).
Другие как зонтичные термины-синонимы: транкинг, бандлинг, сцепление, канальное объединение или тимминг.
Агрегирование каналов может реализовываться как по независимым от вендора стандартам, таким как Протокол контроля агрегирования каналов (LACP) для Ethernet, определённый в стандарте IEEE 802.1AX (ранее — IEEE 802.3ad), так и с помощью проприетарных протоколов.
Мотивация
Агрегирование каналов увеличивает пропускную способность и надёжность Ethernet-соединений.
Потребности в полосе пропускания не растут линейно: скорости Ethernet традиционно увеличивались в 10 раз от поколения к поколению (10, 100, 1000, 10 000 Мбит/с). Когда достигается потолок производительности, единственным выходом до введения агрегирования каналов был переход на следующее поколение оборудования, что могло быть дорого. В качестве альтернативы, с начала 1990-х годов различные производители сетевого оборудования стали внедрять агрегирование каналов, позволяя объединять два физических Ethernet-соединения в одну логическую линию. Ранние реализации требовали ручной настройки и идентичного оборудования на обеих сторонах[1].
Для обычного соединения порт-кабель-порт уязвимыми местами являются сам кабель и оба подключённых к нему порта. При единственном соединении отказ любого из этих трёх элементов приводит к обрыву связи. Высокоуровневые протоколы модели OSI зачастую не обеспечивают полностью «прозрачного» автоматического восстановления. Агрегирование каналов позволяет объединить несколько физических соединений в единое логическое, делая связь более устойчивой.
Архитектура
Сетевые архитекторы могут реализовывать агрегирование на любом из трёх нижних уровней модели OSI. — На 1-м уровне (физический уровень) примеры — передача данных по электросети (например, IEEE 1901) или Wi-Fi (например, IEEE 802.11), где можно использовать несколько частотных диапазонов. — На 2-м уровне (канальный уровень), например, Ethernet в ЛВС или мультилинковый PPP в глобальных сетях, агрегирование обычно выполняется между портами коммутаторов (физическими либо виртуальными). — На 3-м уровне (сетевой уровень) используется, например, циклическое распределение пакетов (round-robin scheduling), или вычисления хэшей по полям заголовков пакетов.
Балансировка нагрузки возможна на любом уровне агрегации, однако не все реализации действительно её используют полностью (для предотвращения рассинхронизации порядка доставки пакетов). Большинство методов также обеспечивают и резервирование.
Объединение интерфейсов возможно либо с общей логической (IP) адресацией, либо с общей физической (MAC) адресацией, либо с индивидуальными адресами для каждого интерфейса. Первый способ требует согласованности методов агрегации на обоих концах, но обеспечивает большую производительность.
Агрегирование каналов отличается от балансировки нагрузки: балансировка разделяет трафик по интерфейсам на уровне 4 (по сокетам), а агрегирование — на более низком уровне (пакет/канал).
Агрегирование каналов по IEEE
К середине 1990-х почти все производители сетевых коммутаторов внедрили проприетарные варианты агрегирования каналов для увеличения скорости между своими устройствами, но отсутствовала совместимость. Рабочая группа IEEE 802.3 инициировала создание стандарта на уровне канального (link layer) уровня в ноябре 1997 года[1]; было решено включить механизм автоматической настройки и резервирования — протокол LACP (Link Aggregation Control Protocol).
С 2000 года большинство схем агрегирования каналов стали реализовывать опубликованный в марте 2000 года стандарт IEEE 802.3ad (раздел 43 стандарта IEEE 802.3)[2]. Практически все производители отказались от собственных протоколов в пользу общего стандарта.
В 2006 году рабочая группа 802.3 отметила, что некоторые протоколы 802.1 (например, 802.1X) располагались в стеке ниже агрегирования каналов, определённого как подсистема 802.3[3]. Для устранения несостыковок начата работа над стандартом 802.1AX (ранее — 802.3ax)[4] и по итогам протокол официально перевели в группу стандартов 802.1 с публикацией IEEE 802.1AX-2008 (3 ноября 2008)[5]. С февраля 2025 года действует редакция 802.1AX-2020[6][7].
В стандартах Ethernet IEEE, протокол LACP (англ. Link Aggregation Control Protocol) позволяет управлять автоматическим объединением нескольких физических линий в единое логическое соединение. С его помощью устройства автоматически договариваются, по каким линиям формировать LAG, обмениваясь LACP-кадрами.
Особенности LACP и практические примеры:
- Максимум объединяемых портов — обычно 8.
- LACP-пакеты используют групповую MAC-адресацию .
- В период обнаружения (detection) LACP:
- пакеты LACP отправляются каждую секунду,
- предусмотрен keep-alive для членов группы (slow = 30 с, fast = 1 с).
- Некоторые реализации поддерживают выбор режима балансировки нагрузки[8].
- Режимы работы:
- Active — LACP всегда включён;
- Passive — LACP активируется при обнаружении устройства с поддержкой LACP.
- Автоматический failover: при промежуточном отказе (например, медиаконвертер между устройствами) peer может не заметить потери соединения — при агрегации по LACP сбойная линия автоматически исключается.
- Динамическая настройка: подтверждается, что конфигурация на обоих сторонах позволяет работать в составе LAG. При статическом объединении ошибочная настройка может привести к сбоям[9].
LACP пересылает управления LACPDU по всем включённым в группу линиям; если peer находит устройство с поддержкой LACP, между ними формируется логический канал. LACP работает в active или passive режиме. В active-режиме LACPDU отсылаются каждую секунду; в passive-режиме — только в ответ на приходящие пакеты.
Проприетарное агрегирование каналов
Помимо стандартных IEEE-реализаций, существуют и проприетарные схемы, в числе которых:
- EtherChannel от Cisco (использует LACP либо отдельный Port Aggregation Protocol),
- Aggregated Ethernet от Juniper (торговое имя для LACP),
- Multi-Link Trunking, Split Multi-Link Trunking, Routed Split Multi-Link Trunking, Distributed Split Multi-Link Trunking от Avaya (расширения 802.3ad — и статические, и с LACP),
- Smartgroup от ZTE,
- Eth-Trunk от Huawei (два режима: статический 802.3ad и LACP),
- Speedify от Connectify (VPN-реализация)[10].
Поддержка
Драйверы Linux
Драйвер Linux bonding[11] позволяет агрегировать несколько сетевых карт (NIC) в единый логический интерфейс, состоящий из двух или более так называемых «ведомых» карт. В современных дистрибутивах драйвер встроен в ядро как загружаемый модуль и обеспечивается программа управления ifenslave. Автор оригинального драйвера — Дональд Бекер (Donald Becker); драйвер был создан для кластеров Beowulf и появился в ядре Linux 2.0.
Режимы работы драйвера bonding[11] указываются как параметры ядру при загрузке модуля (через insmod/modprobe или в конфиге дистрибутива):
- Перемежение (balance-rr)
- пакеты отправляются последовательно по всем NIC; даёт балансировку и отказоустойчивость[12], но может приводить к переупорядочиванию пакетов[13].
- Active-backup
- в каждый момент активен один интерфейс; в случае его отказа активируется второй; MAC-адрес виден только с одного физического порта (для упрощения маршрутизации); обеспечивает отказоустойчивость.
- XOR (balance-xor)
- выбор NIC производится по хэшу адресации (MAC, IP, TCP/UDP порты); гарантирует доставку в порядке, но ограничивает скорость соединения скоростью одной NIC[13]; даёт балансировку и отказоустойчивость.
- Broadcast
- отправка пакетов одновременно по всем интерфейсам; обеспечивает отказоустойчивость.
- IEEE 802.3ad (LACP)
- динамическое агрегирование по стандарту IEEE 802.3ad; аналогично XOR, добавляет поддержку балансировки и динамическое согласование.
- Адаптивная передача (balance-tlb)
- динамическое распределение исходящего трафика в зависимости от загрузки интерфейса, не требует специальной поддержки коммутатора; при отказе принимающего интерфейса MAC переходит к другому.
- Адаптивная балансировка (balance-alb)
- всё вышеперечисленное плюс балансировка входящего трафика для IPv4 через протокол ARP; не требует поддержки со стороны свича.
Драйвер Team[14] служит альтернативой bonding: основная часть кода вынесена в user space (демон teamd).
Применение
Агрегирование каналов — простой способ построения магистралей с производительностью выше, чем у одного порта/устройства. При росте нагрузки пропускную способность можно наращивать по мере необходимости, не меняя всё оборудование сразу.
Обычно магистральные инсталляции прокладывают больше кабелей, чем нужно, поскольку стоимость кабеля мала по сравнению с затратами труда. Агрегирование позволяет воспользоваться запасными линиями для увеличения скорости магистрали почти бесплатно (при наличии портов).
При балансировке важно избегать переупорядочивания Ethernet-кадров (особенно для TCP). Обычно все пакеты с одними реквизитами (MAC, IP) отправляются по одной линии. Распространены алгоритмы по хэшу L2/L3-адреса[15][16][17].
Однако если между двумя точками идёт только один поток, хэши могут давать неравномерность нагрузки и часть каналов будет простаивать[16]. Полностью равномерное использование всех линий редко достижимо на практике.
Объединённые сетевые карты позволяют серверу иметь пропускную способность канала выше, чем у одной NIC. Например, две по 1 Гбит/с дают в сумме 2 Гбит/с; но отдельный поток всё равно ограничен одной линией — это важно при тестах производительности.
Агрегирование каналов поддерживается в Microsoft Windows Server 2012 и новее. В ранних версиях Windows Server требовались драйверы производителей. Например, Intel реализовал поддержку через пакет Advanced Networking Services (ANS) для своих сетевых карт[18].
Nvidia поддерживает агрегирование через Network Access Manager. HP имеет собственную утилиту для брендированных NIC, с разными режимами агрегации, включая 802.3ad/LACP. Также существует простая агрегация IP[19] — сервер с несколькими IP-интерфейсами может балансировать трафик; для домашнего широкополосного доступа с разными WAN можно использовать агрегирование для увеличения общей скорости[20].
Broadcom реализует агрегирование через Broadcom Advanced Control Suite (BACS) с поддержкой BASP (Broadcom Advanced Server Program): доступны статические LAG, LACP и «smart teaming» (работает без конфигурации на свичах; достаточно, чтобы хотя бы одна карта была Broadcom и др. поддерживали teaming)[21].
Linux, FreeBSD, NetBSD, OpenBSD, macOS, OpenSolaris и коммерческие UNIX-системы (AIX и др.) реализуют bonding на уровне ОС, а не драйвера; можно объединять карты разных производителей[11].
Нативная поддержка агрегирования реализована в XenServer (Citrix XenServer) и VMware ESX. XenServer поддерживает LAG и LACP; vSphere 5.1 (ESXi) также поддерживает оба режима[22].
В Hyper-V Microsoft поддержка агрегирования непосредственно гипервизором отсутствует, но применимы способы для Windows.
Ограничения
В режимах balance-rr, balance-xor, broadcast, 802.3ad все физические порты группы агрегирования должны находиться на одном логическом коммутаторе — это создаёт единую точку отказа: при отказе свича пропадает вся связность. В режимах active-backup, balance-tlb, balance-alb поддерживается работа с несколькими коммутаторами, но при failover часть сессий может оборваться (например, из-за ARP-проблем).
Некоторые производители реализуют протоколы, позволяющие собирать один виртуальный коммутатор из нескольких физических и строить распределённые группы агрегирования (например, Split Multi-Link Trunking от Nortel, см. SMLT). Эти протоколы синхронизируют состояние по Inter-Switch Trunk (IST), чтобы обращаться к стэку как к единому устройству, без дублирования пакетов. Failover и восстановление — менее чем за секунду для всех скоростей.
Вендорно-независимый подход — многошассийная группа агрегирования каналов (MC-LAG): для подключённого устройства всё выглядит как обычный агрегирующий канал, но согласование между источниками реализовано проприетарно.
Во всех каналах группы обычно используются интерфейсы одного физического типа (напр., только медные, только оптика SX/LX и т. д.), но по стандарту IEEE важно лишь совпадение скорости и работы в полном дуплексе (10/100/1000/10 000 Мбит/с).
Множество коммутаторов PHY-независимы и могут агрегировать разные виды модулей (напр., 1000BASE-SX + 1000BASE-LX), если совпадает скорость и дуплекс. При распределении трафика по хэшу для каждой сессии не возникает проблем с порядком доставки даже при разной задержке.
«Несовпадение агрегации» — ситуация, когда тип агрегации на концах разный. Не все коммутаторы реализуют стандарт 802.1AX, но могут поддерживать статическую агрегацию, при этом соединение между двумя статически настроенными коммутаторами работает, а между статическим и LACP — нет.
Примеры
Агрегирование каналов Ethernet требует поддержки и со стороны коммутатора, и со стороны ОС хоста, которая должна «чередовать» (striping) кадры по интерфейсам по аналогии с RAID 0 для дисков. В англоязычной литературе встречается термин RAIN (Redundant Array of Independent Network interfaces — резервный массив независимых сетевых интерфейсов)[23].
PPP (точка-точка), используемый для dial-up/DSL, поддерживает стандартную агрегацию каналов — Multilink PPP. Несколько PPP-соединений с одним провайдером можно объединить в широкополосный канал.
Возможно агрегировать dial-up по нескольким телефонным линиям POTS; при такой агрегации итоговая пропускная способность близка к суммарной аналоговых каналов, что невозможно при обычной балансировке на уровне маршрутизации.
Подобным образом можно объединять несколько линий DSL (пример для Великобритании: объединение нескольких ADSL для получения, например, 512 кбит/c аплоада + 4 Мбит/c даунлоада там, где одиночный канал даёт максимум 2 Мбит/c).
Стандарты DOCSIS 3.0 и 3.1 для кабельных сетей поддерживают агрегирование каналов: например, DOCSIS 3.0 — до 32 нисходящих и 8 восходящих каналов шириной 6/8 МГц[24]. В DOCSIS 3.1 поддерживаются более сложные схемы на уровне субносителей[25].
DOCSIS умеет также транспортировать PPP.
Широкополосное агрегирование — вариант агрегирования каналов, осуществляемый на уровне четвёртого и выше уровней OSI (например, несколько T-1 или DSL, а также мобильные соединения). Отличие от классических схем — не нужно взаимодействовать с операторами; для работы достаточно поставить клиент-сервер с поддержкой мультипут-протоколов (например, multipath TCP), которые инкапсулируют трафик к серверу с большей полосой[26].
Коммерческие решения:
- Speedify от Connectify (PC, Mac, iOS, Android)[27]
- Peplink SpeedFusion[28]
- Viprinet (Multichannel VPN Bonding Technology)[29]
- Natiply от Synopi[30]
- ComBOX Networks (multi-wan bonding как VPN-сервис)[31]
Для балансировки всевозможных WAN-клиентов также используются менеджеры загрузок: балансировка потоков и failover на уровне отдельных сессий даёт достаточную загрузку по полосе.
На Wi-Fi каналов агрегирование реализовано в технологии Super G: агрегируются два канала по 54 Мбит/с, получая 108 Мбит/с.
IEEE 802.11n предусматривает режим с шириной канала 40 МГц (по сути, не агрегирует, а удваивает ширину одного канала за счёт двух смежных спектров); это отличается от классического channel bonding.
802.11be (Wi-Fi 7) позволяет объединять разные диапазоны (Multi-link Operation, MLO).
Примечания
Литература
- Гл. 5.4: Протокол контроля агрегирования каналов (LACP) // IEEE Std 802.1AX-2008 IEEE Standard for Local and Metropolitan Area Networks — Link Aggregation. — IEEE Standards Association, 3 ноября 2008. — P. 30. — ISBN 978-0-7381-5794-8. — doi:10.1109/IEEESTD.2008.4668665.


