Monthly Archives: April 2014

Speed/duplex capabilities

Не смотря на то, что уже давным-давно существует ethernet autonegotiation, до сих пор можно столкнуться с проблемой “линк встал в 100half” или подобной. half-duplex это задержки, низкая скорость, потери и прочие прелести. В этой заметке будут рассмотрены типовые ситуации, с которыми приходится сталкиваться в реальной жизни и способы их избегать. Схема для этой статьи будет тривиальной:

speed/duplex capabilities scheme

Основная идея – использовать функционал speed-duplex capabilities. Смысл фичи очень простой – вместо выключения autonegotiation и жёсткого задания режима скорости/дуплекса, разрешать или запрещать анонсирование того или иного режима скорости/дуплекса.

Такой функционал поддерживается, например, на коммутаторах Huawei Quidway S2300, Edge-Core ES3528M, Digital China DCS-3950-28C, Eltex MES, DLink DGS-3600, DGS-3200 Series и других.
Continue reading

Advertisements

Burst vs буфер коммутации

Часто приходится сталкиваться с ошибочным мнением о том, что на сети нет потери пакетов, потому что “на графиках нет полок”(и CRC). Однако, графики это результат усреднения, у кого-то это 5 минут, у других 30 секунд, а где-то интервал усреднения может быть даже 5 секунд. Но всё равно такие графики не учитывают явления “микробёрстов”. “Проблема” выражается в том, что практически в любой сети существуют интерфейсы с различной скоростью. Например, в не очень большой сети это 100М на доступе, 1G на агрегации и 10G в ядре или его подобии. И каждый переход 10G->1G, 1G->100M и т.п. является потенциальной проблемой.

Для того, чтобы продемонстрировать эти самые микробёрсты, соберём следующую схему из одного коммутатора и компьютера.

burst-scheme

В качестве коммутатора взят DCS-3950-28C просто потому что он был под рукой. Это относительно недорогой свитч, используемый на просторах СНГ для строительства FTTB-сетей, обычно продаётся под различными названиями разными поставщиками.
Continue reading

Маршрутизация multicast в Linux

В современных реалиях, скорее всего, нет смысла заниматься маршрутизацией(репликацией) multicast-трафика с помощью софтроутеров(будь то ядро Linux или что-то иное). Причина довольно простая – даже дешёвые свитчи умеют L2/L3-multicast(хоть и с ограничениями по количеству групп/маршрутов, но всё же это делается в asic-ах). Однако, существует ряд задач, которые могут быть не решены в “железе” (нет поддержки со стороны ПО/невозможно реализовать ввиду возможностей asic), например ренамберинг(изменение destination ip), внесение случайных задержек(перемешивание), отправка multicast в тунель, резервирование источника по произвольному критерию.

Зачем может потребоваться ренамберинг мультикаст группы? Во-первых, маппинг IP-mac неодназначен(например, группам 238.1.1.1 и 239.1.1.1 соответствует один и тот же mac-адрес), что может вызвать проблемы в L2-сегменте. Конечно, такая коллизия маловероятна, однако возможна, когда вы берёте multicast из разных внешних источников(в принципе, IP-адреса могут даже полностью совпасть). Во-вторых, вы можете захотеть скрыть свой источник, изменив и destination и source адрес. В destination может быть “спрятан” номер AS источника(RFC3180), по source тоже можно догадаться об источнике, если он не серый. В третьих, перенумеровать группу может потребоваться для избежания коллизии на оборудовании, где заканчивается TCAM под multicast (как временное решение до замены оборудования/изменения схемы сети). И наконец, вы решили зарезервировать ТВ-каналы путём их получения из разных источников(т.е. вливать на сервер 2 разных группы(но одинаковых по контенту) и забирать из него одну, результирующую(работающую))

Внести случайную задержку(reordering) или потери может потребоваться для проверки поведения используемых STB/soft-плееров. Например, вам интересно, как будет выглядеть картинка, если где-то на сети мультикаст пройдёт через per-packet балансировку и не зависнет ли плеер при наличии потери пакетов, будут ли издаваться неприятные скрипящие звуки или же просто квадратики и тишина. Continue reading

VPLS без реального оборудования

До последнего времени, чтобы поупражняться в настройке и траблшутинге VPLS, приходилось иметь дело с реальным оборудованием(за исключением x86-версии Mikrotik) или арендовать чужие лаборатории на время. В конце 2013-начале 2014 года ситуация изменилась с выходом Cisco CSR1000V(IOS-XE 3.10S) и Juniper Firefly Perimeter(JunOS 12.1X46-D10.2), он же vSRX.

CSR1000V поддерживает VPLS полноценно. Для знакомства с самой технологией, лучше всего использовать именно этот виртуальный роутер.

vSRX в ограниченном(но достаточном) виде, а именно поддерживается коммутатация между псевдопроводами и локальным сабынтерфейсом с учётом таблицы коммутации VPLS. Свитчинг между локальными сабынтерфейсами не поддерживается, также как и свитчинг между пседопроводами.

Далее пойдёт речь о том, как запустить и заставить нормально работать упомянутые виртуальные роутеры на гипервизоре ESXi 5.5 Continue reading

Примеры применения Linux network namespaces (netns)

В ядре Linux(начиная с версии 2.6.29) имеется весьма интересный и полезный функционал network namespaces(netns), однако про его существование, чаще всего, либо не знают, либо не понимают что с ним можно делать. В этой заметке рассматривается несколько примеров применения этого функционала:

  • Мониторинг L3VPN с пересекающимися адресными пространствами средствами zabbix и zabbix-proxy
  • Автоматизированное тестирование сетевого ПО(dhcp, pppoe-сервера и т.п.)
  • Предоставление услуги L3VPN с дополнительными сервисами(NAT, DHCP и другими) и виртуализация абонентской CPE как частный случай решения этой задачи
  • Изоляция управления сервером от остальных сервисов

Функционал похож на Cisco VRF, но ещё больше напоминает Juniper logical-system. Кроме того, описываемые задачи можно решать с помощью создания множества обычных виртуальных машин или контейнеров OpenVZ. Традиционная виртуализация не очень удобна для “чисто сетевых” задач “изоляции” и так или иначе, имеет накладные расходы(в том числе на обслуживание). OpenVZ почти всем хорош, кроме того, что не закоммичен в апстрим и как следствие ограничивает вас в выборе ядра, привязывает к себе(тянет себя как зависимость). Continue reading