Back to list
Skywire - Проект Ячеистой Сети Skycoin
- Введение
- Маршрутизация: Обзор
- Стимулирование: Протокол Платежей
- Маршрутизация от источника: Канальное шифрование
- Пример протокола: ноды
AиB - Возможные улучшения:
- IPv4 шлюз: обход существующих интернет-провайдеров
- Пример один
- Пример два
- Архитектура демона Skywire
- Пример сервиса: синхронизация блокчейна
- Маршрутизация нескольких сетей и объединение каналов
- Маршрутизация ячеистой сети: Хранение и пересылка
- Хранение и пересылка: использование емкости
- Хранение и пересылка: примеры
- Пример обычной операции
- Пример с переполнением
- Пример с потерей пакета
- Хранение и пересылка: задержки и пропускная способность
- Хранение и пересылка: использование пропускной способности, качество и обслуживание
- Маршрутизация от источника: множественные маршруты для мобильного подключения
- Маршрутизация от источника: ноды-стражи
- Маршрутизация от источника: ограничения BGP
- Виртуальные маршруты: масштабирование топологии сети Skywire
- Маршрутизация от источника: виртуальные маршруты и топология SONET
- Маршрутизация от источника: асимметричные соединения
- Маршрутизация от источника: открытие маршрутов
Введение
Объекты Skywire:
- Улучшают высокороскоростной доступ к контенту. Предоставляют альтернативу существующим ISP (Internet Service Provider - провайдеры интернета). Решение “последней мили”.
- Позволяют сообществу строить ISP, используя управляемую пользователем инфраструктуру.
Skywire это новый протокол даркнета.
- Низкая латентность (также быстр как TCP/IP и теоретически быстрее обычной сети)
- Высокая производительность (разработан для передачи видео, файлов и работы высоконагруженных трафиком приложений)
- Обеспечивает конфиденциальность
- Поддерживает связь через WiFi (Meshnet)
- Поддерживает операции обычного интернета (Darknet/Overlay)
Skywire решает проблемы стимулирования и безвозмедного потребления ресурсов при развертвывании сети.
- Владельцы узлов получают токены Skycoin для обеспечения доступности ресурсов сети
- Пользователи сети используют токены для потребления сетевых ресурсов
Доступ к Skywire открыт.
- Каждый, кто установил клиентское приложение, может связаться с любой нодой Skywire
- Объекты создают глобальную ячеистую сеть открытого доступа (meshnet)
Skywire обеспечивает конфиденциальность.
- Трафик, проходящий через вашу ноду, не может быть отслежен до IP-адреса отправителя
- Ноды, передающие трафик, могут видеть только предыдущий и следующий участок маршрута
- Третьи стороны, пассивно просматривающие трафик, не могут связать пакеты с конкретным потоком или пользователем
- Третьи стороны и передающие ноды не могут прочитать содержимое трафика
Маршрутизация: Обзор
Ячеистая сеть Skywire использует протокол хранения и передачи данных по источнику.
Ядром оверлейной сети является группа узлов (нод).
- Каждая нода идентифицируется хешем публичного ключа
- Каждая нода получает и отправляет сообщения
- Ноды получают токены за предачу трафика
Ноды A и C связываются через ноду B следующим образом:
- Нода
Aсвязыватся с нодойBи устанавливает Маршрут - Нода
Aпродлевает Маршрут доC - Трафик из
A, отправленный по Маршруту, прибывает вC
При маршруте A -> B -> C -> D:
- Ноды знают только предыдущий и последующий участок маршрута.
Cзнает, что сообщение прошло черезBушло вD.Cне знает проA.Bне может сделать вывод, чтоAявляется началом маршрута.Cне может сделать вывод, чтоDявляется конечной точкой маршрутаBandCне могут прочитать содержимое сообщения (из-за сквозного шифрования)- Сторонний наблюдатель, не участвующий в передаче конкретного сообщения, не может получить какую-либо информацию о содержании сообщения (из-за шифрования канального уровня).
- Несколько сообщений, отправленных по разным маршрутам в один пункт назначения, могут быть объединены, что затрудняет стороннему наблюдателю возможность анализировать трафик.
В простейшей реализации маршрута используется 128-битный префикс.
Каждая нода считывает префикс и ищет в таблице следующую ноду, которой перенаправляет пакет.
Отправитель сообщения облачает полным контролем над маршрутизацией.
- Каждая нода может независимо улучшать протокол маршрутизации в соответствии со своими требованиями
- Отправитель сообщения может оптимизировать сетевой путь с целью уменьшения задержек сети при использовании VоIP или игр
- Отправитель сообщения может оптимизировать сетевой путь с целью увеличения пропускной способности сети при передаче видео или файлов большого размера
- Отправитель может связать несколько маршрутов к пункту назначения для достижения избыточности, уменьшая задержки и увеличивая пропускную способность
Некоторые приложения могут связывать несколько паралелльных маршрутов на уровне приложений для обеспечения:
- конфиденциальности (ноды-шлюзы, сервис типа “TOR gateway/anon” )
- пропускной способности
- уменьшения задержек
- избыточности
Это ядро оверлейной сети Skycoin. Это очень просто, но крайне эффективно. Технические подробности и нюансы реализации будут обсуждаться позже. Skywire просто предваряет пакеты идентификатором для маршрутизации.
- Маршрутизация получает очень простую табличную форму построения
- Расходы на передачу пакета являются постоянными и не увеличиваются с ростом расстояния
Уточнения:
- Пункт назначения не идентифицирует отправителя. Идентификация перенесена с уровня маршрутизации на уровень приложения. Идентификация должна быть подтверждена публичным ключом инфраструктуры.
- Атака типа “Man-in-middle” невозможна. Отправитель может верифицировать получателя через их публичные ключи.
- Конфиденциальность существенно улучшена по сравнению с IPv4, где каждый обрабатывающий пакет узел может узнать получателя, отправителя и содержимое пакета.
- Производительность превосходит IPv4/BGP, так как интернет-провайдеры используют неэффективную технологию “доставки горячей картошки”
- Сквозное шифрование предотвращает атаки подмены пакетов и “packet injection”. Для подмены трафика нужно иметь приватные ключи для каждого конца соединительного туннеля.
- Быстрое шифрование. У объектов пропусканая способность 10 Гб/с при использовании ПЛИС (FPGA) оборудования, 250 Мб/с для ARM
Стимулирование: Протокол платежей
Skywire “miner”
Ноды пересылают трафик и получают за это токены. Это эквивалент “майнинга” в Skycoin, так определяется, сколько пользователей
получат токены за поддержку сети.
Платежи за транзит не должны раскрывать ноду-отправителя. Skycoin будет использовать платежи со “слепым посредником” через
третью сторону пока лучшего протокола не будет разработано.
Каждая нода в маршруте записывает трафик и нода-отправитель пишет трафик. Они регулярно устанавливают размер достаточных платежей.
Отправитель хранит токены на депозите у третьей стороны. Третья сторона создает обезличенный счет. Каждая нода может проверить репутацию отправителя и платежные возможности через посредника, не производя идентификацию сторон. Для посредника-третьей стороны каждый отправитель представляется в виде группы несвязанных обезличенных счетов. Каждая транзитная нода видима как группа несвязанных обезличенных счетов.
Микро-транзакции производятся внутри системы, без записи в блокчейн. Платежи, проводимые без записи в блокчейн, могут быть выведены на новый, никогда ранее не использованный адрес, если баланс превышает пороговое значение (сейчас 1 Skycoin). Это уменьшает раздувание размера блокчейна и стимулирует проводить микро-транзакции за пределами блокчейна.
Маршрутизация от источника: Канальное шифрование
По умолчанию применяется канальное шифрование на участках (“плечах”) маршрута и сквозное шифрование. Типичное приложение будет использовать как канальное и сквозное шифрование, так и подходящее шифрование на уровне приложения.
Шифрование между нодами должно быть быстрым. FPGA - реализация оборудования должна поддерживать операционную скорость на линии в 10 Гб/с. ARM процессоры должны будут поддерживать скорость в 250 Mб/с.
В данный момент наилучший вариант оборудования это ChaCha20 с ECC secp256k1, поддерживающий обмен эфирными ключами.
ChaCha20 использует только простые арифметические операции, работает быстрее, чем AES для встроенных устройств и более устойчив к атакам типа “timing channel”, чем AES.
Современные ЦПУ могут производить 6000 secp256k1 ECDH операций в секунду. Сессионные ключи меняются один раз в секунду или дважды за цикл обработки пакета между нодами. При этом используются отдельные ключи для каждого направления коммуникации.
Предыдущий сессионный ключ должен применяться для формирования ключа по протоколу Диффи-Хеллмана на эллиптических кривых (ECDH).
Сессионный ключ, сформированный посредством публичного криптографического ключа (ECC), используется для зашифрованных коммуникаций с применением самых быстрых асимметричных шифровальных алгоритмов (AES, ChaCha20). Это основа канального шифрования между нодами.
Пример протокола: Ноды A и B
- Нода
Aсобирается сгенерировать сессионный ключ для отправки зашифрованных данных нодеB - У ноды
Bесть публичный ключP, с приватным ключомp.Pэто точка для ECC sep256k1 кривой.p- это 256 битное целое число.Pявляется базовой точкой b, возведенной в степень p с операцией сложения. - Нода
Aгенерирует эфемерный публичный ключQ, с приватным ключомq. (НодаAгенерирует случайное 20-байтное целое число. Это и есть приватный ключq. НодаAвозводит базовую точку в степеньq, для генерации публичного ключаQ, который является точкой кривой). - Нода
AотправляетP*q(точка кривойP, представляющая собой публичный ключB’ в степениq) - Нода
AотправляетPнодеB - Нода
BполучаетPи вычисляетP*q, нодаAможет вычислитьp*Q, которые равны. Это общий секрет, который хешируется для генерации сессионного ключа. P = b*q, значитP*qравно(b*p)*q.P*q = (b*p)*q = (b*q)*p = Q*p, посколькуQ=b*q.Aзнаетq,QиP, аBзнаетp,PиQ. значит,AиBоба могут вычислитьP*qиQ*pи использовать это как их секрет. Однако, третья сторона не знает ни приватный ключqдляA, ни приватный ключpдляB, поэтому третья сторона не может вычислить этот “секрет” и поэтому не может прочитать информацию, зашифрованную с потомощью секрета.- Нода
Bподтверждает рецепт обновления сессионных ключей. НодаAначинает передачи под новым сессионным ключом сразу после получения подтверждения отB. - Нода
Aотправляет сообщение нодеB, шифруя его с использованием ChaCha20 с помощью сессионного ключа в качестве асимметричного шифровального ключа.
Возможные улучшения:
- Частая смена сессионных ключей. Можно менять ECDH ключ каждые несколько секунд или минут.
- Хеширование старых сессионных ключей с новым ECDH “секретом” для генерации нового сессионного ключа.
- Добавление временных значений в пакет и хеширование “секрета” во временное значение для генерации ключа для каждого сообщения. Подобный ключ повторно не используется. Уменьшает шанс коллизии при известных “plaintext” атаках.
- Удаление известного открытого текста из сообщений.
- Дополнение сообщений многократно на 16 или 32 байта.
IPv4 шлюз: обход существующих интернет-провайдеров
Множество людей не имеют возможности выбора среди интернет-провайдеров. Вот краткое описание того, как Skywire может предоставить такой выбор.
Некоторые приложения могут запускаться непосредственно в адресном пространстве Skywire. Другие программы, подобно Bittorrent, приложения для совместной работы с файлами и коммуникационные приложения сильно выигрывают от использования инфраструктуры Skywire и будут модифицированны для работы с ней.
Для устаревших приложений, таких как Netflix, Facebook, Twittter потребуются сетевые шлюзы, соединяющие оверлейную сеть Skywire с IPv4 и IPv6 сетями.
Пользователь выбирает шлюз Skywire, запущенный на сервере в местном колокейшен-центре. IPv4 трафик пользователя будет туннелироваться через шлюз (подобно VPN). IP пользователя будет заменяться IP шлюза. Сервер соединен гигабитной линией с множеством быстрых интернет-магистралей к провайдерам, не ограничивающим Netflix. Пользователь получает множественный выбор провайдеров через IPv4 шлюз Skywire. Провайдер шлюза получает оплату в Skycoin согласно учета.
Нода Skywire из дома пользователя соединяется со шлюзом всеми доступными способами. Нода Skywire туннелирует IPv4 трафик от маршрутизатора к шлюзу в колокейшен-центре. IP адрес шлюза становится IP адресом пользователя.
Пример один
У пользователя 10 Mб/с кабельный модем. Он устанавливает Skywire роутер. Роутер подключается к компьютеру, к Skywire Wifi ноде и кабельному модему. Роутер конфигурируется с Skywire как с IPv4 тоннелем.
Skywire wifi нода соединяется с ближайшей соседней Skywire нодой через wifi, который соединен с 10 Mб/с кабельным модемом. У соседа также есть 200 Mб/с 5 ГГц wifi с управляющей “point-to-point” антенной, соединенный с коммерческой нодой Skywire wifi, размещенной на улице.
Пользователь Skywire роутера выполняет поиск нод с соединением к обычному интернету и устанавливает соединение через:
- Его кабельный модем
- Wifi -> кабельный модем соседа
- Wifi -> 5 ГГц “point to point” -> 100/30 Mб/с коммерческая нода/оптика
Пользователь может объединить широполосный доступ по всем маршрутам, соединяясь с IPv4 тоннелем. В сообществе, объединившем пользование широкополосным доступом и достигшем определенного уровня надежности, кабельный модем пользователю больше не будет нужен.
Пример два
Коммерческая линия на улице представляет собой защищенный оптический кабель со скоростью 100/30 Mб/с с фиксированной оплатой за интернет. Если пропускная способность не используется, она теряется. Коммерческая линия подключается к Skywire роутеру. У роутера 3 порта. Первый порт - WAN, второй порт используется для локальной сети, к третьему порту подключена Skywire wifi нода на крыше. Роутер буфферизирует, делит по приоритетам трафик локальной сети и распределяет не использованную емкость Skywire трафика. Оператор получает токены Skycoin за транзит, покрывая затраты на коммерческую оптику.
Архитектура демона Skywire
- Каждая нода Skywire имеет Secpk256k1 публичный ключ
- Каждая нода Skywire имеет Skywire адрес для идентификации. Адрес представляет собой хеш публичного ключа ноды. Этот хеш публичного ключа является эквивалентом IP адреса сети.
- Каждая нода Skywire управляет пулом подключений. Это могут быть соединения через TCP, UDP обычного интернета, прямые подключения через Ethernet и Wifi (операции ячеистой сети). Подключения также могут быть “виртуальными”, туннелированными через прямые каналы или каналы обычного интернета, которые будут описаны позднее.
- Каждый сеанс подключения имеет “каналы”. Канал - это 16 битное целое число, аналог “порта” в TCP.
- Все получаемые и отправляемые сообщения имеют 32 битный префикс и 16 битный канал.
- Канал 0 зарезервирован для коммуникации между демонами Skywire, содержит мета-данные о запущенных демоном сервисах и другую необходимую для работы сети информацию.
- Демон Skywire может запускать “сервисы” на канале. Сервис это процесс, который управляет данными, полученных на канале сообщений и организует переадресацию данных удаленныем узлам и сервисам.
Пример сервиса: синхронизация блокчейна
Этот пример ссылается на реализацию на Golang, но архитектура демона зависит от конкретного языка.
Вы хотите синхронизировать две персональные цепочки блоков пользователей с публичными ключами A и B. Вы инициируете два экземпляра “сервиса синхронизации блокчейна”, конфигурируете их с соответствующими публичными ключами и связываете с демоном Skywire. Эти сервисы запускают ваших локальных демонов, каждого на особом канале.
Поиск узлов
Демоны синхронизации блокчейна хешируют публичные ключи и создают DHT (Distributed Hash Table - распределенную таблицу хешей) для поиска других узлов, синхронизирующих блокчейн. Как только узлы найдены, они могут быть указаны друг другом как дополнительные узлы через PEX (Peer Exchange- биржа узлов).
Отправка и получение сообщений
Сервисы создают реестры в виде списка полученных и готовых к отправке сообщений. Сообщения являются Golang-структурами. Данные сообщений в виде Golang-структур заполняются и затем отправляются. После доставки метод .Handle() вызывает соответствующее сообщение в виде Golang-структуры.
Маршрутизация нескольких сетей и объединение каналов
Если у вас есть 2 Mб/с кабельный модем, у вашего соседа есть 2 Mб/с кабельный модем и каждый из вас запустит Skywire ноду, то ваша нода может соединиться с его нодой и объединить пропускную способность двух подключений. Пакеты могут направляться через любой из двух модемов. Кабельный модем - это “бутылочное горло”. Если получить 4 Mб/с подключение, трафик будет проходить через оба модема параллельно.
Приложения подобные Bittorrent смогут объединять широполосный доступ через все доступные подключения, потому что они по своей природе открывают большое количество соединений при построении маршрутов.
Маршрутазация ячеистой сети: хранение и пересылка
Существует ряд сложностей по использованию нод на краях ячеистой сети.
Если у вашей сети восемь участков, соединенных через Wifi и 50% пакетов теряется на каждом участке, то только 1 пакет из 256 пройдет весь маршрут. Потеря пакетов обычна для Wifi, но традиционные TCP обрабатывают потерю пакетов как перегруженность и снижают скорость соединения.
Поэтому на краях сети Skywire вынужден использовать хранение и пересылку по маршрутам. Это накладывает требования к памяти на Skywire ноды, но существенно улучшает производительность сети.
Для маршрута A->B->C
- Каждый маршрут имеет буфер.
- Каждая нода продолжает отправлять сообщения, пока они не будут получены и подтверждены.
- Если буфер от
B->Cзаполнен для маршрута, тоAбудет это знать и остановит передачу данных до освобождения места в буфере.
Поэтому требуются два подтверждения между нодами на канальном уровне. Одним подтверждением является уведомление о том, что переданные фрагменты данных были получены. Другим является подтверждение того, что данные из буфера были отправлены и подтверждены следующим узлом маршрута.
Хранение и пересылка: Использование пропускной способности сети
В традиционных IP-сетях при приближении к полному использованию пропускной способности канала эффективность снижается. Сеть, работающая с пропускной способностью 80%, сталкивается с риском того, что краткосрочный всплеск объема данных приведет к отказу маршрутизатора из-за переполнения и часть пакетов будет потеряна.
TCP интерпретирует по любой причине потерянные пакеты как переполнение сети и реагирует снижением скорости. Потерянные пакеты к тому же требуют повторной отправки через TCP и служат причиной задержек, так как приложение ожидает окончания срока доставки, потом повторной отправки и лишь затем обрабатывет оставшуюся часть пакета.
С операциями хранения и пересылки буфер маршрута заполняется и больше ничего не происходит. Пока буфер полон, нода останавливает отправку данных до момента получения уведомления об освобождении места в буфере.
Операция хранения и пересылки особенно важна для ячеистых сетей по базе Wifi. Существуют всего три не перекрывающихся канала в диапазоне 2.4 ГГц. Потери пакетов растут очень быстро и очень скоро перекрывают пропускную способность Wifi сети. Потеря пакетов Wifi неизбежна и не может служить надежным сигнал переполнения сети или достижения лимита пропускной способности.
Хранение и пересылка позволяет нам запускать Wifi ноды с полным использованием пропускной спосбности и загружать все доступные каналы без запуска элементов контроля переполнения TCP.
Для запуска сетей на практике потребуется оборудование следующих типов:
- Программно-управляемый радиоканал
- MIMO
- beam forming (формирование луча)
- направленная антенна
- Кооперация использования частот, пропускных способностей каналов во времени и пространстве
- 801.11af на whitespace (свободных от других нагрузок) частотах
Хранение и пересылка: примеры
Каждая нода для каждого маршрута отслеживает:
- Размер буфера для получающей трафик ноды
- Прогнозируемый размер буфера (по подтвержденным и неподтвержденным сегментам переданных данных)
- Подтвержденным размер буфера
- Размер, смещение и последовательность каждого переданного сообщения, которое не было подтверждено
- Циклический буфер по байтам исходящих датаграмм, которые не получили подтверждения
Сегмент данных на уровне канала связи может содержать объединенные сообщения из нескольких маршрутов, адресованных одному узлу. Это осложняет анализ трафика и повышает производительность за счет предоставления больших датаграмм в сетях, поддерживающих более высокие MTU (maximum transmission unit - максимальный размер полезного блока данных).
Два подтверждения используются для каждого переданного сообщения. Первое подтверждение в том, что датаграмма получена следующей нодой маршрута. Это подтверждение для датаграмм, которые могут содержать набор сообщений, каждое из которых передается по своему маршруту. После получения этого подтверждения ноде больше не требуется хранить датаграмму. Если же датаграмма не подтверждена, ее необходимо отправить заново.
Второе подтверждение обновляет информацию об оставшемся свободном размере входящего буфера маршрута. Если свободный размер буфера маршрута достаточен, дополнительное сообщение может быть передано по маршруту.
Другой возможный подход состоит в том, чтобы поддерживать буфер по отправителю, а не по маршруту, с отправкой нескольких копий сообщений для перегруженных маршрутов. Это уменьшает количество поисковых запросов маршрута, требуемых отправителю, и это то, с чем, возможно, придется экспериментировать.
Пример обычной операции
Маршрут: A->B->C
- У B размер буфера для маршрута 1024 KБ
- A отправляет 512 KБ ->B
- B подтверждает 512 KБ от A
- < A получил подтверждение (и первые 512 KБ больше не нужно хранить) >
- B пересылает 512 KБ ->C
- C подтверждает получение 512 KБ
- C подтверждает A, что 512 KБ былы переданы
Пример с переполнением
Маршрут: A->B->C
- У B размер буфера для маршрута 1024 KБ
- A отправляет 512 KБ ->B
- A отправляет 256 KБ ->B
- A отправляет 256 KБ ->B
- < A останавливает отправку и ожидает, буфер B уже заполнен>
- B подтверждает A получение 512 KБ и 512 KБ
- B отправляет 512 KБ и 512 KБ ->C
- C подтверждает получение 512 KБ и 512 KБ от B
- С подтверждает А, что 512 KБ и 512 KБ были переданы
- < A может продолжать передачи >
Предполагается, что данные получаются в порядке отправления для Wi-Fi и прямого подключения к сети Ethernet
Пример с потерей пакета
Маршрут: A->B->C
- У B размер буфера для маршрута 1024 KБ
- A отправляет 512 KБ ->B
- A отправляет 256 KБ ->B
- B подтверждает 256 KБ
- A делает вывод, что 512 KБ не были получены
- A повторно отправляет 512 KБ
- B подтверждает 512 KБ
- < B может сейчас продолжать отправку пакетов C >
Хранение и пересылка: задержки и пропускная способность
При хранении и пересылке на передающий узел накладывается требование объема хранения, равное произведению латентности прохождения в оба конца и скорость передачи на задержку в оба конца. 1 ГБ ОЗУ достаточен для 8000 мс задержки полного прохождения пакета при скорости передачи 1 Гб/с.
Режим хранения и пересылки устанавливается по умолчанию, но не является обязательным.
Хранение и пересылка: использование пропускной способности и качество обслуживания
Буферизируется загрузка видео, аудио и файлов. Абсолютная усредненная пропускная способность за отрезок времени имеет значение, а не латентность. Другой трафик (запросы на веб-сайты, видеоигры и VoIP и пр.) необходимо воспроизводить в реальном времени и он должен быть доставлен как можно быстрее.
С двумя уровнями качества обслуживания «Real Time» и «Bulk» мы можем сначала передавать VоIP, веб-сайт и «трафик видеоигр», уменьшая латентность для этого трафика. Нечувствительный к задержкам трафик («Bulk»- видео, музыка и совместное использование файлов) будет проходить по каналу только после того, как буфер трафика «Real Time» опустеет.
Мы можем использовать каналы почти на 100% мощности, а также снизить латентность трафика «Real Time». Поэтому мы предлагаем поддерживать два уровня обслуживания для маршрутов.
Маршрутизация от источника: множественные маршруты для мобильного подключения
Если соединения между узлами являются стабильными, с маленькой задержкой и имеют высокую пропускную способность, то для большинства приложений достаточно одного маршрута. Некоторые приложения, такие как Bittorrent, открывают большое количество подключений и изначально могут использовать нужную пропускную способность для всех доступных маршрутов.
Если связь между узлами медленная, ненадежная или соединения меняются, надежность и производительность требуют, чтобы трафик был мультиплексирован по нескольким избыточным маршрутам.
Если нода Skywire, работающая на сотовом телефоне, находится в автомобиле, движущемся по улице, доступные сети будут меняться. Одни сетевые узлы будут становиться доступны, а другие из доступа пропадут. Нода должна иметь непрерывную связь на уровне приложения, даже если физические соединения создаются и разрываются.
Одним из подходов является выбор набора надежных узлов на сетевой магистрали в качестве точек завершения маршрута, а затем проксирование трафика через эти узлы по множеству краткосрочных маршрутов.
Маршрутизация от источника: надежность избыточных маршрутов
Если каналы ненадежны или имеют большую переменную задержку, желательно передавать данные приложений несколькими путями. Тогда они могут быть восстановлены, если получены данные хотя бы по одному из маршрутов. Для этого могут быть использованы фонтанные коды и другие методы кодирования.
Маршрутизация от источника: ноды-стражи
Для обеспечения конфиденциальности, если пользователь хочет еще более ослабить связь между своим адресом ноды Skywire (хешем открытого ключа) и IP-адресом, он может определить фиксированный набор узлов, которые устанавливаются как рекомендуемые транзитные точки для трафика, предназначенного для определенного адреса, или действуют как обязательные узлы при построении маршрутов с данного адреса.
Маршрутизация от источника: ограничения для BGP
Border Gateway Protocol (BGP), протокол граничного шлюза, доминирующий сейчас протокол маршрутизации, обрабатывает проблему маршрутизации, не сохраняя никакого состояния пакетов. Вместо этого BGP позволяет каждой сети создавать серии специальных правил для каждого из своих маршрутизаторов, которые смотрят на отправителя и получателя пакета и определяют, какую сеть задействовать для пересылки пакет. Маршрутизаторы сообщают друг другу информацию о подключениях, а для маршрутизации в сетевом домене используется другой алгоритм маршрутизации.
BGP предназначен для взаимодействия нескольких независимых автономных сетей. BGP имеет допущение о гомогенности, предполагается, что маршрутизация в автономном домене централизованно управляется и высоконадежна, причем внутри домена она однородна. Ячеистые сети и интернет-провайдеры сообщества будут иметь специальную связь с гетерогенным подключением и маршрутизацией устройств.
Связность в ячеистых сетях, специальных конфигурациях и взаимосвязанных сетях с избыточными маршрутами через несколько сетей полностью нарушает иерархические допущения BGP.
Однако, альтернативы BGP нет. BGP - лучшее решение в рамках своих конструктивных ограничений.
В BGP есть несколько вопросов, которые должен решить протокол следующего поколения:
- BGP не настраивается самостоятельно. Для настройки и использования сетей BGP требуются обширные технические знания
- Системы BGP часто требуют ручной настройки для маршрутизации вокруг поврежденных участков и не являются устойчивыми к плохим конфигурациям
- BGP требует ручного создания правил отбора специальных маршрутов и имеет повышенную сложность для поддержки соединений объектов к нескольким разным сетям
- Сети BGP требуют высокоцентрализованного планирования
- NSA использует недостатки в BGP для маршрутизации целевого трафика на точки перехвата
- Предположения BGP становятся все более натянутыми, особенно для специальных, ячеистых и мобильных сетей
- Иерархические, однопотоковые предположения BGP делают чрезвычайно сложным реализацию многопоточности и других требований к сетям следующего поколения
- BGP испытывает серьезные проблемы, когда сетевые каналы ненадежны, например, при мерцании маршрута
- Размер таблицы маршрутизации BGP растет экспоненциально по мере присоединения взаимосвязанных подсетей
- Применение множественных маршрутов вызывает резкий рост размера таблицы маршрутизации BGP
- BGP испытывает трудности с балансировкой нагрузки и маршрутизацией через несколько сетей. BGP ограничивает возможности использовать в реальных сетях параллельные подключения между локациями
- BGP создает стимул для интернет-провайдеров как можно быстрее сбрасывать сетевой трафик в другие сети («маршрутизация горячей картошки»), снижая производительность и увеличивая время ожидания
Преемник BGP должен:
- Быть не-иерархическим
- Быть самонастраивающимся (zero-conf)
- Хорошо работать с плотным специальными, избыточными соединениеми между сетями
Виртуальные маршруты: масштабирование топологии сети Skywire
Для реализации маршрутизации Skywire требуется, чтобы нода поддерживала информацию для каждого маршрута, который проходит через нее. Отдельные ноды не могут обрабатывать сотни тысяч отдельных маршрутов и поэтому масштабируемость достигается с помощью другого механизма.
Skywire экспериментирует с не-иерархической самоорганизующейся маршрутизацией, которая изначально поддерживает многопользовательские и не-иерархические топологии сети с эффективным масштабированием.
Skywire минимизирует размер сети, поскольку сеть масштабируется с помощью виртуальных маршрутов. Виртуальные маршруты позволяют подключать тысячи подключений по высокоскоростному магистральному соединению с накладными расходами одного маршрута.
«Виртуальный маршрут» создает туннель по существующему маршруту:
A -> B -> C -> D
Виртуальный маршрут отображается как A-> D. B и C могут быть высокоскоростными соединениями на большие расстояния. B и C несут только накладные расходы одного маршрута, а A и D - накладные расходы на поддержание маршрутов в туннеле A-> D.
Виртуальный маршрут может содержать трафик от сотен связанных маршрутов от A до D, тогда как B и C имеют только накладные расходы одного маршрута. Виртуальный маршрут может дополнительно включать в себя множество избыточных сетевых путей между отправителем и получателем для улучшения производительности, пропускной способности и избыточности.
Виртуальные маршруты позволяют объединить пропускную способность иерархической сети с узлами с постоянными накладными расходами и подключениями на каждом уровне.
Узлы на границе сети подключаются в узлы агрегации. Узлы агрегации краев соединены транзитным каналом с высокой пропускной способностью и связаны в узлы-шлюзы, которые взаимодействуют между сетями. Узлы-шлюзы подключают высокоскоростные каналы и каналы больших расстояний.
Виртуальные маршруты являются представлением существующих междоменных маршрутных подключений, которые изначально поддерживают:
- не-иерархическую маршрутизацию (дата центры)
- Multiple-homing (подключение к нескольким сетям)
- Плотная сетевая взаимосвязь между доменами на разных уровнях иерархии
- Многоканальная маршрутизация внутри и между сетевыми доменами
Виртуальные маршруты подчиняются правилу треугольника. Если стоимость маршрута A-> B, равна C (A-> B), то
C(A->B->C) >= C(A->B) + C(B->C)
Предпочтение отдается маршрутам с меньшей задержкой, низкой стоимостью и коротким “плечом”, что создает экономические стимулы для создания эффективной топологии сети. Сеть не-иерархическая и самоорганизующаяся. Созданные виртуальные маршруты представляют собой объединения маршрутов, которые, естественно, передают поток трафика.
В протоколе BGP сети пытаются как можно быстрее избавиться от трафика (“маршрутизация горячей картошки”). В Skywire сети конкурируют за транзит (для получения стимулов в виде токенов). Клиенты Skywire будут предпочитать маршруты дешевые, с короткими “плечами” и малыми задержками. Сети с большой пропускной способностью между источником и пунктом назначения имеют меньшую задержку и меньшее число переходов и, следовательно, получают предпочтение.
Для сохранения эффективности пропускная способность и число “клиентов” (количество маршрутов, которые связывает каждый виртуальный маршрут) на каждом уровне сетевой иерархии должны быть постоянными, чтобы обеспечить ровный рост размера сети и логарифмической таблицы маршрутизации узлов.
Маршрутизация от источника: виртуальные маршруты, топология SONET
Виртуальный маршрут с несколькими входами и несколькими выводами может быть физически реализован в виде кольца SONET с нодами Skywire в каждом городе, организованными по топологии SONET. Узлы Skywire выступают в роли шлюзового маршрутизатора между сетью Skywire и топологией SONET.
Ноды могут ставить в очередь большие датаграммы, объединяя для эффективности несколько сообщений от одного источника до одного и того же адресата.
Сообщение входит в ноду Skywire кольца SONET в колокейшен-центре в одном городе. Пункт назначения или маршрут сообщения считывается, и сообщение кодируется для переноса по сегменту SONET. Сообщение приходит в ноду назначения Skywire в сегменте SONET и продолжается по его пути.
Таким образом, виртуальный маршрут с несколькими входами и выходами является списком нод Skywire со стоимостью транзита, описывающей кольцо SONET или полностью связанную топологию, где любой узел в списке имеет транзит в любой другой узел в списке.
Маршрутизация от источника: асимметричное подключение
Системы следующего поколения WiFi будут иметь антенны 4x4 и 8x8 в схеме MIMO с фазированной решеткой. Такие системы способны проектировать сильно сфокусированные направленные лучи. Эти системы значительно увеличивают мощность и силу сигнала в приемнике, но не улучшают симметрично возможности антенны по приему обратных сигналов.
Аналогично, высокомодульный усиленный сигнал WiFi через направленную антенну может быть принят на участке, находящемся за пятнадцать миль, но прием сигнала с сайта не может быть аналогичным образом усилен так же легко, как можно повысить мощность передачи.
Мы предлагаем асимметричные маршруты для ситуации, когда сообщения могут быть получены нодой, но ноды не могут напрямую обмениваться данными. В асимметричных маршрутах сообщения подтверждения передаются по сети по маршруту, что позволяет полностью использовать асимметричные подключения по односторонним каналам связи.
Ситуации, когда это станет все более актуальным:
- Схемы сельских SONET с усиленным WiFi по направленным антеннам
- Городская связь между высоконаправленными и не направленными антеннами, вещающими на одинаковых уровнях мощности
- преодоление бетонных преград в 802.11af системах
- LiFi с распространением за пределами прямой видимости может передавать данные со скоростью более 200 Мб/с, но с высокой асимметричностью
- Системы Li-Fi типа RONJA имеют теоретические пределы пропускной способности при прямой видимости 10 Гб/с, и при асимметричной связи есть преимущество по стоимости/настройке
Использование асимметричных соединений и маршрутов, обеспечивающих только одностороннюю прямую передачу данных между узлами, имеет несколько преимуществ, особенно для развития сельских районов и снижения стоимости применения технологий высокой пропускной способности для сетей следующего поколения.
Маршрутизация от источника: открытие маршрутов
Шлюз IPv4 и ячеистые сети интернет-провайдеров сообщества требуют для постоения мершрута лишь однократного соединения к обычному интернету. Наилучшие, самые надежные, самые высокопропускные каналы имеют очень небольшую загрузку. Поэтому мы рассматриваем маршрутизацию применительно для этого случая. Позже рассмотрим общую маршрутизацию.