Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Методика тестирования ECMP-хеша по Source IP-адресу

Репозиторий содержит готовую реализацию методики тестирования ECMP-распределения по Source IP-адресу. Реализация включает контейнерную топологию, скрипты конфигурации, генератор трафика, захват пакетов и анализ результатов.

Состав решения:

  • Скрипты для создания топологии: docker-compose.yml, Dockerfile в images/.
  • Скрипты для настройки ECMP и хеширования: scripts/configure_dut.sh, scripts/configure_tg.sh, scripts/configure_nexthop.sh.
  • Скрипт для генерации трафика: scripts/traffic.py.
  • Скрипты для захвата трафика: встроены в launch.py (через tcpdump в контейнерах nexthop).
  • Скрипты анализа результатов: scripts/analyze.py.

1. Топология и конфигурация

Тестовая топология сети

                                              +----------+
                                        +---->|          |
                                        |     +----------+
                                        |       Endpoint  
                                        |                 
   +----------+        +----------+     |     +----------+
   |          |------->|          |---------->|          |
   +----------+        +----------+     |     +----------+
 Traffic Generator   Device Under Test  |       Endpoint  
                                        |                 
                                        |     +----------+
                                        +---->|          |
                                        |     +----------+
                                        |       Endpoint  
                                        |                 
                                        |     +----------+
                                        +---->|          |
                                              +----------+
                                                Endpoint  

Описание:

  • TG — Traffic Generator
  • DUT — Device Under Test
  • NEXTHOP — Endpoint

Настройки

  • На DUT включается IP forwarding и задаётся ECMP-маршрут до 172.16.0.254/32 через 4 nexthop-а. Политика хеширования задаётся на уровне L3: net.ipv4.fib_multipath_hash_policy=0. Поскольку Destination IP фиксирован, выбор nexthop фактически зависит только от Source IP-адреса.
  • На TG настраивается маршрут по умолчанию через DUT (scripts/configure_tg.sh).
  • На NEXTHOP поднимается loopback-адрес назначения (scripts/configure_nexthop.sh).

2. Генерация тестового трафика

Тест состоит из двух частей:

  1. Проверка равномерности распределения (distribution)

    • Источник: множество случайных Source IP-адресов.
    • Destination IP фиксирован: 172.16.0.254.
    • UDP порты фиксированы.
    • Цель: проверить статистическое распределение потоков по ECMP-путям.
  2. Проверка хеширования только по Source IP (hash-only-source)

    • Source IP фиксированные (набор адресов).
    • Destination IP фиксирован.
    • UDP порты вариируются, чтобы убедиться, что смена портов не влияет на выбор nexthop.
    • Цель: удостовериться, что один Source IP всегда попадает в один и тот же nexthop.

3. Методика захвата трафика

Захват осуществляется на каждом nexthop-контейнере через tcpdump:

  • Фильтр: udp and dst host 172.16.0.254.
  • Файлы сохраняются в локальную директорию ./pcaps/ на хосте.
  • Запуск/остановка захвата автоматизированы в launch.py.

4. Анализ результатов

Анализатор scripts/analyze.py вычисляет:

  • Количество UDP пакетов по каждому nexthop.
  • Количество уникальных Source IP по каждому nexthop.
  • Долю уникальных Source IP на каждом nexthop.

Критерии корректности:

  • Для distribution: максимальное отклонение доли уникальных Source IP от равномерной доли ( 100% / число nexthop-ов) не превышает 5%.
  • Для hash-only-source: каждый Source IP встречается строго на одном nexthop.

Запуск теста

Зависимости

  • Docker.
  • Python на хосте.
  • Python-зависимости виртуального окружения (scapy, rich):
source .venv/bin/activate
pip install -r requirements.txt

Запуск

python launch.py

Проверка результатов

После запуска в консоли выводятся таблицы и итоговые статусы:

  • PASS — корректное распределение ECMP или корректное хеширование по Source IP-адресу.
  • FAIL — распределение выходит за допуск или Source IP-адрес попадает на несколько nexthop-ов.

About

Repository for storing b4com terms of reference materials

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages