Кажется, что топология «звезда» правит в современном мире. Из-за тотальной популярности технологии Ethernet она окружает нас везде: в квартире, в офисе, в доме все выстроено как центральная точка-коммутатор и множество ответвлений на абонентские устройства.

Но. Смотрите, что произойдет, как только вы выйдете из квартиры.

Вы прикладываете к домофону ключ-«таблетку» — и в этот момент, возможно, пользуетесь шиной 1-Wire, которая по своей топологии буквально шина. 

Садитесь в машину, поворачиваете ключ — и по всему автомобилю идет сигнал на десятки блоков, висящих на общих парах проводов CAN и LIN. Ни один современный автомобиль без шины не поедет вообще. 

Вечером вы идете на концерт — и вся светотехника над сценой, сотни приборов, управляется по DMX512, который бегает поверх шинного интерфейса RS-485. 

Даже показания квартирного теплосчетчика снимаются по M-Bus — специализированной шине для счетчиков.

Звезда победила в офисах и дата-центрах. Но стоит выйти за пределы серверной — на завод, в цех, на подстанцию, в автомобиль, за кулисы концертного зала, квартиру — и выясняется, что там до сих пор правит бал старая добрая шина. Два провода, протянутые через весь объект, и десятки устройств, повисших на них параллельно, как белье на веревке.

Как же так вышло, в наш век современной и быстрой связи?

Что такое шина. И какие бывают виды топологий

Начнем с определения, но с одной важной оговоркой, без которой мы быстро запутаемся.

Шина — это топология, при которой все узлы сети подключены параллельно к одной общей среде передачи данных. Один кабель (магистраль, backbone, trunk — называйте как хотите), и все устройства «слушают» его одновременно. Когда один узел передает, сигнал физически распространяется по всей магистрали и доходит до всех остальных. Каждый узел смотрит на адрес в сообщении и решает: «это мне» или «это не мне, пропускаю мимо ушей».

Ключевое слово здесь — общая среда. В звезде у каждого устройства свой отдельный кусок меди до коммутатора, и то, что вы отправили, слышит только коммутатор. В шине приватности нет: заговорил один — слышат все. 

Но. Топологий у любой сети две:

  • Физическая топология — это то, как реально проложены кабели. То, что увидит монтажник, залезший в лоток, и то, что нарисовано (в идеальном мире) на плане кабельных трасс.

  • Логическая топология — это то, как по этим кабелям движутся данные. Как идет сигнал.

И эти две топологии совпадают далеко не всегда. Классический пример — Ethernet на хабах. Физически это звезда: от каждого компьютера идет своя витая пара к хабу. Но хаб — устройство глупое: все, что пришло в один порт, он повторяет во все остальные. То есть логически это самая настоящая шина — общая среда, все слышат всех, коллизии, вот это все. Физическая звезда, логическая шина.

Обратный пример — Token Ring от IBM. Логически это кольцо: маркер бегает от станции к станции по кругу. А физически станции подключались звездой к устройству MSAU (Multistation Access Unit), внутри которого кольцо и замыкалось. Физическая звезда, логическое кольцо.

Так что когда мы говорим «шина», всегда полезно уточнить, о чем речь. В этой статье мы будем говорить в основном о простой шине — той, где и физика, и логика шинные: один кабель через весь объект, устройства висят на нем параллельно. Именно такая шина живет в промышленности.

Откуда вообще взялось слово «шина»

Небольшое отступление. Почему вообще шина, при чем тут колеса?

Английское bus — это сокращение от omnibus. А omnibus — это латынь, дательный падеж множественного числа от omnis, «весь». Дословно — «для всех», «всем». Так в первой половине XIX века назвали общественный конный экипаж: карету, которая едет по маршруту и в которую может сесть любой желающий, — в противовес личным каретам и наемным извозчикам. Транспорт «для всех». Потом omnibus сократился до bus, обзавелся мотором — и вот он, автобус.

Инженеры-электрики позаимствовали слово еще в конце XIX века. На электростанциях и подстанциях появились bus bars — массивные медные (или алюминиевые) полосы, к которым параллельно подключаются генераторы, трансформаторы и отходящие фидеры. Общий проводник «для всех» присоединений — чем не омнибус? Метафора всем зашла.

Когда в середине XX века появились компьютеры, термин переехал и туда: общий набор проводников, к которому параллельно подключены процессор, память и периферия, естественным образом назвали шиной — data bus, address bus. А уже из вычислительной техники слово перекочевало в сети передачи данных: топология, где все висят на общем кабеле, — это топология «шина».

С русским словом отдельная история. Наше «шина» пришло из немецкого — Schiene, что означает «рельс», «полоса», «планка». Отсюда же, кстати, и автомобильная шина (изначально — металлический обод, полоса на деревянном колесе), и медицинская шина (планка для фиксации перелома), и электротехническая шина (токопроводящая полоса). Четыре разные сферы – одно немецкое слово. Так что когда мы говорим «шина», на самом деле мы говорим «рельс». Учитывая, что у нас самая настоящая сетевая магистраль, по которой едут данные, метафора получилась даже удачнее английской.

Итого: англичане назвали общий провод в честь общественного транспорта, а мы — в честь рельса. На мой вкус оба варианта получились со смыслом.

Какие еще бывают топологии. Короткая экскурсия

Чтобы понимать, с чем мы сравниваем шину, пробежимся по остальному зоопарку. Коротко:

  • Точка-точка — самая простая топология: два устройства, один канал. Никакой адресации не нужно, делить среду не с кем. Так работает RS-232 между компьютером и модемом, так работает современный Ethernet между двумя портами коммутаторов, так работает PCI Express внутри вашего компьютера.

  • Звезда — центральный узел и лучи к абонентам. Плюсы: обрыв одного луча не трогает остальных, каждому абоненту — вся полоса канала, неисправность ищется элементарно. Минусы: центральный узел — единая точка отказа, и кабеля нужно много. Очень много. Тот, кто хоть раз считал СКС на здание, знает, что километры витой пары набегают удивительно быстро.

  • Кольцо — каждый узел соединен с двумя соседями, данные бегут по кругу. В чистом виде почти вымерло (Token Ring, FDDI), но в промышленности и у операторов связи живет в виде колец резервирования: Ethernet-кольцо с протоколами типа ERPS или MRP — стандартное решение для цеховых сетей. Обрыв в одном месте — кольцо разворачивается в линию, и все продолжают работать. Второго обрыва сеть уже не переживет, но кольцо – это там, где и первый обрыв случается не так часто.

  • Дерево (иерархическая звезда) — звезды, соединенные в иерархию. Это, собственно, любая современная корпоративная сеть: ядро — агрегация — доступ.

  • Ячеистая (mesh) — узлы соединены с несколькими соседями, маршрутов много, отказоустойчивость отличная, стоимость и сложность — соответствующие. Полносвязная mesh, где каждый соединен с каждым, в проводном виде — экзотика (число линков растет как n(n−1)/2, посчитайте для двадцати узлов и ужаснитесь), а вот в радиосетях — вполне рабочая история: Zigbee, Thread, промышленный WirelessHART.

И, наконец, шина — наш сегодняшний герой. Один кабель, все параллельно. Кабеля — минимум, центрального узла нет вовсе. Запомним эти два свойства, они нам еще пригодятся.

Как работает шина. Плюсы, минусы, подводные камни

Механика шины очень проста. Есть общая среда, например витая пара, коаксиальный кабель, да хоть радиоэфир. Передатчик любого узла электрически подключен к этой среде параллельно со всеми остальными. Когда узел передает, изменение напряжения (или тока) распространяется по всему кабелю в обе стороны от точки подключения и достигает приемников всех узлов. 

Дальше начинаются два фундаментальных вопроса, и вся история шинных технологий — это история ответов на них.

Вопрос первый: кому предназначены данные? Раз слышат все, в каждом сообщении должен быть адрес. Узел принял кадр, посмотрел на адрес: мое — обрабатываю, не мое — отбрасываю. Отсюда, кстати, растет одна из уязвимостей шины: «отбрасываю» — это добровольное решение узла. Переведите сетевую карту в неразборчивый режим (promiscuous mode) — и вы слышите весь трафик сегмента. В эпоху коаксиального Ethernet сниффинг был занятием тривиальным: не надо ничего зеркалировать и никуда врезаться, просто слушай.

Вопрос второй, главный: кто говорит сейчас? Среда одна, и если два узла начнут передавать одновременно, их сигналы наложатся и превратятся в кашу. Это называется коллизией, и все многообразие шинных протоколов — это, по большому счету, разные ответы на вопрос «как не дать двоим говорить одновременно». Ответов человечество придумало несколько:

  • Ведущий-ведомый (master/slave). На шине есть один главный. Только он имеет право начать разговор; остальные отвечают, когда спросят, и молчат, когда не спрашивают. В исправной системе коллизии невозможны в принципе — некому сталкиваться. Просто, дешево, предсказуемо. Так работает Modbus RTU и добрая половина промышленных протоколов.

  • Случайный доступ с прослушиванием (CSMA/CD). Начальника нет, полная анархия с одним единственным правилом: прежде чем говорить, послушай — не говорит ли кто. Молчание — говори. Если все-таки столкнулись (двое начали разговор одновременно) — оба замолкают, выжидают случайное время и пробуют снова. Так работал классический Ethernet, и об этом у нас будет отдельный разговор.

  • Передача токена (token passing). Право говорить реализовано в виде специального сообщения — токена, который узлы передают друг другу по очереди. Есть токен — говори, нет — молчи. Детерминированно, но механика сложная. Так работали ARCNET, Token Bus (IEEE 802.4) и работает PROFIBUS между несколькими мастерами.

  • Побитовый арбитраж. Самый элегантный вариант, реализованный в CAN: узлы начинают передавать одновременно и в процессе передачи сами выясняют, кто главнее. Причем победитель арбитража даже не узнает, что с ним вообще спорили, и ни один бит при этом не теряется. Как это возможно — расскажу в разделе про CAN, это очень удачное и необычное решение.

Терминаторы, отражения и немного физики

Есть в проводной шине высокоскоростных протоколов (Ethernet по коаксиалу, CAN, обычной линейной RS-485 и некоторых реализаций PROFIBUS) один момент, который для нее критически важен: согласование линии.

Кабель — это не идеальный проводник, а длинная линия с волновым сопротивлением: 50 Ом у «толстого» Ethernet-коаксиала, 120 Ом у типичной витой пары RS-485 и CAN. 

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

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

Отсюда два железных правила шинного монтажа, которые нарушаются на объектах с завидной регулярностью:

  • Терминаторов ровно два, по одному на каждом конце магистрали. Не ноль, не один, не четыре.

  • Магистраль — это линия, а не дерево. Ответвления (отводы, stubs) должны быть как можно короче, в идеале — нулевыми. Каждый длинный отвод — это несогласованный конец, генератор отражений.

Ошибок тут допускается тьма. При ремонте сняли последнее устройство вместе с терминатором. При похолодании длинный кабель сжимался и полуоторванный контакт в клемме терминатора размыкался. И еще много всего. 

Шина не прощает небрежности в физике, и это, забегая вперед, один из ее главных минусов: собрать легко, а разбираться в чужих ошибках — квест.

Плюсы шины: за что ее любит промышленность

Кабель. Главный аргумент, как часто бывает, про деньги. Представьте цех длиной 400 метров, вдоль которого стоят 50 датчиков и приводов. Звезда: 50 отдельных кабелей к шкафу, суммарно — километров десять меди, лотки, которые все это должны вместить, недели монтажа. Шина: один кабель 400 метров, проложенный вдоль ряда, и полсотни коротких отводов. 

Разница в стоимости монтажа — в разы, и на промышленном объекте, где кабель тянут не по фальшпотолку офиса, а в бронерукавах, взрывозащищенных лотках и по эстакадам через улицу, каждый метр на счету. Именно поэтому промышленные сети называются fieldbus — «полевая шина»: шина, идущая на полевой уровень, к датчикам и исполнительным устройствам.

Нет центральной точки отказа. В звезде умер коммутатор — легла вся сеть. В классической шине активного центра нет вообще: магистраль пассивна, это просто медь. Выход из строя любого узла (если он корректно отвалился, не закоротив линию) остальных не трогает — они продолжают общаться, как будто ничего не случилось. Конечно, в архитектуре master/slave смерть мастера автоматом кладет всю сеть. Но это частный случай.

Гибкость масштабирования. Понадобился 51-й датчик — врезал отвод в ближайшую точку магистрали, присвоил адрес, готово. Не надо тянуть новый кабель через весь цех и искать свободный порт. Только важно помнить, что отводы не могут быть длинными и их число на шине все-таки конечно.

Простота и дешевизна узлов. Приемопередатчик RS-485 — это микросхема за доллар и пара клемм. Никаких разъемов RJ-45, магнетиков, PHY-чипов. Когда у вас на объекте триста датчиков температуры, цена интерфейса каждого имеет значение.

Детерминизм (при правильном протоколе). В master/slave-шине время реакции известно заранее и известно точно: опрос по кругу, тайминги, есть гарантия самой большой задержки, хуже которой будет только при обрыве. Для АСУ ТП это важнейшее требование: там никого не интересует «средняя задержка», всех интересует, что клапан закроется не позже чем через столько-то миллисекунд. Всегда.

Живучесть в грязной среде. Дифференциальные шинные интерфейсы (RS-485, CAN) оказались идеально приспособлены для работы рядом с частотными приводами, сварочными аппаратами и прочими генераторами электромагнитного шума. Витая пара с дифференциальной передачей давит синфазные помехи, особо этого не замечая.

Минусы шины: за что мы все это терпим

Полоса делится на всех. Среда одна. Десять мегабит на шине — это десять мегабит на всех, а не каждому. Чем больше узлов и трафика, тем меньше достается каждому. В CSMA/CD-сетях с ростом нагрузки лавинообразно растут коллизии, и реальная пропускная способность сегмента проседает задолго до номинала.

Обрыв магистрали — авария сегмента. Перебили кабель посередине — получили две половины, и хорошо еще, если обе полуживые: у каждой половины теперь по одному оборванному, несогласованному концу, отражения от которого могут добить и то, что осталось. А в коаксиальных сетях обрыв или снятый терминатор клал сегмент целиком. 

Диагностика — боль. В звезде неисправность локализуется портом: не работает Вася — смотрим Васин порт и Васин кабель. В шине неисправность одного узла может выглядеть как деградация всей сети: узел с подгоревшим передатчиком, подтягивающий линию, кладет всех. И ищут его методом последовательного отключения, шагая по цеху с мультиметром. Рефлектометр (TDR) сильно облегчает жизнь — по времени прихода отражения он показывает расстояние до неоднородности с точностью до метров, — но он есть не у всех, а руки, растущие из нужного места, — тем более.

Ограничения по длине, скорости и числу узлов. Каждый подключенный приемопередатчик — емкостная и резистивная нагрузка на линию. Физику не обманешь: либо далеко, либо быстро, либо много узлов — выбирайте два из трех. RS-485: 1200 метров на скорости 100 кбит/с — пожалуйста, но на 10 Мбит/с — только метров пятнадцать. CAN: 1 Мбит/с — максимум 40 метров, а на километровой линии — не выше 50 кбит/с.

Безопасность. Уже говорили: все слышат все. Конфиденциальности на уровне среды нет по определению, а в классических промышленных протоколах нет ни аутентификации, ни шифрования. Modbus, придуманный в 1979 году, об аутентификации вообще не парится: кто прислал корректный запрос, тот и мастер. Пока шина находилась в контуре предприятия, это никого не волновало. Когда к шкафам начали прикручивать шлюзы в интернет — стало волновать очень многих, и целая индустрия ICS-безопасности выросла в том числе на проблеме этой аутентификации.

RS-485, Modbus RTU, ранний Ethernet и контринтуитивный CAN

Я выбрал четыре технологии, на которых понятие «шина» проще всего понять: самый массовый шинный интерфейс, самый живучий шинный протокол, самую интересную шинную историю в мире сетей и самое необычное решение по борьбе с коллизиями. 

RS-485: интерфейс, а не протокол

Начнем с ликбеза, потому что путаница вокруг RS-485 феерическая. Сам не раз встречал техзадания с формулировкой «обмен данными по протоколу RS-485». Так вот: RS-485 — не протокол. Это стандарт физического уровня, официально — TIA/EIA-485-A. Он описывает электрику: уровни напряжений, нагрузочную способность передатчиков, чувствительность приемников. И все. Ни слова о том, что означают передаваемые биты, как устроены кадры и кто кому отвечает. RS-485 — это дорога; что по ней ездит — Modbus, DMX, PROFIBUS или самопальный протокол студента Пети — стандарту безразлично.

А теперь о том, почему эта «дорога» стала народной. Три удачнейших решения:

  • Дифференциальная передача. Сигнал передается не относительно земли, а как разность напряжений между двумя проводами витой пары — их традиционно называют A и B (и здесь отдельная проблема: часть производителей микросхем обозначает инвертирующий выход как A, часть — как B, поэтому первое, что делает опытный наладчик при неработающей связи, — меняет провода местами; помогает удивительно часто). Помеха от соседнего частотника наводится на оба провода скрученной пары практически одинаково и при вычитании подавляется. Приемнику достаточно разности в 200 милливольт, при этом синфазное напряжение может гулять от −7 до +12 вольт — это огромный запас на разность потенциалов «земель» разных зданий и наводки.

Скрытый текст

Если вас сейчас смутила фраза про два провода, то ее стоит пояснить. Существуют системы связи, работающие на одном проводе. Вторым выступает Земля. К примеру, так работал телеграф в XIX веке: по столбу протягивали один железный кабель, а второй конец врывали в землю. Работало и приносило солидную экономию. Но при попытке сделать такой финт ушами рядом с частотником, сигнал задавит помехами.

  • Многоточечность из коробки. Передатчики RS-485 имеют третье состояние: не «единица», не «ноль», а «отключен от линии». Все молчащие узлы держат свои передатчики в высокоимпедансном состоянии и не мешают тому, кто говорит. Стандарт нормирует нагрузку в попугаях под названием unit load: классическая линия тянет 32 единичные нагрузки, а современные приемопередатчики с нагрузкой 1/8 UL позволяют повесить на одну пару до 256 устройств. На практике больше 32 адресов на сегменте я вешать не советую — не из-за электрики, а из-за времени опроса, но об этом ниже. 

  • Дальность. Канонические 1200 метров на умеренных скоростях. 1200 метров, конечно, роскошный максимум и реальные линии короче. Но для здания, цеха, насосной станции — за глаза. Это вам не 100 метров Ethernet.

Добавьте цену приемопередатчика в районе доллара, монтаж двумя клеммами и терпимость к кривизне рук — и вы поймете, почему по числу установленных узлов RS-485, по всей видимости, до сих пор один из самых распространенных проводных интерфейсов на планете. Точную цифру не назовет никто, но RS-485 встречается в электросчётчиках, частотных приводах, контроллерах доступа, панелях автоматики и тысячах других типов оборудования.

Modbus RTU: сорок семь лет в строю

Если RS-485 — самая народная дорога, то Modbus RTU — самый народный транспорт на ней.

Год рождения — 1979-й. Автор — компания Modicon, та самая, что за десять лет до этого выпустила первый в мире промышленный ПЛК Modicon 084.

Modbus придумали как простой способ связать контроллеры Modicon между собой и с пультами. 

Максимально простой и легковесный — вот его ключевое определение. Протокол проектировали так, чтобы он влезал в контроллеры конца семидесятых с их килобайтами памяти. Modicon потом вошла в Gould, затем AEG, затем Schneider Electric, а протокол в 2004 году передали независимой организации Modbus Organization — и открытость спецификации стала вторым (после простоты) секретом бессмертия: реализовать Modbus может кто угодно без лицензий и отчислений, и реализовали его буквально все.

Как он устроен? Классический ведущий-ведомый. На шине один мастер (контроллер, SCADA, панель оператора) и до 247 ведомых, каждый со своим адресом от 1 до 247. Говорит только мастер. Ведомый отвечает на адресованный ему запрос и не имеет права раскрывать рот по собственной инициативе — даже если у него авария и ему очень хочется. Мастер по кругу опрашивает всех: «пятый, доложи регистры», «пятый» отвечает, «шестой, доложи регистры»... 

Отсюда следствие: время реакции системы равно времени полного цикла опроса. Повесили на одну шину на 9600 бод шестьдесят устройств по сотне регистров — получите цикл в десятки секунд.

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

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

  • Дискретные входы и катушки — однобитные. 

  • Входные регистры и регистры хранения — шестнадцатибитные. 

Входы и входные регистры мастер только читает; катушки и регистры хранения — читает и пишет.

На слове «катушка» стоит остановиться, потому что это довольно забавный рудимент, переехавший вместе с Modbus в XXI век.

Вообще, это, конечно, просто область памяти в один бит. Но Modicon делала контроллеры на замену релейным шкафам, и программировали их релейно-контактными схемами — теми самыми лестничными диаграммами, которые придумали ровно затем, чтобы их читал заводской электрик, а не программист. В такой схеме вход рисуется контактом, выход — обмоткой реле. Когда сели проектировать модель данных, словарь взяли оттуда же, особо не заморачиваясь: то, что читаешь, — контакт, то, чем управляешь, — катушка, coil. 

Сорок семь лет спустя за этой катушкой почти никогда не стоит физическое реле, это просто бит в памяти прибора: «пуск», «сброс аварии», «включить подогрев». Но называется он по-прежнему катушкой.

Функции ложатся на эту сетку один в один: 01 — прочитать катушки, 02 — дискретные входы, 03 — регистры хранения, 04 — входные регистры, 05 — переключить одну катушку, 06 — записать один регистр, 15 и 16 — записать пачку тех и других.

Есть в Modbus еще одна интереснейшая вещь, которая поначалу кажется нарушением формальной логики. Но на деле это не так. 

Чтобы передать один бит, функция 05 использует два байта. Включить — FF00, выключить — 0000. Не единица и ноль, как подсказывает здравый смысл, а вот это. Шестнадцать бит, чтобы сообщить один, причем все, что между ними, недопустимо и должно быть отвергнуто. Зачем — спецификация не объясняет. 

Самое правдоподобное объяснение: такое значение опознается в дампе с одного взгляда и не путается с мусором в линии, а дампы в семидесятые читали глазами.

Кадр RTU максимально прост: адрес, код функции, данные, два байта CRC-16. А вот границы кадра определяются очень и очень спорно — тишиной. Например, на скорости 9600 бод границей между кадрами служит тишина продолжительностью не менее 3,5 символьного интервала. Никаких стартовых флагов и байт-стаффинга — сама пауза является разделителем. Вроде гениально: никаких тебе разделителей. 

Но оно же и коварно: попробуйте выдержать эти милисекундные паузы, когда ваш Modbus туннелирован через пару радиомодемов или GSM-шлюз с буферизацией — и вы узнаете много нового о слове «таймаут». Таймауты вообще проклятие Modbus, учитывая, что его умудряются гонять в том числе через такой тормоз, как LoRaWAN.

И еще один штрих: в 2020 году Modbus Organization официально переименовала в спецификациях master/slave в client/server. Сорокалетний протокол, а за повесткой следит, хозяин и раб стали как-то совсем неудобны в промышленной автоматизации. Впрочем, на объектах как говорили «мастер и слейвы», так и говорят.

Почему Modbus жив до сих пор, хотя его хоронят последние лет двадцать пять? Потому что он занял идеальную нишу: максимально простой протокол, в который уже умеет все железо на свете. Любой датчик, любой частотник, любой электросчетчик имеет Modbus хотя бы в довесок к чему-то большему. Это латынь промышленной автоматики: вроде давно хоронят, но понимают все.

Ранний Ethernet: шина, коаксиал и вампир

А теперь — самая интересная история. Потому что Ethernet, который сегодня — синоним коммутируемой звезды, родился стопроцентной шиной. 

Начало семидесятых, Гавайи. Норман Абрамсон в Гавайском университете строит радиосеть ALOHAnet, связывающую кампусы на разных островах. Канал общий — радиоэфир, и Абрамсон решает проблему доступа следующим образом: хочешь передать — передавай. Столкнулся с чужой передачей — не получил подтверждения, подожди случайное время и повтори. Работает? Работает. Эффективно? На нагрузке выше 18% канал захлебывается, но для старта — работает.

В 1972–73 годах молодой Боб Меткалф в Xerox PARC, начитавшись статей про ALOHA (он разбирал ее математику в своей диссертации), проектирует сеть для связки новых персональных компьютеров Alto с лазерным принтером. Вместо эфира — толстый коаксиальный кабель, общий для всех станций. И Меткалф называет свою сеть Ethernet — в честь «светоносного эфира», гипотетической всепроникающей среды, в которой физики XIX века предполагали распространение света. Эфир как среда, общая для всех, — это, в общем, метафора шины. 

К гавайской находчивости Меткалф с коллегами добавили щепотку вежливости, и получился CSMA/CD — Carrier Sense Multiple Access with Collision Detection. Разберем по словам, потому что это основа доброй половины современных протоколов. 

  • Carrier Sense: прежде чем передавать, послушай линию; занята — жди. 

  • Multiple Access: среда общая, доступ у всех равный, начальников нет. 

  • Collision Detection: во время собственной передачи продолжай слушать линию, и если слышишь не то, что передаешь, — значит, вы начали одновременно с кем-то (двое послушали тишину, решили «свободно» и стартовали; сигнал-то бежит по кабелю не мгновенно). Обнаружив коллизию, узел не просто замолкает — он сначала выдает короткий сигнал (jam), чтобы коллизию гарантированно заметили все участники столкновения, а потом выжидает случайную паузу. При повторной коллизии диапазон случайной паузы удваивается — это называется экспоненциальной выдержкой, и это защита от толпы, которая, столкнувшись, дружно повторяет попытку в один и тот же момент. После 16 неудач кадр выбрасывается — сеть перегружена, извините.

В 1980 году консорциум DEC, Intel и Xerox опубликовал открытый стандарт, в 1983-м он стал IEEE 802.3, и в мир пошел 10BASE5 — «толстый Ethernet». 10 мегабит, baseband, 500 метров на сегмент, до 100 подключений. Средой передачи был специальный коаксиал, внешне похожий на RG-8, толщиной с садовый шланг, желтого цвета и почти несгибаемый — в народе его так и звали: frozen yellow garden hose, то есть замерзший желтый садовый шланг. Прокладывали его магистралью по зданию, а дальше начиналось самое интересное.

Замерзший желтый садовый шланг
Замерзший желтый садовый шланг

Чтобы подцепить станцию к магистрали, кабель не резали — не дай бог рвать работающую шину. Вместо этого на кабель ставили трансивер (MAU) с зажимом, который официально назывался vampire tap — «вампирский отвод», и это не жаргон, а термин из документации. И да, с вампиром тут много общего: в кабеле сверлится отверстие через внешнюю оболочку и оплетку, в него вкручивается игла, впивающаяся в центральную жилу, а два зубца зажима прокусывают оболочку сбоку и вцепляются в экран. От трансивера к станции шел отдельный многожильный AUI-кабель длиной до 50 метров — то есть сетевая карта в компьютере с шиной напрямую даже не соприкасалась.

На желтом кабеле через каждые 2,5 метра были нанесены черные метки — и кусать вампиром разрешалось только по меткам. Почему? Каждый отвод — маленькая неоднородность в линии, от которой сигнал чуть-чуть отражается. Если натыкать отводы как попало, отражения от нескольких соседних могут сложиться в фазе и наделать битовых ошибок. Шаг 2,5 метра выбран так, чтобы отражения от соседних отводов приходили с разбросом фаз и не накапливались. Вот это я понимаю — защита от дурака.

Толстый желтый шланг был дорог и неудобен, и в 1985-м появился 10BASE2 — «тонкий Ethernet», он же cheapernet: тонкий гибкий коаксиал RG-58, сегмент до 185 метров, до 30 станций. Вампиров отменили — кабель заводили прямо на сетевую карту через BNC-разъем и Т-коннектор. Дешево, сердито — и с легендарной болячкой: сеть представляла собой цепочку из десятков BNC-сочленений, и любое из них мог разъединить любой пользователь. Классика девяностых: бухгалтерия двигает стол, Т-коннектор слетает, сегмент падает целиком, и админ идет вдоль плинтуса, перещупывая каждый разъем. 

BNC-тройник
BNC-тройник

Дальнейшее известно: в 1990-м вышел 10BASE-T на витой паре — физическая звезда вокруг хаба (логически все еще шина с коллизиями), потом хабы вытеснили коммутаторы, появился полный дуплекс — и логическая шина из Ethernet исчезла. 

CAN: контринтуитивный арбитраж

CAN — красивейшее решение. Там коллизия, как и в раннем Ethernet возможна, но потерь нет. Да-да, так бывает.

Держится весь фокус вот на чем. CAN — витая пара, 120 Ом на концах. Состояния линии тут называют не «ноль» и «единица», а рецессивным и доминантным, и в этих словах вся суть. Рецессивное (логическая единица) — узел отпустил линию, то есть на проводах примерно один потенциал, разность около нуля. Доминантное (логический ноль) — узел создает разность потенциалов порядка двух вольт.

Электроника современного автомобиля
Электроника современного автомобиля

Отсюда главное свойство: один доминантный передатчик перебивает любое количество рецессивных. Тот, кто линию отпустил, не может перекричать того, кто ее держит. Пока хоть кто-то один выдает ноль, на шине ноль. 

Теперь сам арбитраж. Кадр начинается со стартового бита, за ним идет 11-битный идентификатор, старшим битом вперед. И каждый передающий узел в это же время слушает шину и сравнивает то, что на ней получилось, с тем, что сам туда отправил.

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

Написанное выше может быть не очень понятно, CAN вообще неинтуитивный, потому приведу пример, станет попроще.

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

Первый бит у обоих доминантный — ничья, оба продолжают. На втором магнитола выдает единицу, ABS — ноль. Это важно – ABS приоритетнее магнитолы и ведущих нулей у него в идентификаторе больше. На шине ноль. Магнитола читает шину, видит не то, что передавала, и уходит в прием. Все, спор закончился на втором бите идентификатора.

А что при этом произошло с точки зрения ABS?

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

Побочный эффект, за который CAN и любят: приоритеты не надо администрировать. Они логично следуют из нумерации. Меньше номер — больше ведущих нулей — выше приоритет. ABS достается идентификатор в районе сотни, магнитоле — в районе трехсот, и когда нужно резко тормозить, никакая магнитола не сможет этому помешать.

Что еще ездит по шинам: краткий ликбез

Шинных протоколов человечество наплодило десятки. Пройдемся по самым распространенным.

  • LIN — младший брат CAN для задач, где и CAN дорог: один провод, master/slave, 20 кбит/с. Стеклоподъемники, кнопки на руле, моторчик зеркала. В современной машине шин LIN может быть больше десятка.

  • PROFIBUS DP — тяжелая артиллерия европейской автоматизации, детище немецкого консорциума, вышедший в 1993 году. Поверх того же RS-485, но с выжатыми из него 12 Мбит/с и гибридным доступом: несколько мастеров передают друг другу токен (тот самый token bus), а каждый мастер циклически опрашивает своих ведомых. Десятки миллионов узлов по всему миру, особенно там, где ступала нога Siemens.

Узнаваемый фиолетовый кабель PROFIBUS
Узнаваемый фиолетовый кабель PROFIBUS
  • HART — цифровой сигнал, наложенный частотной модуляцией поверх классической аналоговой токовой петли 4–20 мА. В многоточечном режиме аналоговый сигнал фиксируется на 4 мА и HART превращается в настоящую цифровую шину — до 15 приборов на одной паре.

  • I²C — шина, которую Philips придумала в 1982 году для телевизоров: два провода (данные и такт), мастер и ведомые с 7-битными адресами. Сегодня I²C — базовая система любой электроники: по ней процессор вашего ноутбука опрашивает температурные датчики или конфигурацию планок памяти.

Кстати, тут есть интересный поворот. На DDR4 и всем, что старше, микросхема SPD была чистым I²C. В DDR5 ее место занял хаб SPD5118, который умеет и I²C, и I3C Basic — прямого наследника I²C с 12,5 МГц вместо 1 МГц. Причем включается он все равно в режиме I²C и переходит на I3C только тогда, когда хост его об этом попросит. Сорокалетняя шина осталась режимом по умолчанию.

  • 1-Wire — минимализм, доведенный до абсурда в хорошем смысле: данные и питание по одному проводу (плюс земля). Ведомые устройства запасают энергию во внутреннем конденсаторе в паузах между битами. Домофонный ключ-«таблетка» DS1990A — это узел 1-Wire с уникальным 64-битным серийником, а корпус таблетки — и есть два контакта шины: донышко и обод. Прикладывая ключ к домофону, вы вручную собираете шинную сеть из двух узлов на полсекунды. По той же шине работают легендарные термометры DS18B20, которых можно повесить десятки на один провод, — любимая игрушка всех, кто начинал с Arduino.

  • DMX512 — тот самый концертный свет. Протокол 1986 года: поверх RS-485 непрерывно, десятки раз в секунду, вещается кадр из 512 байт-«каналов», и каждый прибор — диммер, вращающаяся голова, дым-машина — выхватывает из потока байты со своих адресов. Никаких подтверждений, никакой обратной связи: шоу должно продолжаться, а не пересылать битые пакеты. Установленный на приборе адрес — просто номер байта в кадре, с которого прибор читает свои значения.

  • Шины зданий — отдельная поляна: KNX (европейский стандарт умных зданий, живет на своей витой паре и передает по ней же питание устройств), BACnet MS/TP (диспетчеризация вентиляции и климата, снова поверх RS-485, с передачей токена между равноправными контроллерами), DALI (управление светом и диммирование: два провода без полярности), M-Bus (опрос счетчиков тепла и воды, до километров длины и сотен приборов на паре). Если в вашем офисе климат «умный» — где-то за потолком почти наверняка тянется одна из этих шин.

  • И, наконец, шины внутри компьютера — там, где термин родился. ISA, PCI — классические параллельные шины: десятки линий, общих для всех слотов. Но вот что показательно: внутри компьютеров шина как топология умерла раньше, чем в сетях, и по той же причине — общая среда уперлась в скорость. На гигагерцовых частотах параллельная шина с несколькими нагрузками превращает сигнал в кашу, потому от этой идеи там быстро отказались.

Заключение

Подведем итоги.

Шина — одна из старейших сетевых топологий, и по всем законам жанра ей полагалось умереть еще в девяностые, вместе с коаксиальным Ethernet. В офисных сетях она и умерла: там, где нужны гигабиты каждому, звезда выигрывает без вариантов. 

Но топологии не бывают хорошими или плохими — они бывают подходящими или нет, и у шины оказалась своя вечная ниша. Там, где узлов много, трафика мало, кабельные трассы дороги, а предсказуемость важнее скорости, — то есть в автомобиле, в цеху, на подстанции, за кулисами и в стенах «умного» здания — два параллельных провода до сих пор вне конкуренции. Дешевая физика, отсутствие центральной точки отказа и детерминизм ведущего-ведомого перевешивают и разделяемую полосу, и головную боль с терминаторами.

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


Размещайте облачную инфраструктуру и масштабируйте сервисы с надежным облачным провайдером Beget.
Эксклюзивно для читателей Хабра мы даем бонус 10% при первом пополнении.

Воспользоваться

Комментарии (5)


  1. vbifkol
    06.08.2026 09:04

    Еще оптика с пассивными сплиттерами из мира домашних/офисных сетей - тоже шина, как я понимаю.


  1. ElvenSailor
    06.08.2026 09:04

    отлично написано, и шикарным языком!


  1. Wesha
    06.08.2026 09:04

    Тип топологии – шина

    А в фоне минусовка такая:


  1. NAI
    06.08.2026 09:04

     Там, где узлов много, трафика мало, кабельные трассы дороги, а предсказуемость важнее скорости, — то есть в автомобиле, в цеху, на подстанции, за кулисами и в стенах «умного» здания — два параллельных провода до сих пор вне конкуренции. Дешевая физика, отсутствие центральной точки отказа и детерминизм ведущего-ведомого перевешивают и разделяемую полосу, и головную боль с терминаторами.

    Центральная точка отказа как раз таки присутствует - разрыв самой шины. Реализуйте мне на шине "отказ компонента не должен приводить к отказу системы в целом".

    По этому как раз в подстанциях и производствах на среднем\верхнем уровне используются кольцевые топологии. В нижнем уровне, да и то только потому, что обычно датчиков больше чем один и шлейфы идут независимо


    1. Wesha
      06.08.2026 09:04

      Центральная точка отказа как раз таки присутствует - разрыв самой шины.

      Не обязательно. Существует возможность отказа несмотря на то, что сама шина в полном порядке. Догадаетесь?