Цель: ознакомиться с техническими аспектами функционирования и использования программно-определяемых сетей; получить практические навыки в области установки, настройки и использования эмулятора Mininet.
## 1.1. Теоретические сведения
Современный уровень развития глобальных сетей можно охарактеризовать следующим образом: существует насущная потребность в совершенствовании аспектов управления, мониторинга и конфигурирования системы. Решение может быть найдено на основе принципов программно-определяемых сетей (SDN). Вот их краткий перечень [1]: разграничение плоскостей управления и передачи данных [2], использование унифицированных коммутаторов для обеспечения пересылки данных, использование контроллера - для централизованной координации работы таких коммутаторов, использование протокола OpenFlow [3, 4]. Спецификация OpenFlow предоставляет открытый интерфейс для взаимодействия компонентов SDN-сети. Ключевыми компонентами являются контроллер, коммутаторы и хосты.
В связи с тем, что технология SDN является относительно новой, работать с такой сетью напрямую обычно довольно сложно. Решением может стать использование различных эмуляторов. Эмулятор обычно представляет собой набор программных и аппаратных средств для представления SDN-сети в виртуальной среде. Программное обеспечение SDN базируется на платформе Linux. Вот несколько примеров таких эмуляторов: Mininet [5, 6], EstiNet [7], OpenNet [8], ns-3 [9]. Каждое из этих решений имеет свои преимущества и недостатки. Однако эмулятор Mininet часто рассматривается как образец для сравнения. Поэтому в наших лабораторных работах будет использоваться именно это решение.
Среда Mininet призвана стать средством эмуляции SDN-сети, в частности, путем создания виртуальных хостов, коммутаторов, контроллеров и соединений между этими компонентами. Названные компоненты и связи между ними формируют топологию сети.
@@ -62,19 +66,31 @@ Mininet предоставляет, в частности, следующие в
Из названия файла видно, что содержимое архива представляет собой эмуляцию 32-битной среды ubuntu-14.04-server Linux. После установки утилиты VirtualBox-4.3.10 содержимое архива - файл mininet-vm-i386.vmdk - необходимо использовать в качестве жесткого диска создаваемой виртуальной системы. Снимок успешно созданной виртуальной машины приведен на рис. 2. Следует отметить, что для нужд виртуальной машины необходимо выделить не менее 512 МБ оперативной памяти.
<imgsrc="./media/image2.png"align="center"width="400"alt="Информация о конфигурации виртуальной машины">
Рис. 2 - Информация о конфигурации виртуальной машины
```
</td></tr></table>
### Шаг 2. Настройка сетевых интерфейсов.
Для настройки сетевых интерфейсов виртуальной машины необходимо сначала выбрать опцию "Настройки", затем перейти к конфигурации "Адаптер 1" и "Адаптер 2" через опцию "Сеть" (рис. 3, рис. 4).
<imgsrc="./media/image4.png"align="center"width="400"alt="Конфигурация сети 'Адаптер 2'">
```
Рис. 4 - Конфигурация сети "Адаптер 2"
```
</td></tr></table>
Чтобы создать собственную информационную модель, сначала нужно создать проект, в котором вы будете работать в будущем.
### Шаг 3. Основы использования Mininet.
...
...
@@ -201,14 +217,14 @@ mininet@mininet-vm:~$
> sudo mn --link tc,bw=100,delay=40ms
```
Для каждого варианта необходимо сделать следующее:
- 5 раз измерить пропускную способность канала связи между хостами. Для этого следует использовать команду iperf. Среднее значение должно быть помещено в отчет;
- найти минимальное значение параметра rtt (round trip time) с помощью команды ping.
- 5 раз измерить пропускную способность канала связи между хостами. Для этого следует использовать команду `iperf`. Среднее значение должно быть помещено в отчет;
- найти минимальное значение параметра `rtt` (round trip time) с помощью команды `ping`.
```
Примечания:
```
- Параметр rtt включает в себя время, затраченное на передачу пакета от узла-источника к узлу назначения, плюс время на уведомление о получении пакета;
- Для каждого варианта студент должен уметь объяснить полученные результаты, например, почему измеренные значения пропускной способности ниже заданного значения параметра bw, минимальное значение параметра rtt примерно в 4 раза выше заданного значения задержки.
- Параметр `rtt` включает в себя время, затраченное на передачу пакета от узла-источника к узлу назначения, плюс время на уведомление о получении пакета;
- Для каждого варианта студент должен уметь объяснить полученные результаты, например, почему измеренные значения пропускной способности ниже заданного значения параметра `bw`, минимальное значение параметра `rtt` примерно в 4 раза выше заданного значения задержки.
2. Создайте сеть с линейной топологией, охватывающую 3 хоста:
```
...
...
@@ -224,17 +240,19 @@ mininet@mininet-vm:~$
Эта топология будет включать семь соединений.
5. Создайте сеть с древовидной топологией с минимальной конфигурацией (один
контроллер, один коммутатор и пара хостов) и протестируйте ее с помощью команды pingall
командой:
5. Создайте сеть с древовидной топологией с минимальной конфигурацией (один контроллер, один коммутатор и пара хостов) и протестируйте ее с помощью команды pingall командой:
```
> sudo mn --topo tree,depth=1,fanout=2 --test
pingall
```
Параметр --topo tree задает саму топологию дерева. Атрибут depth задает количество слоев коммутаторов (в нашем случае один слой,
представленный одним элементом (вершиной) дерева коммутаторов): на потенциальном втором слое будет пара коммутаторов, на третьем - четыре, и так далее. Атрибут fanout определяет количество подключений к каждому коммутатору. В нашем случае fanout=2. Это означает, что, учитывая, что depth=1 (нет других слоев с коммутаторами и вообще нет других коммутаторов), оба соединения являются прямыми соединениями с хостами.
Например, если бы у нас была глубина=2, то один коммутатор первого уровня был бы подключен к паре коммутаторов второго уровня, а эти коммутаторы второго уровня были бы напрямую подключены к паре хостов каждый. Это означает, что всего будет три коммутатора и четыре хоста.
Параметр --test pingall означает, что после создания сети с заданной топологией каждый хост должен пропинговать все остальные хосты для проверки согласованности сети.
Параметр `--topo tree` задает саму топологию дерева. Атрибут `depth` задает количество слоев коммутаторов (в нашем случае один слой,
представленный одним элементом (вершиной) дерева коммутаторов): на потенциальном втором слое будет пара коммутаторов, на третьем - четыре, и так далее.
Атрибут `fanout` определяет количество подключений к каждому коммутатору. В нашем случае `fanout=2`. Это означает, что, учитывая, что `depth=1` (нет других слоев с коммутаторами и вообще нет других коммутаторов), оба соединения являются прямыми соединениями с хостами.
Например, если бы у нас была `depth=2`, то один коммутатор первого уровня был бы подключен к паре коммутаторов второго уровня, а эти коммутаторы второго уровня были бы напрямую подключены к паре хостов каждый. Это означает, что всего будет три коммутатора и четыре хоста.
Параметр `--test pingall` означает, что после создания сети с заданной топологией каждый хост должен пропинговать все остальные хосты для проверки согласованности сети.
Процедура создания и тестирования такой сети - трудоемкий процесс, который займет около 5 секунд и будет отображен
в журнале консоли.
...
...
@@ -264,7 +282,7 @@ pingall
8. Команды для запуска веб-сервера и соответствующего клиента.
9. Команды для установки задержек на коммуникационных каналах.
10. Команды для изменения конфигурации сети.
11. Использование параметров depth и fanout при создании сети с древовидной топологией. Охарактеризуйте влияние значений этих параметров на общее количество узлов сети.
11. Использование параметров `depth` и `fanout` при создании сети с древовидной топологией. Охарактеризуйте влияние значений этих параметров на общее количество узлов сети.