Что это такое?
Это алгоритм выбора каналов для режимов balance-xor
и 802.3ad
.
Зачем это нужно?
Для распределения пакетов между физическими каналами, входящими в многоканальное соединение.
Как это настроить?
layer2
- Канал для отправки пакета однозначно определяется комбинацией MAC-адресов источника и назначения по следующей формуле:
(source_MAC XOR destination_MAC) modulo slave_count
т.е. над МАС-адресами источника и назначения выполняется битовая операция XOR (исключающее ИЛИ), и результат в виде числа делится на число каналов в соединении. Остаток от деления и будет номером канала, в который отправится пакет. Как можно видеть, результат не зависит от перестановки источника и назначения; весь трафик между определённой парой узлов всегда идёт по определённому каналу.
Алгоритм совместим с IEEE 802.3ad.
layer2+3
- Канал для отправки пакета определяется по совокупности MAC- и IP-адресов источника и назначения по следующей формуле:
(((source_IP XOR dest_IP) AND 0xffff) XOR (source_MAC XOR destination_MAC)) modulo slave_count
Трафик между определённой парой хостов IP всегда идёт по определённому каналу. Благодаря этому обеспечивается более равномерная балансировка трафика, особенно в случае, когда бóльшая его часть передаётся через промежуточные маршрутизаторы.
Для протоколов 3 уровня, отличных от IP, данный алгоритм равносилен layer2
.
Алгоритм совместим с IEEE 802.3ad.
layer3+4
- Канал для отправки пакета определяется по совокупности IP-адресов и номеров портов источника и назначения:
((source_port XOR dest_port) XOR ((source_IP XOR dest_IP) AND 0xffff) modulo slave_count
Благодаря этому трафик определённого узла может распределяться между несколькими каналами, хотя пакеты одного и того же TCP-соединения или UDP-потока всегда передаются по одному и тому же каналу.
Для фрагментированных пакетов TCP и UDP, а также для всех прочих протоколов 4 уровня, учитываются только IP-адреса. Для протоколов 3 уровня, отличных от IP, данный алгоритм равносилен layer2
.
Алгоритм не полностью совместим с IEEE 802.3ad. Если в одном TCP-соединении или UDP-потоке присутствуют одновременно фрагментированные и нефрагментированные пакеты, то они могут быть разбросаны по разным каналам и в результате получены с нарушением исходной последовательности. Это достаточно редкая ситуация, но при работе с некоторыми иными реализациями 802.3ad она принципиально может приводить к несовместимости.