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 по умолчанию.
- Топология представляет собой коммутатор с двумя подключёнными к нему хостами.
- Для запуска топологии используем параметры командной строки:
1sudo mn --topo=single,2 -x
3.2 Рабочие файлы
- Подключимся к виртуальной машине:
1ssh -Y mininet@192.168.x.y
- Для рабочих файлов будем использовать каталог
~/work/lab_netem_i
:1mkdir -p ~/work/lab_netem_i
4 Интерактивный эксперимент
4.1 Добавление/изменение задержки для эмуляции WAN
Работа с NETEM осуществляется с помощью утилиты командной строки
tc
.Без дополнительных параметров NETEM ведёт себя как базовая очередь FIFO без задержек, потерь, дублирования или переупорядочения пакетов.
Основной синтаксис
tc
, используемый с NETEM, следующий:1sudo 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
введите следующую команду:1sudo 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
:1ping 10.0.0.2
Все пакеты были получены успешно (0% потерь пакетов).
Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
Этот сценарий эмулирует задержку в 100 миллисекунд на интерфейсе узла
h1
, подключающегося к коммутатору.Чтобы эмулировать глобальную сеть с двунаправленной задержкой, к соответствующему интерфейсу на хосте
h2
также необходимо добавить задержку в 100 миллисекунд.В терминале хоста
h2
введите следующую команду:1sudo tc qdisc add dev h2-eth0 root netem delay 100ms
Проверим, что соединение между хостом
h1
и хостомh2
имеетRTT
200 миллисекунд (100 мс от хостаh1
к хостуh2
плюс 100 мс от хостаh2
к хостуh1
), повторив командуping
на терминале хостаh1
:1ping 10.0.0.2
Все пакеты были получены успешно (0% потерь пакетов).
Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
4.4 Изменение задержки в эмулируемой глобальной сети
- Изменим задержку со 100 миллисекунд до 50 миллисекунд как для отправителя, так и для получателя. RTT теперь будет 100 миллисекунд.
- В терминале хоста
h1
введите следующую команду:1sudo tc qdisc change dev h1-eth0 root netem delay 50ms
- Здесь добавлен новый параметр
change
, который изменяет ранее установленную задержку на 50 миллисекунд. - Применим также описанный выше шаг к терминалу хоста
h2
, чтобы изменить задержку на 50 мс:1sudo tc qdisc change dev h2-eth0 root netem delay 50ms
- Теперь можно проверить, что соединение от хоста
h1
к хостуh2
имеет задержку 100 миллисекунд, используя командуping
с терминала хостаh1
:1ping 10.0.0.2
- Все пакеты были получены успешно (0% потерь пакетов).
- Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
4.5 Восстановление исходных значений (удаление правил)
- Восстановим конфигурацию по умолчанию как для отправителя, так и для получателя, удалив все правила, применённые к сетевому планировщику интерфейса.
- В терминале хоста
h1
введите следующую команду:1sudo tc qdisc del dev h1-eth0 root netem
- Добавлена новая опция
del
, которая удаляет ранее установленные правила для данного интерфейса. - В результате
tc qdisc
восстановит значения по умолчанию для устройстваh1-eth0
. - Применим те же действия для удаления правил на хосте
h2
. В терминале хостаh2
введите следующую команду:1sudo tc qdisc del dev h2-eth0 root netem
- В результате дисциплина организации очереди
tc
восстановит свои значения по умолчанию для устройстваh2-eth0
. - Проверим, что соединение между хостом
h1
и хостомh2
не имеет явно установленной задержки, используя командуping
с терминала хостаh1
:1ping 10.0.0.2
- Все пакеты были получены успешно (0% потерь пакетов).
- Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
4.6 Добавление джиттера в интерфейс подключения к WAN
В сетях нет постоянной задержки. Задержка может варьироваться в зависимости от других потоков трафика, конкурирующих за тот же путь.
Джиттер — это изменение времени задержки.
Параметры задержки описываются средним значением (\(\mu\)), стандартным отклонением (\(\sigma\)) и корреляцией.
По умолчанию NETEM использует равномерное распределение, так что задержка находится в пределах \(\mu \pm \sigma\).
Добавим задержку в 100 миллисекунд со случайным отклонением 10 миллисекунд.
Прежде чем сделать это, необходимо восстановите конфигурацию интерфейсов по умолчанию на узлах
h1
иh2
.В терминале хоста
h1
введите команду:1sudo tc qdisc add dev h1-eth0 root netem delay 100ms 10ms
Добавленное здесь новое значение представляет джиттер, который определяет вариацию задержки.
Все пакеты, покидающие хост
h1
через интерфейсh1-eth0
, будут иметь задержку 100 мс со случайным отклонением ±10 мс.Можно проверить, что соединение от хоста
h1
к хостуh2
имеет задержку 100 мс со случайным отклонением ± 10 мс, с помощью командыping
на терминале хостаh1
:1ping 10.0.0.2
Все пакеты были получены успешно (0% потерь пакетов).
Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
В терминале хоста
h1
введите следующую команду, чтобы удалить предыдущие конфигурации:1sudo tc qdisc del dev h1-eth0 root netem
4.7 Добавление значения корреляции для джиттера и задержки
- Параметр корреляции управляет отношением между последовательными псевдослучайными значениями.
- Добавим задержку в 100 миллисекунд с вариацией ±10 миллисекунд при добавлении значения корреляции.
- Прежде чем сделать это, необходимо восстановите конфигурацию интерфейсов по умолчанию на узлах
h1
иh2
. - В терминале хоста
h1
введите следующую команду:1sudo tc qdisc add dev h1-eth0 root netem delay 100ms 10ms 25%
- Добавленное здесь новое значение представляет собой значение корреляции для джиттера и задержки.
- Все пакеты, покидающие узел устройства
h1
на интерфейсеh1-eth0
, будут иметь время задержки 100 мс со случайным отклонением ±10 мс, при этом следующий случайный пакет зависит от предыдущего на 25%. - Можно проверить соединение между хостами
h1
иh2
с помощью командыping
на терминале хостаh1
:1ping 10.0.0.2
- Все пакеты были получены успешно (0% потерь пакетов).
- Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
- В терминале хоста
h1
введите следующую команду, чтобы удалить предыдущие конфигурации:1sudo tc qdisc del dev h1-eth0 root netem
4.8 Распределение задержки
- NETEM позволяет пользователю указать распределение, которое описывает, как задержки изменяются в сети.
- Обычно задержки неравномерны, поэтому может быть удобно использовать неравномерное распределение, такое как нормальное, парето или парето-нормальное.
- Можно указать нормальное распределение задержки в эмулируемой сети.
- Прежде чем сделать это, необходимо восстановите конфигурацию интерфейсов по умолчанию на узлах
h1
иh2
. - В терминале хоста
h1
введите следующую команду:1sudo tc qdisc add dev h1-eth0 root netem delay 100ms 20ms distribution normal
- Добавленная здесь новая опция (
distribution
) задаёт тип распределения задержки. - Определим задержку так, чтобы она имела нормальное распределение, что обеспечивает более реалистичную эмуляцию сетей WAN.
- Все пакеты, покидающие хост
h1
на интерфейсеh1-eth0
, будут иметь время задержки, которое распределяется в диапазоне 100 мс ± 20 мс. - Используем команду
ping
на терминале хостаh1
:1ping 10.0.0.2
- Все пакеты были получены успешно (0% потерь пакетов).
- Задание: Запишите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи (RTT).
- В терминале хоста
h1
введите следующую команду, чтобы удалить предыдущие конфигурации:1sudo tc qdisc del dev h1-eth0 root netem
4.9 Видео: Использование netem I. Интерактивный эксперимент
5 Воспроизводимый эксперимент
5.1 Постановка задания
- Будем исследовать задержки и построим графики для них.
- Выполните все интерактивные эксперименты в виде воспроизводимых.
- Для каждого эксперимента
expname
создайте свой каталог:1mkdir -p ~/work/lab_netem_i/expname
- В него мы будем помещать файлы эксперимента.
- Для каждого эксперимента создайте скрипт для проведения эксперимента
lab_netem_i.py
и скрипт для визуализацииping_plot
. - Кроме визуализации вычислите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи.
- Для примера реализуем задание простейшей задержки.
5.2 Добавка задержки для интерфейса, подключающегося к WAN
- Создадим каталог
simple-delay
: - Создадим скрипт для эксперимента
lab_netem_i.py
:1#!/usr/bin/env python 2 3""" 4Simple experiment. 5Output: ping.dat 6""" 7 8from mininet.net import Mininet 9from mininet.node import Controller 10from mininet.cli import CLI 11from mininet.log import setLogLevel, info 12import time 13 14def emptyNet(): 15 16 "Create an empty network and add nodes to it." 17 18 net = Mininet( controller=Controller, waitConnected=True ) 19 20 info( '*** Adding controller\n' ) 21 net.addController( 'c0' ) 22 23 info( '*** Adding hosts\n' ) 24 h1 = net.addHost( 'h1', ip='10.0.0.1' ) 25 h2 = net.addHost( 'h2', ip='10.0.0.2' ) 26 27 info( '*** Adding switch\n' ) 28 s1 = net.addSwitch( 's1' ) 29 30 info( '*** Creating links\n' ) 31 net.addLink( h1, s1 ) 32 net.addLink( h2, s1 ) 33 34 info( '*** Starting network\n') 35 net.start() 36 37 info( '*** Set delay\n') 38 h1.cmdPrint( 'tc qdisc add dev h1-eth0 root netem delay 100ms' ) 39 h2.cmdPrint( 'tc qdisc add dev h2-eth0 root netem delay 100ms' ) 40 41 time.sleep(10) # Wait 10 seconds 42 43 info( '*** Ping\n') 44 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' ) 45 46 info( '*** Stopping network' ) 47 net.stop() 48 49 50if __name__ == '__main__': 51 setLogLevel( 'info' ) 52 emptyNet()
- Создадим скрипт для визуализации
ping_plot
: - Зададим права доступа:
1chmod +x ping_plot
- Создадим
Makefile
: - Выполним эксперимент:
1make
- Посмотрите график.
- Вычислите минимальное, среднее, максимальное и стандартное отклонение времени приёма-передачи.