Траблшутинг перекоса трафика в EtherChannel: выбор алгоритмов хеширования
- Один физический интерфейс в бандле Port-Channel загружен на 100%, в то время как остальные простаивают с 0-5% утилизации.
- Дропы пакетов и рост счетчиков
Output discards / Buffer dropsна одном кабеле агрегированной группы. - Эффект поляризации EtherChannel (EtherChannel Polarization) в многоуровневых топологиях сети.
- Несимметричная пропускная способность при тестировании iperf3 через объединенный транк.
1. Принцип балансировки нагрузки в EtherChannel / LACP
EtherChannel не выполняет Round-Robin балансировку каждого отдельного пакета (это вызвало бы фатальный Out-of-Order перекос пакетов в TCP). Вместо этого сетевой процессор применяет математическую **хеш-функцию** (CRC/XOR) к заголовкам пакета, жестко привязывая каждый конкретный поток (Flow) к одному физическому линку.
2. Проверка текущего алгоритма балансировки
show port-channel load-balanceПо умолчанию на многих старых платформах включен неэффективный режим src-mac или src-ip, из-за которого весь трафик от одного сервера/маршрутизатора всегда идет в один линк.
3. Настройка оптимального алгоритма хеширования (L2 + L3 + L4)
Для Enterprise-сетей и датацентров наилучшим выбором является учет адресов и портов источника/назначения L4 (Source & Destination IP + TCP/UDP Port):
! В глобальном режиме конфигурации
port-channel load-balance src-dst-mixed-ip-port
! Или (в зависимости от платформы Catalyst/Nexus):
port-channel load-balance src-dst-ip-l4port4. Моделирование и тестирование хеша перед переключением
Cisco IOS позволяет протестировать, в какой физический интерфейс попадет трафик с заданными параметрами, без запуска реального потока:
! Тест: трафик с 192.168.1.50 (порт 45123) на 10.0.0.100 (порт 443)
test etherchannel load-balance interface port-channel 1 ip 192.168.1.50 10.0.0.100 6 45123 443
! Вывод покажет конкретный интерфейс, например:
! Would select Gi1/0/2 of Po15. Устранение поляризации EtherChannel (Polarization Effect)
Поляризация возникает, когда коммутаторы Access -> Distribution -> Core используют **одинаковый** алгоритм хеширования и четное количество линков, из-за чего на верхний уровень всегда прилетает трафик, попадающий в одни и те же корзины хеша.
Решение: Используйте разные алгоритмы хеширования на соседних уровнях иерархии (например, `src-dst-mac` на уровне Access и `src-dst-ip-l4port` на уровне Distribution/Core).
Частые вопросы (FAQ)
Увеличит ли EtherChannel из 4 линков по 1 Gbps скорость одного скачивания файла по iperf/FTP?
Нет. Один TCP-поток всегда имеет фиксированные параметры (Src IP, Dst IP, Src Port, Dst Port) и всегда пойдет строго через один физический линк (максимум 1 Gbps). Агрегация увеличивает только общую емкость для множества параллельных сессий.
Почему рекомендуется собирать EtherChannel из количества линков, кратного степени двойки (2, 4, 8)?
Алгоритм хеширования делит трафик на 8 (или 16) корзин. Если линков 4, каждый получит ровно 2/8 (25%) трафика. Если линков 3, распределение будет 3/8, 3/8 и 2/8 (37.5%, 37.5% и 25%), что создает базовый физический перекос.
Влияет ли протокол LACP на распределение трафика внутри бандла?
Нет. Протокол LACP (802.3ad) отвечает только за согласование, контроль целостности и мониторинг состояния линков. За выбор конкретного интерфейса отвечает исключительно локальный аппаратный хеш-алгоритм свитча.
Что произойдет при обрыве одного кабеля в Port-Channel?
Хеш-таблица мгновенно пересчитается (Fast Rehash), и потоки, шедшие через упавший линк, равномерно распределятся по оставшимся активным физическим интерфейсам.