В программно-конфигурируемой сети (SDN) происходит разделение плоскости передачи и управления данными, позволяющее осуществить программное управление плоскостью передачи, которое может быть физически или логически отделено от аппаратных коммутаторов и маршрутизаторов. Подобный подход дает большое количество плюсов:
- Возможность видеть топологию всей сети;
- Возможность конфигурации всей сети в целом, а не отдельных единиц оборудования;
- Возможность производить независимое обновление оборудования в сети;
- Возможность контролировать всей сети из высокоуровневого приложения.
SDN СЕТИ
То есть, основное отличие программно-конфигурируемых сетей - делегация задачи вычисления маршрутов контроллеру (плоскость управления) и оставить функцию передачи пакетов (плоскость передачи данных) на отдельных устройствах (коммутаторы OpenFlow) , что снизит нагрузку на маршрутизатор и увеличит его производительность.
Рассмотрим эмуляторы подробнее.
MININET
Эмулятор, находящийся в свободном доступе, большая часть которого написана на языке Python. Работает с “легковесной” виртуализацией, то есть вся эмулируемая сеть реальна, в том числе и конечные виртуальные машины. Есть возможность подключения любых виртуальных коммутаторов и контроллеров.
ДостоинстваНедостаткиОткрытый код, бесплатность, быстродействие, поддержка всех контроллеров SDN и протоколов OpenFlow вплоть до 1.3, большое количество обучающих видеоВысокая сложность, необходимо знание Python и Linux, отсутствие полноценного графического интерфейса
ESTINET
Эмулятор, все права на который имеет компания Estinet, но для студентов и всех желающих попробовать есть свободный доступ на месяц. Есть удобный графический интерфейс для построения топологии сети, редакции свойств оборудования и запуска эмуляции.
ДостоинстваНедостаткиНаглядность, простота настройки и установки, возможность эмуляции LTE и Wi-Fi сетейЗакрытость, малое количество обучающих статей и видео, низкая производительность работы, более высокая сложность настройки при использовании не встроенного контроллера
Ниже приведена часть программного кода на языке Python для построения сети в эмуляторе Mininet:
# Инициализация топологии
Topo.__init__( self, **opts )
# Добавление узлов, первые - коммутаторы
S1 = self.addSwitch( 's0' )
S2 = self.addSwitch( 's1' )
S3 = self.addSwitch( 's2' )
S4 = self.addSwitch( 's3' )
S5 = self.addSwitch( 's4' )
S6 = self.addSwitch( 's5' )
S7 = self.addSwitch( 's6' )
S8 = self.addSwitch( 's7' )
S9 = self.addSwitch( 's8' )
S10= self.addSwitch( 's9' )
S11= self.addSwitch( 's10')
# Далее - рабочие станции(виртуальные машины)
H1= self.addHost( 'h0' )
H2 = self.addHost( 'h1' )
H3 = self.addHost( 'h2' )
H4 = self.addHost( 'h3' )
H6 = self.addHost( 'h5' )
H7 = self.addHost( 'h6' )
H8 = self.addHost( 'h7' )
H9 = self.addHost( 'h8' )
H10 = self.addHost( 'h9' )
H11 = self.addHost( 'h10' )
# Добавление каналов связи между коммутатором и рабочей станцией
self.addLink( S1 , H1 )
self.addLink( S2 , H2 )
self.addLink( S3 , H3 )
self.addLink( S4 , H4 )
self.addLink( S7 , H7 )
self.addLink( S8 , H8)
self.addLink( S9 , H9)
self.addLink( S10 , H10)
self.addLink( S11 , H11)
# Добавление каналов связи между коммутаторами
self.addLink( S1 , S2, bw=1, delay='0.806374975652ms')
self.addLink( S1 , S3, bw=1, delay='0.605826192092ms')
self.addLink( S2 , S11, bw=1000, delay='1.362717203ms')
self.addLink( S3 , S10, bw=1000, delay='0.557936322ms')
self.addLink( S4 , S5, bw=1000, delay='1.288738ms')
self.addLink( S4 , S7, bw=1000, delay='1.1116865ms')
self.addLink( S5 , S6, bw=1000, delay='0.590828707ms')
self.addLink( S5 , S7, bw=1000, delay='0.9982281ms')
self.addLink( S6 , S10, bw=1000, delay='1.203263ms')
self.addLink( S7 , S8, bw=1000, delay='0.2233403ms')
self.addLink( S8 , S9, bw=1000, delay='1.71322726ms')
self.addLink( S8 , S11, bw=1000, delay='0.2409477ms')
self.addLink( S9 , S10, bw=1000, delay='1.343440256ms')
self.addLink( S10 , S11, bw=1000, delay='0.544934977ms')
СРАВНЕНИЕ КОНТРОЛЛЕРОВ ДЛЯ ПОСТРОЕНИЯ СЕТИ
В данный момент, существует большое количество платных и бесплатных(открытых) контроллеров. Все нижеперечисленные можно скачать и установить на домашнюю систему или виртуальную машину. Рассмотрим самые популярные открытые контроллеры и их плюсы и минусы:
- NOX - один из первых контроллеров, написан на языке C++;
- POX - контроллер, похожий на NOX и написанный на языке Python;
- OpenDayLight- контроллер, поддерживаемый многими корпорациями, написан на языке Java и постоянно развивающийся;
- RunOS- российская разработка от Центра Прикладного Исследования Компьютерных Сетей (ЦПИКС), имеет графический интерфейс, подробную документацию и заявлена самая высокая производительность.