Агрегирование каналов
Агрегирование каналов (англ. 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).
802.3ad
С 2000 года большинство схем агрегирования каналов стали реализовывать опубликованный в марте 2000 года стандарт IEEE 802.3ad (раздел 43 стандарта IEEE 802.3)[2]. Практически все производители отказались от собственных протоколов в пользу общего стандарта.
802.1AX
В 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].
Протокол контроля агрегирования каналов (LACP)
В стандартах 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
Агрегирование каналов поддерживается в 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 и UNIX
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
Агрегирование каналов Ethernet требует поддержки и со стороны коммутатора, и со стороны ОС хоста, которая должна «чередовать» (striping) кадры по интерфейсам по аналогии с RAID 0 для дисков. В англоязычной литературе встречается термин RAIN (Redundant Array of Independent Network interfaces — резервный массив независимых сетевых интерфейсов)[23].
PPP
PPP (точка-точка), используемый для dial-up/DSL, поддерживает стандартную агрегацию каналов — Multilink PPP. Несколько PPP-соединений с одним провайдером можно объединить в широкополосный канал.
Аналоговые модемы
Возможно агрегировать dial-up по нескольким телефонным линиям POTS; при такой агрегации итоговая пропускная способность близка к суммарной аналоговых каналов, что невозможно при обычной балансировке на уровне маршрутизации.
DSL
Подобным образом можно объединять несколько линий DSL (пример для Великобритании: объединение нескольких ADSL для получения, например, 512 кбит/c аплоада + 4 Мбит/c даунлоада там, где одиночный канал даёт максимум 2 Мбит/c).
DOCSIS
Стандарты 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
На Wi-Fi каналов агрегирование реализовано в технологии Super G: агрегируются два канала по 54 Мбит/с, получая 108 Мбит/с.
IEEE 802.11n предусматривает режим с шириной канала 40 МГц (по сути, не агрегирует, а удваивает ширину одного канала за счёт двух смежных спектров); это отличается от классического channel bonding.
802.11be (Wi-Fi 7) позволяет объединять разные диапазоны (Multi-link Operation, MLO).
Примечания
- ↑ 1 2 IEEE 802 Trunking Tutorial (11 ноября 1997). Дата обращения: 28 июня 2024. Архивировано 7 декабря 2013 года.
- ↑ IEEE 802.3ad Link Aggregation Task Force. www.ieee802.org. Дата обращения: 28 июня 2024. Архивировано 27 октября 2017 года.
- ↑ Law, David IEEE 802.3 Maintenance 9 (13 ноября 2006). — «Proposal to move Link Aggregation to IEEE 802.1 •It is an 802.3 sublayer but it has to go above IEEE Std 802.1x». Дата обращения: 28 июня 2024. Архивировано 7 октября 2008 года.
- ↑ IEEE 802.3ax (IEEE P802.1AX) Link Aggregation Project Authorization Request (approved) 3 (22 марта 2007). — «It has been concluded between 802.1 and 802.3 that future development of Link Aggregation would be more appropriate as an 802.1 standard». Дата обращения: 28 июня 2024. Архивировано 16 ноября 2010 года.
- ↑ IEEE SA - 802.1AX-2008 - IEEE Standard for Local and metropolitan area networks--Link Aggregation. Дата обращения: 28 июня 2024. Архивировано 7 августа 2013 года.
- ↑ IEEE Standards Association (англ.). IEEE Standards Association - IEEE 802.1AX-2020. Дата обращения: 4 февраля 2025.
- ↑ “IEEE Standard for Local and Metropolitan Area Networks--Link Aggregation”. IEEE STD 802.1AX-2020 (Revision of IEEE STD 802.1AX-2014): 1—333. 29 мая 2020. DOI:10.1109/IEEESTD.2020.9105034. ISBN 978-1-5044-6428-4.
- ↑ What Is LACP? Дата обращения: 28 июня 2024.
- ↑ Link aggregation on Dell servers. Архивировано 13 марта 2012 года.
- ↑ Connectify commercializes Speedify channel bonding service. FierceWireless. Дата обращения: 28 июня 2024. Архивировано 28 июня 2016 года.
- ↑ 1 2 3 The Linux Foundation: Bonding Архивировано 28 декабря 2010.
- ↑ Understanding NIC Bonding with Linux (2 декабря 2009).
- ↑ 1 2 Linux Ethernet Bonding Driver HOWTO. kernel.org (27 апреля 2011). Дата обращения: 4 ноября 2024.
- ↑ libteam by jpirko. libteam.org. Дата обращения: 28 июня 2024. Архивировано 14 сентября 2017 года.
- ↑ IEEE 802.3ad Link Aggregation (LAG) what it is, and what it is not. Дата обращения: 28 июня 2024. Архивировано 29 ноября 2007 года.
- ↑ 1 2 Mechanisms for Optimizing Link Aggregation Group (LAG) and Equal-Cost Multipath (ECMP) Component Link Utilization in Networks. IETF. Дата обращения: 28 июня 2024.
- ↑ Procurve 2910al Management and Configuration Guide. — Hewlett Packard, февраль 2009.
- ↑ Intel Advanced Networking Services Архивировано 24 января 2007.
- ↑ RandomAdapter: Core Services. technet.microsoft.com (8 октября 2009). Дата обращения: 28 июня 2024. Архивировано 25 апреля 2016 года.
- ↑ Norton Internet Security™ - PC Protection. www.pctools.com. Дата обращения: 28 июня 2024. Архивировано 1 апреля 2017 года.
- ↑ Broadcom Windows Management Applications Архивировано 1 августа 2012.
- ↑ What's New in vSphere 5.1 networking (июнь 2012). Архивировано 23 января 2014 года.
- ↑ Network Dictionary / Дун Цзели́нь (Jielin Dong). — Javvin Technologies Inc., 2007. — P. 95. — «Channel bonding, sometimes also called redundant array of independent network interfaces (RAIN), is an arrangement in which two or more network interfaces on a host computer are combined for redundancy or increased throughput.». — ISBN 978-1-60267-000-6.
- ↑ DOCSIS 3.0 Physical Interface Specification
- ↑ DOCSIS 3.1 Physical Interface Specification
- ↑ Broadband bonding offers high-speed alternative. engineeringbook.net. Дата обращения: 28 июня 2024. Архивировано 7 июля 2012 года.
- ↑ Connectify’s Speedify Service
- ↑ Peplink’s SpeedFusion Bonding Technology
- ↑ Viprinet’s Multichannel VPN Bonding Technology
- ↑ Synopi’s Natiply Internet Bonding Technology
- ↑ comBOX multi-wan services Broadband bonding
Литература
- Гл. 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.