Сетевое кодирование
Сетевое кодирование (англ. network coding) — это концепция в компьютерных сетях, согласно которой промежуточные узлы сети могут не просто пересылать, а производить над поступающими пакетами линейные комбинации перед их отправкой далее от источников к приёмникам.
Сетевое кодирование используется для повышения пропускной способности, эффективности и масштабируемости компьютерных сетей, а также способствует повышению устойчивости к атакам и прослушиванию[1]. Узлы сети объединяют несколько пакетов для совместной передачи, что позволяет максимально эффективно использовать пропускную способность и достигать теоретических пределов информационного потока в сети.
Доказано, что линейное кодирование (англ. linear coding) в теории достаточно для достижения максимального уровня мультикаст-трафика с единственным источником[2]. Однако для некоторых типов задач требуется нелинейное кодирование, а в случае произвольных запросов оптимальные решения сетевого кодирования искать трудно: такие задачи могут быть NP-трудными[3][4] и даже неразрешимыми[5].[6]
Кодирование и декодирование
В задаче линейного сетевого кодирования подмножество узлов функционирует для пересылки данных от исходных узлов к узлам-приёмникам. Каждый узел создаёт новые пакеты, представляющие собой линейные комбинации уже полученных данных с использованием коэффициентов, выбираемых из конечного поля Галуа, обычно .
Более формально: каждый узел со входной степенью формирует сообщение как линейную комбинацию принятых сообщений :
- ,
где — коэффициенты из . Благодаря тому, что все операции выполняются в конечном поле, длина сгенерированного сообщения не меняется. Каждый узел передает получателю как вычисленное значение , так и соответствующие коэффициенты .
Узлы-приёмники собирают поступающие закодированные сообщения, составляя из них матрицу, и могут восстановить исходные данные путём выполнения метода Гаусса над этой матрицей[7]. В приведённом к ступенчатому виду случае каждая декодированная строка соответствует исходному сообщению.
Теоретические основы
Сеть моделируется в виде ориентированного графа , где — множество узлов, — множество рёбер (дуг), а задаёт пропускную способность каждого ребра. Пусть — максимальная пропускная способность между узлами и . По теореме о максимальном потоке и минимальном разрезе, ограничена минимальной пропускной способностью разреза между этими узлами.
Карл Менгер доказал, что в задачи уникаста всегда существует набор несовпадающих путей, позволяющий достичь теоретического максимума[8]. В задачах широковещания эта граница также достижима, как показал Эдмондс, предложив полиномиальный алгоритм. Однако мультикаст сложнее: максимальный поток тут невозможен при обычной маршрутизации, но достижим с помощью вычислительных операций (например, суммирования пакетов) на промежуточных узлах.
Сеть-бабочка
Сеть-бабочка — классический пример, наглядно демонстрирующий преимущества линейного сетевого кодирования по сравнению с обычной маршрутизацией. Если разрешена только маршрутизация, центральное звено может передавать либо только А, либо только В, что приводит к избыточной передаче для одной из сторон и невозможности получить обе информации одновременно. С помощью простого кодирования (например, передачи A+B) обе принимающие стороны могут за три шага получить оба сообщения, тогда как при маршрутизации это требует четырёх шагов.
Случайное линейное сетевое кодирование
Случайное линейное сетевое кодирование (англ. random linear network coding, RLNC)[9] — схема кодирования, при которой узлы сети формируют пакеты как случайные линейные комбинации полученных данных с равновероятно выбранными коэффициентами из конечного поля Галуа. При достаточно большом поле вероятность получить линейно независимые комбинации стремится к единице.
Если получателю не хватило количества пакетов для декодирования, восстановить исходные данные крайне маловероятно; для устранения этой проблемы отправитель передаёт дополнительные комбинации, пока не будет получено минимум нужных независимых пакетов.
Три основных параметра RLNC:
- Размер поколения: исходные данные делятся на группы (поколения), которые кодируются вместе.
- Размер пакета: обычно фиксированный; при необходимости пакеты дополняются нулями или разбиваются.
- Поле Галуа: широко используются поля и (binary-8).
Каждый пакет состоит из набора символов конечного поля. Для закодированного пакета исходные и уже закодированные пакеты умножают на случайные коэффициенты и складывают поэлементно. Коэффициенты кодирования добавляются в заголовок пакета, что позволяет любому узлу отслеживать, каким образом получены данные.
Одно из преимуществ линейного сетевого кодирования — возможность повторного комбинирования уже закодированных пакетов. После рекодирования размер дополнительной информации (коэффициентов) не увеличивается.
Для успешного декодирования приёмнику необходимо собрать не менее линейно независимых пакетов (где — размер поколения); алгоритм восстановления — решение системы линейных уравнений по известным коэффициентам.
На рисунке приведён пример, где два пакета и объединяются в новый закодированный пакет. Каждый из исходных пакетов содержит дополнительные коэффициенты для идентификации их состава — например, оригинальный (некодированный) пакет содержит или , а закодированный — произвольные .
Для получения нового кода узел выбирает случайные коэффициенты и , умножает соответствующие пакеты по символам и складывает их, формируя новый комбинированный пакет. Тот же принцип применяется для обновления набора коэффициентов.
Несмотря на интенсивные исследования за последние 20 лет, остаются некорректные представления:
Сложность декодирования: современные декодеры эффективны и легко параллелизуются. Например, на процессорах Intel Core i5 с SIMD-доступом скорость декодирования достигает 750 МБ/с для 16 пакетов или 250 МБ/с для 64 пакетов[10]. Стадии кодирования и декодирования отлично масштабируются за счёт параллельных вычислений[11].
Передача коэффициентов: добавление коэффициентов кодирования в пакеты практически не увеличивает объём передаваемой информации — при типичных параметрах этот overhead составляет около 2 %.
Линейная зависимость пакетов: из-за случайности коэффициентов возможна передача невостребованных комбинаций, но эта избыточность минимальна и уменьшается с ростом размера поля Галуа. На практике даже для бинарного поля этот overhead обычно не превышает 5 %.
Применение
Сетевое кодирование активно внедряется учёными и компаниями для повышения производительности и надёжности сетевых решений в различных областях:
- VoIP-сервисы: увеличение устойчивости потоковой передачи в mesh-сетях вследствие снижения задержек и джиттера[12].
- Видеостриминг и аудиоконференции: увеличение доставляемости и уменьшение потерь данных по сравнению с классическими схемами ретрансляции[13].
- SD-WAN и IoT: снижается задержка и jitter в сетях с несколькими каналами связи[14].
- Объединение каналов связи между устройствами[15].
- 5G частные сети: совершенствование качества передачи мультимедиа посредством интеграции RLNC[16].
- Удалённая совместная работа и VR/AR-тренинги[17].
- Ведение автомобилей с удалённым управлением и сети подключённых авто[18].
- Онлайн-игры и стриминг с низкими задержками[19].
- Защищённая передача файлов, P2P файловые системы (Avalanche filesystem).
- Умные города, IoT-инфраструктура, системы автоматического обновления прошивок.
- Повышение пропускной способности mesh-сетей, например, с применением технологий COPE, CORE, Coding-aware routing, B.A.T.M.A.N. и других[20].
- Пространственные сенсорные сети, спутниковые связные системы[21].
- Защита от атак: предотвращение подслушивания, модификации, искажений или повторной передачи информации[22].
- Децентрализованные системы хранения данных.
- Поиск и оптимизация маршрутов передачи в средах с большими задержками и потерями: альтернатива Forward Error Correction, ARQ и др.
См. также
Примечания
Литература
- Fragouli, C.; Le Boudec, J.; Widmer, J. «Network coding: An instant primer», Computer Communication Review, 2006. “Network coding: An instant primer”. Computer Communication Review [англ.]. 2006. DOI:10.1145/1111322.1111337.
- Ali Farzamnia, Sharifah K. Syed-Yusof, Norsheila Fisa «Multicasting Multiple Description Coding Using p-Cycle Network Coding», KSII Transactions on Internet and Information Systems, Vol 7, No 12, 2013. “Multicasting Multiple Description Coding Using p-Cycle Network Coding”. KSII Transactions on Internet and Information Systems [англ.]. 7 (12): 3303—3324. 2013. DOI:10.3837/tiis.2013.12.009.
Ссылки
- Network Coding Homepage
- Библиография по сетевому кодированию
- Raymond W. Yeung, Information Theory and Network Coding, Springer, 2008, http://iest2.ie.cuhk.edu.hk/~whyeung/book2/
- Raymond W. Yeung и др., Network Coding Theory, now Publishers, 2005, http://iest2.ie.cuhk.edu.hk/~whyeung/netcode/monograph.html
- Christina Fragouli и др., Network Coding: An Instant Primer, ACM SIGCOMM 2006, http://infoscience.epfl.ch/getfile.py?mode=best&recid=58339
- Avalanche Filesystem, http://research.microsoft.com/en-us/projects/avalanche/default.aspx
- Random Network Coding
- Digital Fountain Codes, http://www.icsi.berkeley.edu/~luby/
- Coding-Aware Routing
- MIT: Введение в сетевое кодирование
- Сетевое кодирование: следующая революция в сетях?
- Разработка протоколов с учётом кодирования для беспроводных сетей