Mininet Topologies and Mininet Python API ( подстрочник на русском языке)
С возвращением.
В этой части урока мы посмотрим несколько простых настроек в Mininet.
Сначала мы попробуем настроить простую топологию с тремя хостами, подключенными к одному коммутатору.
Можете сделать это, введя следующую команду в командной строке виртуальной машины, которую вы загрузили как часть задания на эту неделю.
Сначала запускаем Mininet Launcher с параметрами: sudo mn --test pingall .--topo single 3
Топология, которую мы указываем с помощью этой опции topo, представляет собой топологию одного коммутатора с тремя подключенными к ней узлами.
Эту настройка использует контроллер по умолчанию и коммутатор по умолчанию.
Mininet также позволяет использовать пользовательские внешние контроллеры и пользовательские коммутаторы.
Вернёмся в нашу VirtualBox, у нас была виртуальная машина с openflow и теперь я просто собираюсь запустить эту виртуальную машину.
Входим в систему. И мы должны помнить про подключенный интерфейс.
Таким образом, вы можете видеть здесь, когда мы запускаем эту пусковую установку Mininet с опцией test, и опцией топологии, мы просим Mininet создать топологию одного коммутатора с тремя прикрепленными узлами.
Затем вы видите, что Mininet делает работу по созданию сети.
Затем добавляет контроллер,
затем добавляются три хоста,
включается коммутатор,
связи между каждым хостом и коммутатором,
настройка хоста.
Запуск контроллера и переключение, запуск теста ping, а затем остановка эмуляции.
Давайте посмотрим на основные параметры командной строки Mininet.
topo позволяет вам определить топологию через командную строку при запуске Mininet.
Например, мы только что увидели опцию topo, где мы создаем топологию одного коммутатора с тремя хостами, подключенными к этому коммутатору.
Параметр командной строки switch определяет коммутатор, который будет использоваться в этой топологии,
по умолчанию используется программное обеспечение Open vSwitch, но можно определить другие коммутаторы.
Дальше необходимо использовать параметр контроллера, чтобы определить контроллер, который вы хотите использовать.
Если этот параметр не указан, Mininet использует контроллер по умолчанию с поведением по умолчанию hub-подобным по умолчанию.
Итак, давайте попробуем некоторые другие разные топологии Mininet.
Один из вариантов, который вы можете указать, — это минимальная топология сети.
Минимальная топология просто создает два хоста и один коммутатор.
Поэтому, когда мы запускаем это в Mininet, создается сеть, добавляется контроллер, добавляется два хоста, добавляется один коммутатор, добавляются связи между хостами и коммутатором, запускается контроллер и запускается коммутатор.
В качестве второго примера можно создать линейную топологию с четырьмя хостами и четырьмя коммутаторами. Это позволяет подключить один хост к каждому из четырех коммутаторов, а затем соединить каждый коммутатор в линии, в линейной топологии.
Когда мы запускаем этот пример в Mininet, мы видим немного другое поведение.
Мы снова видим, сеть и контроллер созданы, затем мы видим четыре хоста созданы, мы видим четыре коммутатора созданы, затем мы видим, соответственно, связи между каждым хостом и его соответствующим коммутатором, а затем между каждым из коммутаторов в последовательности.
В качестве третьего примера можно создать топологию, в которой три хоста подключены к одному коммутатору. И мы уже рассматривали это ранее в этой лекции.
Наконец, мы могли бы использовать Mininet для создания топологии дерева с предопределенной глубиной и разветвлением. Опять же, мы видим тот же тип поведения, за исключением того, что ссылки отражают древовидную топологию.
Давайте поближе рассмотрим, как работает оболочка mn. Итак, коротко, mn выполняет Python под капотом. Это скрипт запуска, который выполняет определенный код Python.
Поэтому рассмотрим вариант, который мы использовали раньше, где мы сказали, что topo linear, 4, который, если вы помните, является линейной топологии с четырьмя хостами каждый подключен к коммутатору и коммутаторы, соединенные в линейной топологии - это вызывает код Python, который мы видим здесь справа.
Позвольте мне кратко рассказать вам об этом коде.
Первые две строки просто импортируют пакеты в Python.
следующая линия, линейная, в основном говорит, создать линейную топологию, а k равно четыре говорит, сделать топологию четыре узла.
Затем мы вызываем Mininet, и передаем ему топологию, которую мы только что создали.
Затем мы запускаем эмулятор Mininet,
а затем запускаем PingAll.
Наконец, мы остановим эмулятор.
Мы можем видеть этот код здесь в файле .py. И мы можем запустить его и посмотреть, что произойдет.
как и ожидалось, мы получили топологию с четырьмя узлами, каждый узел перешел на другой узел, а затем эмулятор остановился.
Помимо использования оболочки mn для создания топологий, вы также можете создавать собственные топологии Mininet непосредственно в Python.
Итак, вот пример с двумя хостами и одним коммутатором.
Давайте кратко рассмотрим этот код.
Итак, первые две строки импортируют некоторые модули, которые нам нужны.
Следующая строка создает экземпляр эмулятора Mininet.
Затем мы создаем узлы, которые мы будем использовать в этой сети.
Таким образом, у нас есть два хоста, h0 и h1, коммутатор s0 и контроллер c0.
После того, как мы создаем наши узлы, мы можем создавать связи между узлами и сетью, используя метод добавления ссылки.
Итак, здесь мы создаем связь между h0 и s0. Один хост и коммутатор. И мы создаем вторую связь между h1 и тем же коммутатором, s0.
Таким образом, в этот момент оба хоста подключены к этому коммутатору s0.
У нас также есть пример параметров конфигурации хоста.
Здесь вы можете установить ip адрес каждого хоста, используя метод set ip.
Наконец, как и прежде, мы начинаем эмуляцию.
У нас все хоcты пингуют друг друга.
А потом мы прекратим эмуляцию. Итак, когда вы запускаете этот конкретный фрагмент кода, эмуляция выполняется до завершения, и вы немедленно возвращаетесь в командную строку.
Если добавить такую строку, что означает, что CLI.
CLI (net) перед остановкой, это приведет к тому, что Mininet будет ждать интерактивную командную строку до завершения работы скрипта.
Это не показано здесь, но вы также можете использовать AddLink для определенных свойств связи с дополнительными опциями, включая задержку полосы пропускания, максимальный размер очереди и уровень потерь, которые вы хотели бы иметь по этой конкретной ссылке.
Вот этот код в буфере Emacs в виде скрипта.py.
И давайте посмотрим, что произойдет, когда мы запускаем этот фрагмент кода.
Как и ожидалось, у нас есть два хоста и один коммутатор, и они могут ping друг друга.
Наконец, вот пример более сложной генерации топологии.
Здесь вы можете видеть, что вы можете использовать функции AddHost и AddLink внутри чего-то вроде цикла for, что позволяет создавать более сложные топологии, используя возможности сценариев Python.
Давайте пройдем по этому коду немного детально.
Таким образом, вы можете видеть здесь, что есть класс под названием SinglesWitchTopo, который является подклассом класса Topo, который мы импортировали здесь.
Метод init в основном является конструктором, поэтому, если вы знакомы с объектно-ориентированным программированием, это метод, который вызывается при вызове экземпляра этого единственного коммутатора Topo.
Итак, первое, что мы делаем, это вызвать конструктор родительского класса, а затем мы создаем первый коммутатор, s1.
Затем у нас есть цикл for, который принимает параметр, n, который передается с конструктором, и имеет значение по умолчанию 2.
И в зависимости от этого значения n, что определяет, сколько раз мы перебираем это для цикла.
И для каждой итерации мы добавляем хост и добавляем ссылку, которая соединяет хост с коммутатором.
Затем файл Python также имеет метод под названием SimpleTest, где мы вызываем этот конструктор класса для создания топологии с аргументом n равно 4, что означает, что мы собираемся иметь, что означает, что мы будем иметь четыре хоста, подключенных к этой топологии одного коммутатора.
И как и прежде, мы создаем эмулятор Mininet, а затем запускаем эмуляцию.
Здесь есть дополнительный метод диагностики, называемый DumpNodeConnections. И тогда, как и прежде, у нас есть хосты, все пингуют друг друга, а затем мы останавливаем эмуляцию.
Вот этот фрагмент кода в буфере Emacs. И давайте попробуем запустить это. Как и ожидалось, мы видим, что все четыре хоста подключены к коммутатору. Мы можем видеть соединения хоста, сбрасываемые на стандартный вывод.
И снова, pingall работает так, как ожидалось.
Мы можем увеличить это, чтобы запустить системную команду, такую как ifconfig непосредственно на хосте.
Вот этот фрагмент кода в буфере Emacs, и вот вывод этого кода. Вы можете четко видеть вывод вызова хоста ifconfig.
Итак, мы довольно немного рассмотрели здесь, относительно MiniNet в этом уроке.
Но есть несколько тем, которые мы еще не рассмотрели, которые мы рассмотрим позже в ходе курса, по мере необходимости.
И вы также можете посмотреть с учебник Mininet, чтобы получить дополнительную информацию.
Одна из тем заключается в том, как получить доступ к файловой системе.
Поэтому стоит отметить, что, поскольку Mininet использует легкую виртуализацию ОС, файловая система, которую видит каждый из хостов, является общей.
Это означает, что если вы вызываете файловую операцию на одном из хостов, например запись в файл, то этот файл будет виден на всех других хостах вашей топологии.
Операции файловой системы по существу такие же, как и в обычном программировании Python.
То, на что мы ссылались, но не покрывали, было то, как установить скорость и свойства связи. Мы рассмотрим это более подробно позже в ходе курса, по мере необходимости. Аналогично мы также поговорим о том, как настроить Mininet для использования пользовательских контроллеров и коммутаторов.
И, в частности, позже, мы рассмотрим, как использование пользовательских контроллеров и коммутаторов может изменить поведение различных сетей, а также использоваться для решения различных типов сетевых проблем.
Мы также не очень много касались конфигурации хоста. Мы видели один пример метода установки IP-адреса хоста. Но есть много других методов, которые также могут быть использованы для установки различных параметров конфигурации хоста.
Мы также не освещали, как проводить измерения производительности внутри Mininet. И опять же, мы будем освещать эти детали так, как они нам нужны на протяжении всего курса.