В чате как-то просили дать обзор на оборудование B4COM, и вот дошли руки написать что-то.

Постарался сделать максимально объективно, без всяких оценок. Всё, что я буду использовать в статье, имеет открытые источники и является всего лишь моим мнением.


Общая информация

B4COM TECH — компания, зарегистрированная в РФ, занимается разработкой и производством телекоммуникационного оборудования. В ассортименте есть как коммутаторы, так и маршрутизаторы.

Коммутаторы бывают для различных задач, с разной пропускной способностью и портовой емкостью. Есть как с 1G портами, так и с 100G.

Маршрутизаторы представлены только в сегменте IP/MPLS. Пока что не видел каких-то разработок в направлении кампусных сетей.


Портфолио и характеристики оборудования

Коммутаторы серии CS4100

Серия коммутаторов подразумевается под нужды центров обработки данных либо в качестве ядра кампусной сети. Умеют многое: EVPN-VXLAN, MLAG, сложные опции роутинга и т.д.
Есть варианты как в форм-факторе 1U, так и 2U, для увеличения количества портов.


img.png

Коммутатор CS4148. Имеет 48 портов SFP28 и 8 портов QSFP28.

img.png

Коммутатор CS4132. Имеет 32 порта QSFP28.

img.png

Коммутатор CS4164. Имеет 64 порта QSFP28.

По хардварным характеристикам ближайшие аналоги — Cisco Nexus 3100-Z или Arista 7050CS3-32S. Все эти модели основаны на чипе Broadcom Trident 3-X7. Отсюда и вытекают все особенности и аппаратные возможности. Максимальная производительность чипа равняется 3.2 Тб/с. Вот тут есть хороший анализ перфоманса - Broadcom Trident 3 Platform Performance Analysis.

По архитектурным особенностям, нашёл документацию по Arista 7050X3, где хорошо описываются различные аппаратные особенности, в частности есть вот такая картинка:
img.png
Собственно это и есть архитектура нашего чипа. Сам Broadcom её почему-то не публикует, ну или я плохо искал, но вот Arista пожалуйста. В детали уходить не буду, оставлю ссылку - 7050X3_Architecture_WP.

Если же говорить про функциональные возможности, то не буду перечислять всё, но основной набор понятен, можно в качестве референса брать любую модель с аналогичным чипом, не будем уже менять и возьмём ту же Arista 7050X3 - 7050X3-Datasheet. Как видите, умеет много всякого разного, в том числе и EVPN-VXLAN, для которого по большей части и предназначены эти устройства.

Тут важно понимать, что мы говорим только о возможностях чипа, и если сказать что Arista 7050X3 = B4COM CS4100, то равенство будет неверным, т.к. есть ещё адаптация софта к конкретному чипу, которую уже реализует разработчик операционной системы.

Маршрутизаторы серии MR300

Серия роутеров разработана для сетей IP/MPLS и предназначена для высокой нагрузки. Соответственно, не предназначена для использования внутри кампуса (хотя вы можете это делать, но никаких соответствующих фич вы тут не увидите).

img.png

Маршрутизатор MR350. Имеет 48 портов SFP28 и 6 портов QSFP28.

Ближайший аналог — Cisco NCS-5501. Собственно, чип и там, и там стоит одинаковый — Qumran-MX.
К слову, тут вообще никакой инфы нет, ни архитектуры, ни чего-то похожего. По крайней мере я не нашёл.

Что касается функциональных возможностней, то основной упор на IP/MPLS и DCI. Поэтому тут реализованы например, такие штуки как поддержка MPLS, SR, SRv6, EVPN, всякие фичи для OAM и т.д.

Аналогично CS4100, все сравнения с Cisco NCS идут в формате сравнения ASICов этих устройств. Естественно IOS-XR и BCOM OS две абсолютно разные линейки софта и то, как они работают с одним и тем же чипом будет различаться.


Коммутаторы серии CS2100

Это младший брат CS4100, предназначенный для сетей управления и внутри кампуса. Набор технологий и возможностей будет соответствующий: никаких EVPN-VXLAN, только простые и понятные VLAN, STP и прочее.
Существуют модели как на 24 порта, так и на 48 портов. Аналогов полно, даже пример приводить не буду — любой кампусный свич с 1G портами. По чипу информации нет.
Дальше эту модель рассматривать не будем.

img.png

Коммутатор CS2148. Имеет 48 портов 2.5 GBase-T, 2 порта QSFP+ и 4 порта SFP28.

Архитектура ПО

Тут сразу стоит сказать, что мы не будем уходить глубоко в детали, посмотрим по большей части основные моменты.

Коммутаторы серии CS4100 и маршрутизаторы MR300

Почему я объединил эти две группы в одну? Тут всё заключается в том, что они имеют достаточно схожую архитектуру, если не смотреть вглубь. Чипы, как я уже писал раньше, в обоих коробках от Broadcom. Что же касается софта, то операционка носит гордое название BCOM OS.

Небольшая ремарка, операционных систем на самом деле не одна, а две - BCOM-OS-DC и BCOM-OS-SP, соответственно для коммутаторов, и для маршрутизаторов. Чипы же всё-таки разные, софт тоже должен отличаться и по набору фич и по прочим вещам. Однако, верхнеуровнево - они схожи и мы тут посмотрим на них в одном ключе.


GRUB

В первую очередь, любую операционную систему нужно установить и затем загрузить. Для загрузки у нас есть различные инструменты, например GRUB, loader (для всяких лучших роутеров в мире на FreeBSD в прошлом) или пресловутый BOOTMGR для Windows.
Т.к. наша операционка опирается на Linux, то и загрузчик будет оттуда же, т.е. GRUB. К слову, он используется не только в привычных всем образах по типу CentOS или Ubuntu, но также и для загрузки Cisco Nexus 9000, Arista 7050X3 и многих других.
Более детально читайте тут — https://www.gnu.org/software/grub/.


ONIE

Но чтобы что-то загружать, надо это что-то установить, и тут для сетевых операционных систем был разработан специальный установщик — ONIE.

Данный установщик (ONIE) является де-факто стандартом для использования внутри сетевых устройств, построенных по принципам whitebox, т.е. когда у нас есть базовая коробка с чипом, и мы хотим на неё поставить какой-то унифицированный софт, к примеру, это может быть Cumulus, SONiC, или, как в нашем случае, BCOM OS.

Особенности данного установщика в том, что он является полностью открытым и направлен на автоматизацию, т.к. сразу поддерживает загрузку ОС из внешних источников, например по TFTP.

Вот картинка того, как происходит процесс первоначальной загрузки и обнаружения операционной системы:

img.png

Первоначальная загрузка

img.png

Схема поиска софта

После нахождения и завершения установки система будет загружена с выбранной вами операционной системой, и при последующей перезагрузке ONIE уже не будет вмешиваться в этот процесс. Загрузка произойдёт следующим образом:

img.png

Схема загрузки в случае уже установленного софта

Если же вы понимаете, что ОС установлена неверно или её нужно заменить на другую, то в момент загрузки с помощью GRUB вы опять вызываете ONIE и повторяете процесс установки. Примеров с подробным описанием хватает в открытом доступе, например, вот инструкция от Dell.

Думаю, тут достаточно, пойдём дальше.


BCOM OS

Выше уже неоднократно упоминалось, что это и как это работает. Давайте теперь посмотрим внутрь.

ОС имеет следующую архитектуру:
img.png

Схема архитектуры ПО

Из ключевых процессов, помимо всяких BGP, SNMP и прочего сетевого, могу указать следующие:

  • NSM (Network Service Module) — процесс, который является центральным и через который проходит вся информация от Control Plane в Data Plane и наоборот. К примеру, тут изучается информация от протоколов маршрутизации и сгружается затем в сторону нижестоящих процессов, на основе которой программируется чип.
  • HSL (Hardware Service Layer) — процесс, который находится на границе между ASICом и NSM. HSL получает информацию от NSM и преобразует её в формат инструкций, которые через SDK сгружаются на чип и тем самым программируют его.

Опять же, т.к. нет достаточно подробного описания и инструкции, то я руководствуюсь только лишь своим опытом и предположениями.

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


Linux Shell и CLI

BCOM OS — это всё-таки Linux, а конкретно Debian. Исходя из этого, несложно догадаться, что у нас есть доступ к Linux Shell, и мы можем даже каким-то образом управлять с его помощью устройством. Как минимум, менять и добавлять конфигурации, перезагружать процессы, запускать tcpdump и многое другое.

Ниже приведу пару примеров того, как это выглядит.

Cбор tcpdump в файл:

LF-10#
LF-10#
LF-10#
LF-10#start-shell
bash-5.0$ su
Password: 
root@LF-10:/home/admin# 
root@LF-10:/home/admin# 
root@LF-10:/home/admin# cd /sbin
root@LF-10:/sbin# 
root@LF-10:/sbin# 
root@LF-10:/sbin# ./tcpdump -enni broadcom0 -w dump1.pcap
tcpdump: listening on broadcom0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C0 packets captured
0 packets received by filter
0 packets dropped by kernel
root@LF-10:/sbin# ^C
root@LF-10:/sbin# 
root@LF-10:/sbin# 
root@LF-10:/sbin# ls -al | grep dump1
-rw-r-----  1 root root        24 Mar  1 14:22 dump1.pcap
root@LF-10:/sbin# 
root@LF-10:/sbin# 
root@LF-10:/sbin# exit
exit
bash-5.0$ exit
exit
LF-10#
LF-10#
LF-10#

Выполнение команды “top”:

LF-10#
LF-10#
LF-10#start-shell
bash-5.0$ 
bash-5.0$ 
bash-5.0$ su
Password: 
root@LF-10:/home/admin# 
root@LF-10:/home/admin# 
root@LF-10:/home/admin# top
top - 14:23:50 up 15 days,  1:11,  1 user,  load average: 0.06, 0.14, 0.17
Tasks: 169 total,   2 running, 167 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.1 us,  0.9 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15936.8 total,  13967.0 free,   1146.3 used,    823.5 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.  14489.0 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                    
 3011 root      20   0  372544 134324  27316 S   8.2   0.8 263:57.40 cmld                                                                                                                                       
 2587 root      20   0 3194632 331588  49324 S   6.1   2.0   1105:40 hsl                                                                                                                                        
 2974 root      20   0   56488  11100   7140 R   2.0   0.1 603:51.21 cmmd                                                                                                                                       
    1 root      20   0  170076  10792   7812 S   0.0   0.1   0:20.38 systemd                                                                                                                                    
    2 root      20   0       0      0      0 S   0.0   0.0   0:00.02 kthreadd                                                                                                                                   
    3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                                                                                                     
    4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                                                                                                                 
    6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd                                                                                                                       
    8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq                                                                                                                               
    9 root      20   0       0      0      0 S   0.0   0.0   0:01.25 ksoftirqd/0                                                                                                                                
   10 root      20   0       0      0      0 I   0.0   0.0   6:15.58 rcu_sched                                                                                                                                  
   11 root      20   0       0      0      0 I   0.0   0.0   0:00.00 rcu_bh                                                                                                                                     
   12 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0                                                                                                                                
   13 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0                                                                                                                                    
   14 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1                                                                                                                                    
   15 root      rt   0       0      0      0 S   0.0   0.0   0:00.01 migration/1                                                                                                                                
   16 root      20   0       0      0      0 S   0.0   0.0   0:00.30 ksoftirqd/1                                                                                                                                
   18 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/1:0H-kblockd                                                                                                                       
   19 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/2                                                                                                                                    
   20 root      rt   0       0      0      0 S   0.0   0.0   0:00.01 migration/2                                                                                                                                
   21 root      20   0       0      0      0 S   0.0   0.0   0:00.14 ksoftirqd/2                                                                                                                                
   23 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/2:0H-kblockd                                                                                                                       
   24 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/3                                                                                                                                    
   25 root      rt   0       0      0      0 S   0.0   0.0   0:00.01 migration/3                                                                                                                                
   26 root      20   0       0      0      0 S   0.0   0.0   0:10.84 ksoftirqd/3                                                                                                                                
   28 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/3:0H-kblockd                                                                                                                       
   29 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/4                                                                                                                                    
   30 root      rt   0       0      0      0 S   0.0   0.0   0:00.01 migration/4                                                                                                                                
   31 root      20   0       0      0      0 S   0.0   0.0   0:16.77 ksoftirqd/4                                                                                                                                
   33 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/4:0H-kblockd                                                                                                                       
   34 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/5                                               

Как видите, ничего нового.

Однако основным средством управления всё-таки является CLI. Он по сути повторяет Cisco, ну или, как любят говорить, является Cisco-like CLI. Аналогично делают многие вендоры, к примеру, та же Arista или какой-нибудь FRR, да и вообще многие другие. Для этого вообще есть отдельный проект — clish.

Приведу ниже некоторые из основных команд, чтобы вы поняли, о чём идёт речь.

Пример изменения hostname на устройстве:

LF-1#
LF-1#
LF-1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
LF-1(config)#
LF-1(config)#hostname LF-10
LF-1(config)#commit
LF-10(config)#
LF-10(config)#
LF-10(config)#^C
LF-10(config)#end
LF-10#
LF-10#

Пример настройки BGP:

LF-10#
LF-10#
LF-10#sh run bgp
!
bgp extended-asn-cap 
!
LF-10#
LF-10#
LF-10#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
LF-10(config)#router bgp 100000
LF-10(config-router)#
LF-10(config-router)#
LF-10(config-router)# bgp router-id 10.0.0.1
LF-10(config-router)# timers bgp 10 30
LF-10(config-router)# neighbor 10.0.0.2 remote-as 100001
LF-10(config-router)# neighbor 10.0.0.2 fall-over bfd multihop
LF-10(config-router)# neighbor 10.0.0.2 update-source 10.0.0.1
LF-10(config-router)# neighbor 10.0.0.2 advertisement-interval 0
LF-10(config-router)# !
LF-10(config-router)# bgp unnumbered-mode
LF-10(config-router-unnum)# neighbor ce31 remote-as external
LF-10(config-router-unnum)# neighbor ce31 fall-over bfd
LF-10(config-router-unnum)# exit-unnumbered-mode
LF-10(config-router)# !
LF-10(config-router)# address-family ipv4 unicast
LF-10(config-router-af)# network 10.0.0.1/32
LF-10(config-router-af)# max-paths ebgp 2
LF-10(config-router-af)# !
LF-10(config-router-af)# bgp v4-unnumbered-mode
LF-10(config-router-v4-unnum)# neighbor ce31 activate
LF-10(config-router-v4-unnum)# exit-v4-unnumbered-mode
LF-10(config-router-af)# !
LF-10(config-router-af)# exit-address-family
LF-10(config-router)# !
LF-10(config-router)# address-family l2vpn evpn
LF-10(config-router-af)# neighbor 10.0.0.2 activate
LF-10(config-router-af)# exit-address-family
LF-10(config-router)# !
LF-10(config-router)# exit
LF-10(config)#!
LF-10(config)#
LF-10(config)#
LF-10(config)#commit
LF-10(config)#
LF-10(config)#
LF-10(config)#end
LF-10#
LF-10#

Проверка состояния BGP в EVPN:

LF-10#
LF-10#
LF-10#sh bgp l2 evpn summary 
BGP router identifier 10.0.0.1, local AS number 100000
BGP table version is 1
1 BGP AS-PATH entries
0 BGP community entries

Neighbor                 V   AS   MsgRcv    MsgSen TblVer   InQ   OutQ    Up/Down   State/PfxRcd     AD  MACIP  MCAST    ESI  PREFIX-ROUTE
10.0.0.2                 4 100001    0          0       0      0      0     never        Idle

Total number of neighbors 1

Total number of Established sessions 0
LF-10#
LF-10#


сессия неактивна, т.к. не стал вторую сторону поднимать.

Как вы могли заметить, дополнительной особенностью является возможность commit. Это непривычно для тех, кто часто взаимодействует с теми же Cisco N9K, но для тех, кто работал с Huawei или Juniper, это привычное дело. Да и вообще, это только в плюс, т.к. позволяет немного защититься от случайной ошибки из-за мисконфига. Впрочем, можно и с ошибкой закоммитить.


Заключение

Таким образом, мы с вами рассмотрели основной модельный ряд, хардварные и софтверные особенности коробок. Как видите, оборудование “способное”, все софтовые и аппаратные возможности говорят о том, что можно использовать в разных целях. Опять же, никто не говорит о том, что если какая-то технология реализована аппаратно, то есть поддерживается чипом, то она обязательно должна присутствовать в софте, это уже вопрос к конкретной версии операционной системы и вообще вопрос в сторону вендора. Надеюсь, в будущем непосредственно сами производители начнут публиковать детальные описания возможностей своего оборудования.

На этом я бы хотел завершить свой небольшой обзор. Буду рад, если он кому-то окажется полезен, и если такой формат “зайдёт”, то возможно, в следующих статьях я рассмотрю какие-то конкретные инструменты и/или технологии внутри оборудования. Если есть какие-то замечания, комментарии и/или пожелания, то пишите на канале, я там активно читаю и отвечаю.

Спасибо за внимание!

Подписывайтесь на канал!