Mininet. Использование netem. Задержки, джтиттер.
1 Общая информация
- В этом лабораторном занятии вы познакомитесь с NETEM и объясните, как его можно использовать для имитации сценариев реального мира, при этом контролируя параметры, влияющие на производительность сетей.
- Сетевые параметры включают задержку, дрожание, потерю пакетов, изменение порядка и повреждение (latency, jitter, packet loss, reordering, and corruption).
- Значения корреляции между сетевыми параметрами также будут установлены для обеспечения большей реалистичности сетевой среды.
1.1 Цели
- Освоить моделирование задержек и джиттера в сетях.
1.2 Задачи
- В ходе работы требуется освоить следующие понятия:
- что есть задержка в сетях и как ее измерить;
- что есть архитектура дисциплин очередей Linux (qdisc);
- освоить эмуляцию глобальных сети (характеризующихся большими задержками) с использованием netem и mininet;
- выполнить измерения после внесения задержек в эмулируемую глобальную сеть;
- развернуть эмулированные глобальные сети, характеризующиеся разными значениями задержки, джиттера и соответствующими значениями корреляции;
- задать разные распределения задержки эмулируемой глобальной сети.
1.3 Видео: Использование netem I. Введение
2 Теоретические сведения
2.1 Дисциплины организации очередей в Linux
- NETEM — сетевой эмулятор Linux для тестирования производительности реальных приложений в виртуальной сети.
- Виртуальная сеть может воспроизводить глобальные сети в лабораторной среде.
- NETEM позволяет пользователю изменять такие параметры, как задержка, джиттер, потеря пакетов, дублирование и изменение порядка пакетов.
- NETEM реализован в Linux и состоит из двух частей: модуля ядра для организации очередей и утилиты командной строки для его настройки.
- Между протоколом IP и сетевым устройством создаётся очередь с дисциплиной обслуживания.
- Дисциплина обслуживания очередей по умолчанию есть простая очередь пакетов FIFO (первым пришел — первым обслужен).
- Дисциплина реализуется как объект с двумя интерфейсами.
- Один интерфейс ставит пакеты в очередь для отправки, а другой интерфейс отправляет пакеты на сетевое устройство.
- На основе дисциплины обслуживания очередей принимается решение о том, какие пакеты отправлять, какие пакеты задерживать и какие пакеты отбрасывать.
- Классовая дисциплина организации очередей, такая как NETEM, имеет настраиваемые внутренние модули.
2.2 Глобальные сети и задержка
- В сетях есть несколько процессов и устройств, которые способствуют сквозной задержке между узлом-отправителем и узлом-получателем.
- Во многих случаях сквозная задержка определяется задержкой распространения в глобальной сети.
- Рассмотрим два соседних коммутатора A и B, соединённых глобальной сетью.
- Как только бит передается в глобальную сеть коммутатором А, он должен пройти к коммутатору В.
- Время, необходимое для распространения от начала глобальной сети до коммутатора В, является задержкой распространения.
- Биты распространяются со скоростью канала.
- Скорость распространения зависит от физической среды (оптоволокно, медная витая пара и т. д.) и равно или немного меньше скорости света.
- Задержка распространения есть расстояние между двумя коммутатора, делённое на скорость распространения.
- Как только последний бит пакета передается на коммутатор B, он и все предыдущие биты пакета сохраняются на коммутаторе B.
- Сетевые инструменты обычно оценивают задержку для устранения неполадок и измерения производительности.
- Например, оценкой сквозной задержки является время двойного оборота (RTT), которое представляет собой время, необходимое пакету для прохождения от отправителя к получателю, а затем обратно к отправителю.
- RTT включает задержки распространения пакетов, задержки в очереди пакетов в промежуточных маршрутизаторах и коммутаторах и обработку пакетов.
- Если задержка распространения преобладает над другими компонентами задержки (как в случае глобальных сетей), то RTT является хорошей оценкой задержки распространения.
3 Подготовка стенда
3.1 Лабораторная топология
- В топологии используется сеть 10.0.0.0/8, назначенная Mininet по умолчанию.
- Топология представляет собой коммутатор с двумя подключёнными к нему хостами.
- Для запуска топологии используем параметры командной строки:
sudo mn --topo=single,2 -x
3.2 Рабочие файлы
- Подключимся к виртуальной машине:
ssh -Y mininet@192.168.x.y
- Для рабочих файлов будем использовать каталог
~/work/lab_netem_i
:mkdir -p ~/work/lab_netem_i
4 Интерактивный эксперимент
4.1 Добавление/изменение задержки для эмуляции WAN
Работа с NETEM осуществляется с помощью утилиты командной строки
tc
.Без дополнительных параметров NETEM ведёт себя как базовая очередь FIFO без задержек, потерь, дублирования или переупорядочения пакетов.
Основной синтаксис
tc
, используемый с NETEM, следующий:sudo tc qdisc [add|del|replace|change|show] dev dev_id root netem opts
sudo
: выполнить команду с более высокими привилегиями;tc
: команда, используемая для взаимодействия с NETEM;qdisc
: дисциплина очереди (qdisc
) представляет собой набор правил, определяющих порядок, в котором обслуживаются пакеты, поступающие по протоколу IP.- Дисциплина очереди применяется к очереди пакетов, чтобы решить, когда отправлять каждый пакет.
[add|del|replace|change|show]
(добавить, удалить, заменить, изменить, показать): операция надqdisc
:- чтобы добавить задержку на определённом интерфейсе, применяется операция
add
; - чтобы изменить или удалить задержку на определённом интерфейсе, применяется операция
change
илиdel
;
- чтобы добавить задержку на определённом интерфейсе, применяется операция
dev_id
: параметр указывает интерфейс, подлежащий эмуляции;opts
: параметр указывает величину задержки, потери пакетов, дублирования, повреждения и другие.
4.2 Определение интерфейсов хостов h1
и h2
- Необходимо идентифицировать интерфейсы на подключенных хостах.
- На хосте
h1
введите командуifconfig
, чтобы отобразить информацию, относящуюся к его сетевым интерфейсам и назначенным им IP-адресам.- Вывод команды
ifconfig
показывает, что хостh1
имеет два интерфейса:h1-eth0
иlo
. - Интерфейс
h1-eth0
необходимо использовать вtc
при эмуляции WAN.
- Вывод команды
- На хосте
h2
введите командуifconfig
. - Вывод команды
ifconfig
показывает, что хостh2
имеет два интерфейса:h2-eth0
иlo
. - Интерфейс
h2-eth0
необходимо использовать вtc
при эмуляции WAN.
4.3 Добавка задержки для интерфейса, подключающегося к WAN
Сетевые эмуляторы задают задержки на интерфейсе.
Например, задержка, вносимая в интерфейс коммутатора A, который подключён к интерфейсу коммутатора B, может представлять собой задержку распространения WAN, соединяющей оба коммутатора.
На хосте
h1
введите следующую команду:sudo tc qdisc add dev h1-eth0 root netem delay 100ms
sudo
: выполнить команду с более высокими привилегиями;tc
: вызвать управление трафиком Linux;qdisc
: изменить дисциплину очередей сетевого планировщика;add
: создать новое правило;dev h1-eth0
: указать интерфейс, на котором будет применяться правило;netem
: использовать эмулятор сети;delay 100ms
: задержка ввода 100 мс.
Эта команда добавляет задержку в 100 миллисекунд (мс) только к выходному интерфейсу.
Теперь пользователь может проверить, что соединение от хоста h1 к хосту h2 имеет задержку 100 миллисекунд, используя команду
ping
с хостаh1
:ping 10.0.0.2
Все пакеты были получены успешно (0% потерь пакетов).
Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
Этот сценарий эмулирует задержку в 100 миллисекунд на интерфейсе узла
h1
, подключающегося к коммутатору.Чтобы эмулировать глобальную сеть с двунаправленной задержкой, к соответствующему интерфейсу на хосте
h2
также необходимо добавить задержку в 100 миллисекунд.В терминале хоста
h2
введите следующую команду:sudo tc qdisc add dev h2-eth0 root netem delay 100ms
Проверим, что соединение между хостом
h1
и хостомh2
имеетRTT
200 миллисекунд (100 мс от хостаh1
к хостуh2
плюс 100 мс от хостаh2
к хостуh1
), повторив командуping
на терминале хостаh1
:ping 10.0.0.2
Все пакеты были получены успешно (0% потерь пакетов).
Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
4.4 Изменение задержки в эмулируемой глобальной сети
- Изменим задержку со 100 миллисекунд до 50 миллисекунд как для отправителя, так и для получателя. RTT теперь будет 100 миллисекунд.
- В терминале хоста
h1
введите следующую команду:sudo tc qdisc change dev h1-eth0 root netem delay 50ms
- Здесь добавлен новый параметр
change
, который изменяет ранее установленную задержку на 50 миллисекунд. - Применим также описанный выше шаг к терминалу хоста
h2
, чтобы изменить задержку на 50 мс:sudo tc qdisc change dev h2-eth0 root netem delay 50ms
- Теперь можно проверить, что соединение от хоста
h1
к хостуh2
имеет задержку 100 миллисекунд, используя командуping
с терминала хостаh1
:ping 10.0.0.2
- Все пакеты были получены успешно (0% потерь пакетов).
- Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
4.5 Восстановление исходных значений (удаление правил)
- Восстановим конфигурацию по умолчанию как для отправителя, так и для получателя, удалив все правила, применённые к сетевому планировщику интерфейса.
- В терминале хоста
h1
введите следующую команду:sudo tc qdisc del dev h1-eth0 root netem
- Добавлена новая опция
del
, которая удаляет ранее установленные правила для данного интерфейса. - В результате
tc qdisc
восстановит значения по умолчанию для устройстваh1-eth0
. - Применим те же действия для удаления правил на хосте
h2
. В терминале хостаh2
введите следующую команду:sudo tc qdisc del dev h2-eth0 root netem
- В результате дисциплина организации очереди
tc
восстановит свои значения по умолчанию для устройстваh2-eth0
. - Проверим, что соединение между хостом
h1
и хостомh2
не имеет явно установленной задержки, используя командуping
с терминала хостаh1
:ping 10.0.0.2
- Все пакеты были получены успешно (0% потерь пакетов).
- Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
4.6 Добавление джиттера в интерфейс подключения к WAN
В сетях нет постоянной задержки. Задержка может варьироваться в зависимости от других потоков трафика, конкурирующих за тот же путь.
Джиттер — это изменение времени задержки.
Параметры задержки описываются средним значением (\(\mu\)), стандартным отклонением (\(\sigma\)) и корреляцией.
По умолчанию NETEM использует равномерное распределение, так что задержка находится в пределах \(\mu \pm \sigma\).
Добавим задержку в 100 миллисекунд со случайным отклонением 10 миллисекунд.
Прежде чем сделать это, необходимо восстановите конфигурацию интерфейсов по умолчанию на узлах
h1
иh2
.В терминале хоста
h1
введите команду:sudo tc qdisc add dev h1-eth0 root netem delay 100ms 10ms
Добавленное здесь новое значение представляет джиттер, который определяет вариацию задержки.
Все пакеты, покидающие хост
h1
через интерфейсh1-eth0
, будут иметь задержку 100 мс со случайным отклонением ±10 мс.Можно проверить, что соединение от хоста
h1
к хостуh2
имеет задержку 100 мс со случайным отклонением ± 10 мс, с помощью командыping
на терминале хостаh1
:ping 10.0.0.2
Все пакеты были получены успешно (0% потерь пакетов).
Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
В терминале хоста
h1
введите следующую команду, чтобы удалить предыдущие конфигурации:sudo tc qdisc del dev h1-eth0 root netem
4.7 Добавление значения корреляции для джиттера и задержки
- Параметр корреляции управляет отношением между последовательными псевдослучайными значениями.
- Добавим задержку в 100 миллисекунд с вариацией ±10 миллисекунд при добавлении значения корреляции.
- Прежде чем сделать это, необходимо восстановите конфигурацию интерфейсов по умолчанию на узлах
h1
иh2
. - В терминале хоста
h1
введите следующую команду:sudo tc qdisc add dev h1-eth0 root netem delay 100ms 10ms 25%
- Добавленное здесь новое значение представляет собой значение корреляции для джиттера и задержки.
- Все пакеты, покидающие узел устройства
h1
на интерфейсеh1-eth0
, будут иметь время задержки 100 мс со случайным отклонением ±10 мс, при этом следующий случайный пакет зависит от предыдущего на 25%. - Можно проверить соединение между хостами
h1
иh2
с помощью командыping
на терминале хостаh1
:ping 10.0.0.2
- Все пакеты были получены успешно (0% потерь пакетов).
- Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
- В терминале хоста
h1
введите следующую команду, чтобы удалить предыдущие конфигурации:sudo tc qdisc del dev h1-eth0 root netem
4.8 Распределение задержки
- NETEM позволяет пользователю указать распределение, которое описывает, как задержки изменяются в сети.
- Обычно задержки неравномерны, поэтому может быть удобно использовать неравномерное распределение, такое как нормальное, парето или парето-нормальное.
- Можно указать нормальное распределение задержки в эмулируемой сети.
- Прежде чем сделать это, необходимо восстановите конфигурацию интерфейсов по умолчанию на узлах
h1
иh2
. - В терминале хоста
h1
введите следующую команду:sudo tc qdisc add dev h1-eth0 root netem delay 100ms 20ms distribution normal
- Добавленная здесь новая опция (
distribution
) задаёт тип распределения задержки. - Определим задержку так, чтобы она имела нормальное распределение, что обеспечивает более реалистичную эмуляцию сетей WAN.
- Все пакеты, покидающие хост
h1
на интерфейсеh1-eth0
, будут иметь время задержки, которое распределяется в диапазоне 100 мс ± 20 мс. - Используем команду
ping
на терминале хостаh1
:ping 10.0.0.2
- Все пакеты были получены успешно (0% потерь пакетов).
- Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
- В терминале хоста
h1
введите следующую команду, чтобы удалить предыдущие конфигурации:sudo tc qdisc del dev h1-eth0 root netem
4.9 Видео: Использование netem I. Интерактивный эксперимент
5 Воспроизводимый эксперимент
5.1 Постановка задания
- Будем исследовать задержки и построим графики для них.
- Выполните все интерактивные эксперименты в виде воспроизводимых.
- Для каждого эксперимента
expname
создайте свой каталог:mkdir -p ~/work/lab_netem_i/expname
- В него мы будем помещать файлы эксперимента.
- Для каждого эксперимента создайте скрипт для проведения эксперимента
lab_netem_i.py
и скрипт для визуализацииping_plot
. - Кроме визуализации вычислите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи.
- Для примера реализуем задание простейшей задержки.
5.2 Добавка задержки для интерфейса, подключающегося к WAN
- Создадим каталог
simple-delay
:mkdir -p ~/work/lab_netem_i/simple-delay cd ~/work/lab_netem_i/simple-delay
- Создадим скрипт для эксперимента
lab_netem_i.py
:#!/usr/bin/env python """ Simple experiment. Output: ping.dat """ from mininet.net import Mininet from mininet.node import Controller from mininet.cli import CLI from mininet.log import setLogLevel, info import time def emptyNet(): "Create an empty network and add nodes to it." net = Mininet( controller=Controller, waitConnected=True ) info( '*** Adding controller\n' ) net.addController( 'c0' ) info( '*** Adding hosts\n' ) h1 = net.addHost( 'h1', ip='10.0.0.1' ) h2 = net.addHost( 'h2', ip='10.0.0.2' ) info( '*** Adding switch\n' ) s1 = net.addSwitch( 's1' ) info( '*** Creating links\n' ) net.addLink( h1, s1 ) net.addLink( h2, s1 ) info( '*** Starting network\n') net.start() info( '*** Set delay\n') h1.cmdPrint( 'tc qdisc add dev h1-eth0 root netem delay 100ms' ) h2.cmdPrint( 'tc qdisc add dev h2-eth0 root netem delay 100ms' ) time.sleep(10) # Wait 10 seconds info( '*** Ping\n') h1.cmdPrint( 'ping -c 100', h2.IP(), '| grep "time=" | awk \'{print $5, $7}\' | sed -e \'s/time=//g\' -e \'s/icmp_seq=//g\' > ping.dat' ) info( '*** Stopping network' ) net.stop() if __name__ == '__main__': setLogLevel( 'info' ) emptyNet()
- Создадим скрипт для визуализации
ping_plot
:#!/usr/bin/gnuplot --persist set terminal png crop set output 'ping.png' set xlabel "Sequence number" set ylabel "Delay (ms)" set grid plot "ping.dat" with lines
- Зададим права доступа:
chmod +x ping_plot
- Создадим
Makefile
:all: ping.dat ping.png ping.dat: sudo python lab_netem_i.py sudo chown mininet:mininet ping.dat ping.png: ping.dat ./ping_plot clean: -rm -f *.dat *.png
- Выполним эксперимент:
make
- Посмотрите график.
- Вычислите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи.