Способы обнаружения ошибок при передаче данных
8. МЕТОДЫ ПЕРЕДАЧИ ДАННЫХ КАНАЛЬНОГО УРОВНЯ
8.4. Методы обнаружения ошибок
Канальный уровень должен обнаруживать ошибки передачи данных, связанные с искажением бит в принятом кадре данных или с потерей кадра, и по возможности их корректировать.
Большая часть протоколов канального уровня выполняет только первую задачу — обнаружение ошибок, считая, что корректировать ошибки, то есть повторно передавать данные, содержавшие искаженную информацию, должны протоколы верхних уровней. Так работают такие популярные протоколы локальных сетей, как Ethernet , Token Ring , FDDI и другие. Однако существуют протоколы LLC2 или LAP-B самостоятельно решают задачу восстановления искаженных или потерянных кадров.
Однако наличие процедур восстановления данных требует от конечных узлов дополнительных вычислительных затрат, которые в условиях надежной работы сети являются избыточными.
Напротив, если в сети искажения и потери случаются часто, то желательно уже на канальном уровне использовать протокол с коррекцией ошибок, а не оставлять эту работу протоколам верхних уровней.
Поэтому нельзя считать, что один протокол лучше другого потому, что он восстанавливает ошибочные кадры, а другой протокол — нет. Каждый протокол должен работать в тех условиях, для которых он разработан.
Все методы обнаружения ошибок основаны на передаче в составе кадра данных служебной избыточной информации, по которой можно судить о достоверности принятых данных. Эту служебную информации принято называть контрольной суммой (или последовательностью контроля кадра — Frame Check Sequence , PCS). Контрольная сумма вычисляется как функция от основной информации. Принимающая сторона повторно вычисляет контрольную сумму кадра по известному алгоритму и в случае ее совпадения с контрольной суммой, вычисленной передающей стороной, делает вывод о корректости переданных данных.
Существует несколько распространенных алгоритмов вычисления контрольной суммы, отличающихся вычислительной сложностью и способностью обнаруживать ошибки в данных.
Контроль по паритету представляет собой наиболее простой метод контроля данных. В то же время это наименее мощный алгоритм контроля, так как с его помощью можно обнаружить только одиночные ошибки в проверяемых данных. Метод заключается в суммировании по модулю 2 всех бит контролируемой информации. Например, для данных 100101011 результатом контрольного суммирования будет значение 1. Результат суммирования также представляет собой один бит данных, который пересылается вместе с контролируемой информацией. При искажении при пересылке любого одного бита исходных данных (или контрольного разряда) результат суммирования будет отличаться от принятого контрольного разряда, что говорит об ошибке. Однако двойная ошибка, например 110101010, будет неверно принята за корректные данные. Поэтому контроль по паритету применяется к небольшим порциям данных, как правило, к каждому байту, что дает коэффициент избыточности для этого метода 1/8. Метод редко применяется в вычислительных сетях из-за его большой избыточности и невысоких диагностических способностей.
Вертикальный и горизонтальный контроль по паритету представляет собой модификацию описанного выше метода. Его отличие состоит в том, что исходные данные рассматриваются в виде матрицы, строки которой составляют байты данных. Контрольный разряд подсчитывается отдельно для каждой строки и для каждого столбца матрицы. Этот метод обнаруживает большую часть двойных ошибок, однако обладает еще большей избыточностью. На практике сейчас почти не применяется.
Циклический избыточный контроль ( Cyclic Redundancy Check , CRC) является в настоящее время наиболее популярным методом контроля в вычислительных сетях (и не только в сетях, например, этот метод широко применяется при записи данных на диски и дискеты). Метод основан на рассмотрении исходных данных в виде одного многоразрядного двоичного числа. Например, кадр стандарта Ethernet , состоящий из 1024 байт, будет рассматриваться как одно число, состоящее из 8192 бит . В качестве контрольной информации рассматривается остаток от деления этого числа на известный делитель R. Обычно в качестве делителя выбирается семнадцати- или тридцати трехразрядное число, чтобы остаток от деления имел длину 16 разрядов (2 байт) или 32 разряда (4 байт). При получении кадра данных снова вычисляется остаток от деления на тот же делитель R, но при этом к данным кадра добавляется и содержащаяся в нем контрольная сумма. Если остаток от деления на R равен нулю, то делается вывод об отсутствии ошибок в полученном кадре, в противном случае кадр считается искаженным.
Этот метод обладает более высокой вычислительной сложностью, но его диагностические возможности гораздо выше, чем у методов контроля по паритету. Метод CRC обнаруживает все одиночные ошибки, двойные ошибки и ошибки в нечетном числе бит. Метод обладает также невысокой степенью избыточности. Например, для кадра Ethernet размером в 1024 байт контрольная информация длиной в 4 байт составляет только 0,4 %.
Источник
Способы обнаружения и устранения ошибок при передачи данных в сетях.
Ошибки связаны с искажением бит в кадре или с потерей кадра. Методы обнаружения ошибок основаны на передаче в составе кадра избыточной информации (контрольных разрядов). Кр вычисляются в передатчике как функция от информационных разрядов(ир). Приемник повторно вычисляет кр по тому же алгоритму и при несовпадении с полученными кр фиксируется ошибка. Методы вычисления кр: контроль по паритету(обнаруживает одиночные и нечетное количество ошибок – контроль по четности, по нечетности), вертикальный и горизонтальный контроль по паритету (обнаруживается большая часть двойных ошибок, велика избыточность), контрольная сумма (передатчик дополняет сумму всех байт кадра до 0 или FF, приемник суммирует по модулю равному разрядности контрольного кода, включая кр, вероятность обнаружения ошибок 99,6%, уменьшается при увеличении разрядности кода), циклический контроль(исходные данные предоставляются многоразрядным двоичным числом в качестве кр берется остаток от деления этого числа на известный делитель, при приеме снова вычисляется остаток от деления на тот же делитель, но делятся данные кадры с полученным кр, если остаток = 0, то ошибки нет, если не =, то ошибка. Обнаруживаются одиночные, двойные и ошибки в нечетном числе бит.)
Методы исправления ошибок основаны на повторной передаче кадра данных. Отправитель нумерует посылаемые кадры и для каждого ожидает положительной квитанции (служебного кадра «ошибок нет»). При получении искаженного кадра приемник посылает отрицательную квитанцию, указывающую, что кадр надо передать повторно. При отправки каждого кадра передатчик запускает таймер, и если по его истечении не получена квитанция, то кадр (возможно квитанция) утерян и выполняется повторная передача. Методы исправления: метод с простоями (передатчик ожидает положительной квитанции и только после этого посылает следующий кадр, иначе повторяет передачу, +: надежность передачи, -: уменьшение производительности), метод скользящего окна (при отправке кадра источнику разрешается до получения квитанции на кадр передать еще некоторое количество кадров, если за это время квитанция так и не пришла, то передача приостанавливается и кадр передается снова, +: увеличивается скорость обмена, -: передатчик должен хранить в буфере все кадры на которые нет квитанций, надо отслеживать номер кадра на который пришла квитанция и номер кадра который можно передать до получения следующей квитанции).
IP адресация: классы сетей, деление на сети и подсети, маски подсетей.
В современных сетях для адресации узлов одновременно используются аппаратные, числовые и символьные адреса. Пользователи адресуют комп-ы с символьными адресами, которые автоматически заменяются в сообщениях передаваемых по сети на числовые адреса. После доставки в сеть назначения вместо числового адреса используется аппаратный адрес комп-а. типы адресов: лок адреса- используются для доставки сообщений в пределах подсети, IP адреса – используются для передачи пакетов между сетями, DNS-имя – символьные адреса с их помощью пользователи адресуют комп-ы.
4 класса IP-адресов: А(1 сеть 10.0.0.0), В(16 сетей 172.16.0.0-172.31.0.0), С(255 сетей 192.161.0.0-192.161.255.0).
Ограничение на IP-адреса узлов и сетей: 1) ни номер сети, ни номер узла не равны всем двоичным 0 или 1. 2)127.х.х.х – запрещен для узлов и сетей, т.к. используется для тестирования программ и взаимодействия процессов в пределах 1 комп-а 3)групповой адрес не содержит ни номера сети, ни номера узла.
Маска – содержит непрерывную последовательность двоичных единиц в тех разрядах, которые в IP адресе и непрерывную последовательность нулей в тех разрядах, которые соответствуют номеру узла.
+ : маска позволяет отказаться от класса адресов, маска используется в маршрутизаторе, маска позволяет администратору структурировать сеть, т.е. делить ее на подсети не требуя от поставщика услуг доп адреса, поставщики услуг могут объединять адресное пространство лс вводя прификсы, уменьшая объем маршрутизации.
Порядок назначения адресов — номера сетей назначаются: централизованно(поставщиками услуг), произвольно(если сеть работает автономно), номера узлов администратор назначает произвольно в пределах разрешенного диапазона адресов, для лок сетей зарезервированы адреса трех классов.
Сетевая технология Ethernet: физический и канальный уровни. Метод доступа CSMA/CD. Обработка коллизий. Топологии. Адресация. Формат кадров.
CSMA/CD реализуется сетевым адаптером аппаратно или микропрограммно, он используется в лс с логической общей шиной, включая радио сети. Сетевой адаптер прослушивает разделяемую среду, признаком ее незанятости является отсутствие несущей, т.е. основной гармоники сигнала. Частота несущей 5-10 МГц, при манчестерском кодировании, если среда не занята, сетевой адаптер передает кадр, который распространяется в обе стороны, после окончания передачи кадра все узлы выдерживают технологическую паузу. Если 2 и более станции передают кадр, возникает коллизия. Приемник обнаруживает коллизию по длине кадра меньше 64Б, а передатчик по несовпадению передаваемых и наблюдаемых сигналов. После этого сетевой адаптер прерывает передачу и усиливает коллизию, посылая jam-последовательность в 32 бита для оповещения других станций, затем сетевой адаптер делает случайную паузу. После 16 неудачных попыток кадр отбрасывается.
Формат кадра: сетевые адаптеры и их драйверы, мосты, коммутаторы, и маршрутизаторы работают со всеми форматами кадров. а) кадр 802.3/LLC: преамбула(необходима для синхронизации приемника и передатчика), SFD (начальный ограничитель кадра), DA (адрес назначения индивидуальный, широковещательный, групповой), SA (адрес источника), L(длина поля данных в байтах), FCS(контрольные разряды CRC). б) кадр Raw802.3/Novell 802.3 такой же как и предыдущий, но без вложенного LLC кадра. в) Ethernet DIX(II) = (б), но вместо поля L, поле Т (тип протокола верхнего уровня, вложившего свой пакет в поле данных кадра). г) Ethernet SWAP – расширение кадра (а), введением заголовка SWAP, который вложен в протокол LLC.
Топологии: шина, звезда с активным центром, двухстороннее соединение пары узлов без хаба, дерево.
Скорость – 10 Мб/с, мах диаметр сети 2500м, мах число станций в сети 1024
Стандарты Ethernet 10 Мб/с.
Толстый коксиал, диаметр 0,5, топология – шина, сегмент кабеля ограничивают терминаторы (заглушки), поглощающие сигналы и препятствующие возникновению отраженных сигналов, трансиверы – с их помощью станции подключаются к кабелю, функции трансивера – приемо-передача данных, определение коллизий по уровню постоянной составляющей, гальваническая развязка, контроль болтливости (если из-за неисправности повышается мах время передачи кадра, то трансивер отсоединяет кабель от передатчика). Повторитель побитно синхронно повторяет сигналы с одного сегмент в другой, улучшая их форму и мощность и синхронизируя их.
Правило «5-4-3» — мах конфигурация стандарта: 5- мах число сегментов, 4- мах число повторителей, 3- мах число нагруженных сегментов. Мах диаметр сети 2500м, мах число узлов 297.
Тонкий коксиал, BNST коннектор – это тройник, одна точка которого соединяется с СА, 2 других с точками разрыва.
Мах диаметр сети – 925м, мах число уровней – 87
Общий недостаток отсутствие оперативной информации о состоянии моноканала. Повреждение кабеля обнаруживается по неработоспособности сети, а поиск – кабельным тестером.
Топология – звезда с активным центром
Мах длина сегмента 100м, определяется полосой пропускания UTP позволяющей передавать данные в манчестерском коде со скоростью 10 Мб/с на 100м мах. Hub выполняет функции повторителя сигналов на всех отрезках подключенных к его портам, обнаруживает коллизию.
Правило 4 хабов. Мах число хабов между любыми двумя станциями равно 4. можно соединять в древовидную структуру. Петли, замкнутые контуры запрещены.
Мах диаметр сети 500м, мах число узлов 1024 достигается в двухуровневом соединении хабов.
Структура, топология как предыдущий.
Стандарты: FOIRL- мах длина сегмента 1000м мах диаметр сети 2500м, 10Base-FL- мах длина сегмента 2000м мах диаметр сети 2500м, 10Base-FB только для соединения «5 хабов», мах длина сегментов 2000м, мах диаметр сети 2740м.
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Ошибки в компьютерных сетях
12 минут чтения
Онлайн курс по Кибербезопасности
Изучи хакерский майндсет и научись защищать свою инфраструктуру! Самые важные и актуальные знания, которые помогут не только войти в ИБ, но и понять реальное положение дел в индустрии
Ни одна среда передачи данных не может считаться совершенной. Если среда передачи является общей, как радиочастота (RF), существует возможность возникновения помех или даже столкновений дейтаграмм. Это когда несколько отправителей пытаются передать информацию одновременно. Результатом является искаженное сообщение, которое не может быть понято предполагаемым получателем. Даже специализированная среда, такая как подводный оптический кабель типа point-to-point (световолновой), может испытывать ошибки из—за деградации кабеля или точечных событий-даже, казалось бы, безумных событий, таких как солнечные вспышки, вызывающие излучение, которое, в свою очередь, мешает передаче данных по медному кабелю.
Существует два ключевых вопроса, на которые сетевой транспорт должен ответить в области ошибок:
- Как можно обнаружить ошибки при передаче данных?
- Что должна делать сеть с ошибками при передаче данных?
Далее рассматриваются некоторые из возможных ответов на эти вопросы.
Обнаружение ошибок
Первый шаг в работе с ошибками, независимо от того, вызваны ли они отказом носителя передачи, повреждением памяти в коммутационном устройстве вдоль пути или любой другой причиной, заключается в обнаружении ошибки. Проблема, конечно, в том, что когда получатель изучает данные, которые он получает, нет ничего, с чем можно было бы сравнить эти данные, чтобы обнаружить ошибку.
Проверка четности — это самый простой механизм обнаружения. Существуют два взаимодополняющих алгоритма проверки четности. При четной проверке четности к каждому блоку данных добавляется один дополнительный бит. Если сумма битов в блоке данных четная—то есть если в блоке данных имеется четное число битов 1, то дополнительный бит устанавливается равным 0. Это сохраняет четное состояние четности блока. Если сумма битов нечетна, то дополнительный бит устанавливается равным 1, что переводит весь блок в состояние четной четности. Нечетная четность использует ту же самую дополнительную битную стратегию, но она требует, чтобы блок имел нечетную четность (нечетное число 1 бит). В качестве примера вычислите четную и нечетную четность для этих четырех октетов данных:
Простой подсчет цифр показывает, что в этих данных есть 14 «1» и 18 «0». Чтобы обеспечить обнаружение ошибок с помощью проверки четности, вы добавляете один бит к данным, либо делая общее число «1» в недавно увеличенном наборе битов четным для четной четности, либо нечетным для нечетной четности. Например, если вы хотите добавить четный бит четности в этом случае, дополнительный бит должен быть установлен в «0». Это происходит потому, что число «1» уже является четным числом. Установка дополнительного бита четности на «0» не добавит еще один «1» и, следовательно, не изменит, является ли общее число «1» четным или нечетным. Таким образом, для четной четности конечный набор битов равен:
С другой стороны, если вы хотите добавить один бит нечетной четности к этому набору битов, вам нужно будет сделать дополнительный бит четности «1», так что теперь есть 15 «1», а не 14. Для нечетной четности конечный набор битов равен:
Чтобы проверить, были ли данные повреждены или изменены при передаче, получатель может просто отметить, используется ли четная или нечетная четность, добавить число «1» и отбросить бит четности. Если число «1» не соответствует используемому виду четности (четное или нечетное), данные повреждены; в противном случае данные кажутся такими же, как и первоначально переданные.
Этот новый бит, конечно, передается вместе с оригинальными битами. Что произойдет, если сам бит четности каким-то образом поврежден? Это на самом деле нормально — предположим, что даже проверка четности на месте, и передатчик посылает
Приемник, однако, получает
Сам бит четности был изменен с 0 на 1. Приемник будет считать «1», определяя, что их 15. Поскольку даже проверка четности используется, полученные данные будут помечены как имеющие ошибку, даже если это не так. Проверка на четность потенциально слишком чувствительна к сбоям, но в случае обнаружения ошибок лучше ошибиться в начале.
Есть одна проблема с проверкой четности: она может обнаружить только один бит в передаваемом сигнале. Например, если даже четность используется, и передатчик отправляет
Приемник, однако, получает
Приемник подсчитает число «1» и обнаружит, что оно равно 12. Поскольку система использует четную четность, приемник будет считать данные правильными и обработает их в обычном режиме. Однако оба бита, выделенные жирным шрифтом, были повреждены. Если изменяется четное число битов в любой комбинации, проверка четности не может обнаружить изменение; только когда изменение включает нечетное число битов, проверка четности может обнаружить изменение данных.
Циклическая проверка избыточности (Cyclic Redundancy Check — CRC) может обнаруживать более широкий диапазон изменений в передаваемых данных, используя деление (а не сложение) в циклах по всему набору данных, по одной небольшой части за раз. Работа с примером — лучший способ понять, как рассчитывается CRC. Расчет CRC начинается с полинома, как показано на рисунке 1.
На рис. 1 трехчленный многочлен x3 + x2 + 1 расширен, чтобы включить все члены, включая члены, предшествующие 0 (и, следовательно, не влияют на результат вычисления независимо от значения x). Затем эти четыре коэффициента используются в качестве двоичного калькулятора, который будет использоваться для вычисления CRC.
Чтобы выполнить CRC, начните с исходного двоичного набора данных и добавьте три дополнительных бита (поскольку исходный полином без коэффициентов имеет три члена; следовательно, это называется трехбитной проверкой CRC), как показано здесь:
Эти три бита необходимы для обеспечения того, чтобы все биты в исходных данных были включены в CRC; поскольку CRC перемещается слева направо по исходным данным, последние биты в исходных данных будут включены только в том случае, если эти заполняющие биты включены. Теперь начните с четырех битов слева (потому что четыре коэффициента представлены в виде четырех битов). Используйте операцию Exclusive OR (XOR) для сравнения крайних левых битов с битами CRC и сохраните результат, как показано здесь:
XOR’инг двух двоичных цифр приводит к 0, если эти две цифры совпадают, и 1, если они не совпадают. Контрольные биты, называемые делителем, перемещаются на один бит вправо (некоторые шаги здесь можно пропустить), и операция повторяется до тех пор, пока не будет достигнут конец числа:
CRC находится в последних трех битах, которые были первоначально добавлены в качестве заполнения; это «остаток» процесса разделения перемещения по исходным данным плюс исходное заполнение. Получателю несложно определить, были ли данные изменены, оставив биты CRC на месте (в данном случае 101) и используя исходный делитель поперек данных, как показано здесь:
Если данные не были изменены, то результат этой операции всегда должен быть равен 0. Если бит был изменен, результат не будет равен 0, как показано здесь:
Исправление ошибок
Однако обнаружение ошибки — это только половина проблемы. Как только ошибка обнаружена, что должна делать транспортная система? Есть, по существу, три варианта.
Транспортная система может просто выбросить данные. В этом случае транспорт фактически переносит ответственность за ошибки на протоколы более высокого уровня или, возможно, само приложение. Поскольку некоторым приложениям может потребоваться полный набор данных без ошибок (например, система передачи файлов или финансовая транзакция), у них, вероятно, будет какой-то способ обнаружить любые пропущенные данные и повторно передать их. Приложения, которые не заботятся о небольших объемах отсутствующих данных (например, о голосовом потоке), могут просто игнорировать отсутствующие данные, восстанавливая информацию в приемнике, насколько это возможно, с учетом отсутствующей информации.
Транспортная система может подать сигнал передатчику, что произошла ошибка, и позволить передатчику решить, что делать с этой информацией (как правило, данные при ошибке будут повторно переданы).
Транспортная система может выйти за рамки отбрасывания данных, включив достаточное количество информации в исходную передачу, определить, где находится ошибка, и попытаться исправить ее. Это называется Прямой коррекцией ошибок (Forward Error Correction — FEC). Коды Хэмминга, один из первых разработанных механизмов FEC, также является одним из самых простых для объяснения.
Код Хэмминга лучше всего объяснить на примере — для иллюстрации будет использована таблица 1.
- Каждый бит в 12-битном пространстве, представляющий собой степень двух (1, 2, 4, 6, 8 и т. д.) и первый бит, устанавливается в качестве битов четности.
- 8-битное число, которое должно быть защищено с помощью FEC, 10110011, распределено по оставшимся битам в 12-битном пространстве.
- Каждый бит четности устанавливается равным 0, а затем четность вычисляется для каждого бита четности путем добавления числа «1» в позиции, где двоичный бит имеет тот же бит, что и бит четности. В частности:
- P1 имеет набор крайних правых битов в своем битовом номере; другие биты в числовом пространстве, которые также имеют набор крайних правых битов, включены в расчет четности (см. вторую строку таблицы, чтобы найти все позиции битов в номере с набором крайних правых битов). Они указаны в таблице с X в строке P1. Общее число «1»-нечетное число, 3, поэтому бит P1 устанавливается равным 1 (в этом примере используется четная четность).
- P2 имеет второй бит из правого набора; другие биты в числовом пространстве, которые имеют второй из правого набора битов, включены в расчет четности, как указано с помощью X в строке P2 таблицы. Общее число «1»-четное число, 4, поэтому бит P2 установлен в 0.
- P4 имеет третий бит из правого набора, поэтому другие биты, которые имеют третий бит из правого набора, имеют свои номера позиций, как указано с помощью X в строке P3. В отмеченных столбцах есть нечетное число «1», поэтому бит четности P4 установлен на 1.
Чтобы определить, изменилась ли какая-либо информация, получатель может проверить биты четности таким же образом, как их вычислял отправитель; общее число 1s в любом наборе должно быть четным числом, включая бит четности. Если один из битов данных был перевернут, приемник никогда не должен найти ни одной ошибки четности, потому что каждая из битовых позиций в данных покрыта несколькими битами четности. Чтобы определить, какой бит данных является неправильным, приемник добавляет позиции битов четности, которые находятся в ошибке; результатом является положение бита, которое было перевернуто. Например, если бит в позиции 9, который является пятым битом данных, перевернут, то биты четности P1 и P8 будут ошибочными. В этом случае 8 + 1 = 9, так что бит в позиции 9 находится в ошибке, и его переворачивание исправит данные. Если один бит четности находится в ошибке—например, P1 или P8—то это тот бит четности, который был перевернут, и сами данные верны.
В то время как код Хэмминга гениален, есть много битовых шаблонов-перевертышей, которые он не может обнаружить. Более современный код, такой как Reed-Solomon, может обнаруживать и исправлять более широкий диапазон условий ошибки, добавляя меньше дополнительной информации в поток данных.
Существует большое количество различных видов CRC и кодов исправления ошибок, используемых во всем мире связи. Проверки CRC классифицируются по количеству битов, используемых в проверке (количество битов заполнения или, точнее, длины полинома), а в некоторых случаях — по конкретному применению. Например, универсальная последовательная шина использует 5-битный CRC (CRC-5-USB); Глобальная система мобильной связи (GSM), широко используемый стандарт сотовой связи, использует CRC-3-GSM; Мультидоступ с кодовым разделением каналов (CDMA), другой широко используемый стандарт сотовой связи, использует CRC-6-CDMA2000A, CRC-6-CDMA2000B и CRC-30; и некоторые автомобильные сети (CAN), используемые для соединения различных компонентов в автомобиле, используют CRC-17-CAN и CRC-21-CAN. Некоторые из этих различных функций CRC являются не единственной функцией, а скорее классом или семейством функций со многими различными кодами и опциями внутри них.
Полный курс по Сетевым Технологиям
В курсе тебя ждет концентрат ТОП 15 навыков, которые обязан знать ведущий инженер или senior Network Operation Engineer
Источник