Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: CXV Международной научно-практической конференции «Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ» (Россия, г. Новосибирск, 19 апреля 2021 г.)

Наука: Технические науки

Секция: Телекоммуникации

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Назарчук-Глухов С.М. РАЗРАБОТКА АВТОТЕСТА МУЛЬТИКАСТ ТРАФИКА // Научное сообщество студентов: МЕЖДИСЦИПЛИНАРНЫЕ ИССЛЕДОВАНИЯ: сб. ст. по мат. CXV междунар. студ. науч.-практ. конф. № 8(115). URL: https://sibac.info/archive/meghdis/8(115).pdf (дата обращения: 27.01.2022)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

РАЗРАБОТКА АВТОТЕСТА МУЛЬТИКАСТ ТРАФИКА

Назарчук-Глухов Сергей Михайлович

студент магистратуры, Новосибирский государственный технический университет,

РФ, г. Новосибирск

Научный руководитель Гунько Андрей Васильевич

канд. техн. наук, доц., кафедра Автоматики, Новосибирский государственный технический университет,

РФ, г. Новосибирск

АННОТАЦИЯ

В данной статье рассмотрен процесс создания автотеста для тестирования мультикаст трафика в пассивных оптических сетях (Passive Optical Network, PON) с имитацией сервера вещания и клиентов путем запуска одного скрипта.

 

Ключевые слова: автотест; мультикаст; пассивные оптические сети; PON; Python.

Введение

В ходе выполнения магистерской диссертации возникла задача разработки автотеста для мультикаст трафика, поскольку проверка устройства PON на длительных тестах может занимать слишком много рабочего времени сотрудника. Кроме того, длительный визуальный анализ видео потока на наличие артефактов - далеко не легкая задача. Попытки найти в интернете готовую реализацию автотеста не увенчались успехом, поскольку найденная готовая реализация автотеста с ограниченной функциональностью была написана под операционную систему Windows. Поэтому был разработан собственный автотест на языке Python под Linux системы.

Реализация

В первую очередь для того, чтобы протестировать мультикаст трафик, необходимо разработать клиент-серверное приложение. Это приложение будет запускаться с различными параметрами, такими как тип работы (сервер или клиент), сетевой адрес мультикаст группы, сетевой порт, имя сетевого интерфейса, скорость трансляции (для сервера), а также время работы и версия протокола igmp (для клиента). Для автоматизации всего процесса требовалось написать скрипт, который будет вычитывать сценарий работы из конфигурационного файла config.yaml, запускать клиент-серверное приложение с нужными параметрами, записывать результат в файл, а так же создавать сетевой интерфейс с нужным тегом (меткой) виртуальной локальной сети (Virtual Local Area Network, VLAN) (при необходимости) и ip-адресом. Для запуска приложения планируется использовать модуль subprocess языка программирования Python, который отвечает за порождение новых процессов, соединение c потоками стандартного ввода, вывода, ошибок и получение кодов возврата этих процессов. Модуль можно подключить с помощью директивы “import subprocess”. Кроме того, необходим класс Popen для конвейеризации процессов. Поскольку сервер будет передавать поток постоянно, необходимо продумать вариант остановки. Для этого используется файл server_exit_status, в котором изначально будет записан 0. Скрипт будет считывать содержимое этого файла каждую секунду, и в случае изменения значения остановит передачу.

Для того, чтобы не приходилось на каждый компьютер, используемый для тестирования, загружать сторонние библиотеки, будем использовать докер контейнеры для имитации сервера и клиентов. У Python есть библиотека, которую можно подключить с помощью директивы import docker. Для запуска контейнера и выполнения в нем скрипта, используется следующая команда:

docker_client.containers.run(image_name, volumes={host_dir: {'bind': '/mcast_test', 'mode': 'rw'}}, privileged=True, network_mode="macvlan_net", command=container_command)

где image_name – имя докер контейнера, host_dir – директория, которую добавим в контейнер, container_command – команда, которая будет выполняться в контейнере после запуска. Также, если нужно запустить контейнер в виде системной службы (демоном, от англ. Daemon), необходимо добавить в команду параметр detach=True.

Сервер

Для начала необходимо создать сервер, который будет постоянно слать мультикастовые пакеты. Создадим пакет размером 1470 байт, в начале которого будет записан номер пакета и двоеточие для разделения информации. В конец пакета записаны символы f, чтобы получить необходимый нам размер. Так как в реальных условиях от качества видео зависит скорость, необходимая для просмотра, то добавим возможность выбора скорости на наш сервер. Для этого необходимо:

1. Определить нынешнюю скорость в мб/с. Для этого используем следующую формулу:

speed = packet_number / (time_now - time_start) * packet_len * byte_to_mbit                    (1)

Где speed – скорость передачи, packet_number – номер отправляемого пакета, time_now – текущее время, time_start – время начала работы сервера, packet_len – размер пакета в байтах, byte_to_mbit – коэффициент для перевода байт в мб (умножить размер пакета на 8 для перевода байта в бит, затем поделить на 220)

2. На основании скорости определить время для задержки, чтобы увеличить или уменьшить скорость до нужной.

sleep_time *= (speed / nominal_speed)                                   (2)

Где sleep_time – время задержки перед отправлением следующего пакета, speed – нынешняя скорость передачи, nominal_speed – ожидаемая (выбранная) скорость передачи.

3. Добавить задержку. Для этого будем сравнивать нынешнюю и ожидаемую скорости. Если нынешняя скорость превышает ожидаемую, то делаем задержку методом sleep от sleep_time секунд

if speed > nominal_speed:

time.sleep(sleep_time)

Клиент

Прежде, чем разрабатывать функцию клиента, необходимо определить основные параметры, которые мы желаем получить по результатам теста: количество полученных пакетов, задержка между отправлением igmp join пакета и началом потока, задержка между отправлением igmp leave пакета и концом потока, количество потерянных пакетов, количество продублированных пакетов, а также количество пакетов, пришедших не по порядку. Кроме этого, для клиента добавим возможность выбора версии igmp пакета. Для его генерации будем использовать программную библиотеку scapy.

Принцип работы функции клиента, следующий:

1. Отправляем igmp join пакет и засекаем время до получения первого мультикастового пакета. Если в течении 5 секунд мы так ничего и не получили, то можно считать, что есть какие-то проблемы с потоком и программа завершается. После получения первого пакета мы запоминаем сравниваем время старта с текущим и записываем его в переменную join_delay_time. Кроме этого, мы запоминаем номер первого пришедшего пакета для того, чтобы не считать пакеты до этого номера потерянными.

2. Начинаем слушать мультикастовый трафик, вычитывать номер пакета и сравнивать его с последним пришедшим. Если номера пакетов совпадают, то увеличиваем число продублированных пакетов. Если номер пришедшего отличается от номера последнего больше, чем на 1, то недостающие пакеты записываем в потерянные. Если же номер пришедшего пакета меньше, то увеличиваем количество пакетов, пришедших не по порядку, а количество потерянных пакетов – уменьшаем. Далее высчитываем время работы и в случае, если оно не превышает заданного, продолжаем слушать поток.

3. Когда время работы превышает заданное, отправляем igmp leave пакет, записываем текущее время и продолжаем слушать поток еще 5 секунд. Если пакетов больше не придет, то можно считать, что задержка между igmp leave и концом потока близка к 0. Если же получим еще пакеты, то будем записывать время получения. В конце выведем разницу во времени. Если же пакеты будут приходит все 5 секунд, то можно считать, что поток трафика не прекратился и в результате выведем задержку “>5 секунд”.

Результаты тестирования

Для тестирования была нагружена сеть (запущено несколько серверов, которые транслировали разные группы с разной скоростью).

Received: 9033 speed: 6.7311596241489005mb/s for time: 10

Join delay time: 0.02568364143371582

Leave delay time: 0.020463943481445312

Packets lost: 373 (4.129303664341857 %)

Packets duplicated: 0

Packets came out of order: 0

Сервер вещал данную группу со скоростью 7 мб/с. Как видно из результатов, клиент мог получать трафик только со скоростью 6.7 мб/с, из-за чего возникли потери 373 пакетов (или 4.1 процент от общего количества).

Если же мы не будем нагружать сеть, то результаты будут следующими:

Received: 9561 speed: 6.995316679062072mb/s for time: 10

Join delay time: 0.02112889289855957

Leave delay time: 0.020640134811401367

Packets lost: 0 (0 %)

Packets duplicated: 0

Packets came out of order: 0

Заключение

Таким образом, в данной статье представлены основные данные, необходимые для реализации автотеста мультикаст трафика на языке программирования Python, а также представлены результаты работы.

 

Список литературы:

  1. Златопольский Д.М. Основы программирования на языке Python. – М.: ДМК Пресс, 2017. – 284 с. – URL: https://codernet.ru/books/python/osnovy_programmirovaniya_na_python_dmitrij_zlatopolskij/ (дата обращения: 16.04.2021). – Текст: электронный.
  2. Сети для самых маленьких. Часть девятая. Мультикаст // Хабр –электронный ресурс, URL: https://habr.com/ru/post/217585/ (дата обращения: 16.04.2021).
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом