Примечание
Эта страница описывает Java-реализацию I2P для профилирования и выбора узлов по состоянию на 2010 год. Хотя информация в целом остается актуальной, некоторые детали могут больше не соответствовать действительности. Мы продолжаем развивать стратегии блокировки, бана и выбора для противодействия новым угрозам, атакам и сетевым условиям. Текущая сеть включает в себя множество реализаций router с различными версиями. Другие реализации I2P могут использовать совершенно иные стратегии профилирования и выбора или вообще не использовать профилирование.
Обзор
Профилирование пиров
Профилирование узлов — это процесс сбора данных на основе наблюдаемой производительности других router’ов или узлов, а также классификации этих узлов по группам. Профилирование не использует никаких заявленных данных о производительности, опубликованных самим узлом в сетевой базе данных .
Профили используются для двух целей:
- Выбор узлов для ретрансляции нашего трафика, что обсуждается ниже
- Выбор узлов из набора floodfill роутеров для использования в хранении и запросах к базе данных сети, что обсуждается на странице база данных сети
Выбор узлов
Выбор узлов — это процесс выбора router’ов в сети, через которые мы хотим передавать наши сообщения (какие узлы мы попросим присоединиться к нашим tunnel’ам). Для этого мы отслеживаем производительность каждого узла (“профиль” узла) и используем эти данные для оценки их скорости, того, как часто они смогут принимать наши запросы, и не перегружены ли они или не способны ли надежно выполнить то, на что соглашаются.
В отличие от некоторых других анонимных сетей, в I2P заявленная пропускная способность не является доверенной и используется только для того, чтобы избегать узлов, рекламирующих очень низкую пропускную способность, недостаточную для маршрутизации tunnel’ов. Весь отбор узлов осуществляется через профилирование. Это предотвращает простые атаки, основанные на заявлении узлами высокой пропускной способности с целью захвата большого количества tunnel’ов. Это также усложняет атаки по времени .
Выбор узлов происходит довольно часто, поскольку router может поддерживать большое количество клиентских и исследовательских tunnel, а время жизни tunnel составляет всего 10 минут.
Дополнительная информация
For more information see the paper Peer Profiling and Selection in the I2P Anonymous Network presented at PET-CON 2009.1 . См. ниже примечания о незначительных изменениях, внесенных после публикации статьи.
Профили
Каждый peer имеет набор собранных о нем данных, включая статистику о том, сколько времени требуется для ответа на запрос к сетевой базе данных, как часто их туннели выходят из строя, и сколько новых peers они могут нам представить, а также простые данные, такие как когда мы в последний раз получали от них сообщение или когда произошла последняя ошибка связи.
Профили довольно небольшие, несколько КБ. Для контроля использования памяти время истечения профилей сокращается по мере увеличения их количества. Профили хранятся в памяти до выключения router, когда они записываются на диск. При запуске профили считываются, поэтому router не нужно переинициализировать все профили, что позволяет router быстро реинтегрироваться в сеть после запуска.
Сводки узлов
Хотя сами профили можно считать сводкой производительности узла, для эффективного выбора узлов мы разбиваем каждую сводку на четыре простых значения, представляющих скорость узла, его пропускную способность, насколько хорошо он интегрирован в сеть, и не находится ли он в состоянии отказа.
Скорость
Расчет скорости просто просматривает профиль и оценивает, сколько данных мы можем отправить или получить через одиночный tunnel через узел за минуту. Для этой оценки он просто анализирует производительность за предыдущую минуту.
Пропускная способность
Расчет пропускной способности просто проходит через профиль и оценивает, в скольких tunnel узел согласился бы участвовать за определенный период времени. Для этой оценки он рассматривает, сколько запросов на создание tunnel узел принял, отклонил и отбросил, и сколько из согласованных tunnel впоследствии не удалось. Хотя расчет взвешивается по времени, так что недавняя активность имеет больший вес, чем более поздняя активность, в него могут включаться статистические данные возрастом до 48 часов.
Распознавание и избежание ненадежных и недоступных узлов имеет критически важное значение. К сожалению, поскольку построение и тестирование tunnel требует участия нескольких узлов, сложно точно определить причину отброшенного запроса на построение или неудачи теста. Router назначает вероятность отказа каждому из узлов и использует эту вероятность при расчете пропускной способности. Отбрасывания и неудачи тестов имеют гораздо больший вес, чем отклонения.
Организация пиров
Как упоминалось выше, мы анализируем профиль каждого узла, чтобы произвести несколько ключевых вычислений, и на основе этих данных организуем каждый узел в три группы - быстрые, высокопроизводительные и стандартные.
Эти группы не являются взаимоисключающими и не являются несвязанными:
- Peer считается “высокопроизводительным”, если его расчет пропускной способности соответствует или превышает медианное значение всех peers.
- Peer считается “быстрым”, если он уже “высокопроизводительный” и его расчет скорости соответствует или превышает медианное значение всех peers.
- Peer считается “стандартным”, если он не является “высокопроизводительным”
Ограничения размера группы
Размер групп может быть ограничен.
- Быстрая группа ограничена 30 узлами. Если их больше, в группу помещаются только те, которые имеют наивысший рейтинг скорости.
- Группа высокой пропускной способности ограничена 75 узлами (включая быструю группу). Если их больше, в группу помещаются только те, которые имеют наивысший рейтинг пропускной способности.
- Стандартная группа не имеет фиксированного лимита, но несколько меньше количества RouterInfos, хранящихся в локальной базе данных сети. На активном router в сегодняшней сети может быть около 1000 RouterInfos и 500 профилей узлов (включая те, что находятся в быстрой группе и группе высокой пропускной способности).
Пересчёт и стабильность
Сводки пересчитываются, а пиры переупорядочиваются по группам каждые 45 секунд.
Группы, как правило, довольно стабильны, то есть не происходит большой “текучести” в рейтингах при каждом пересчете. Узлы в группах быстрых и высокопроизводительных получают больше tunnel, построенных через них, что увеличивает их рейтинги скорости и пропускной способности, что укрепляет их присутствие в группе.
Выбор пиров
Router выбирает узлы из указанных выше групп для построения туннелей.
Выбор узлов для клиентских tunnel
Клиентские туннели используются для трафика приложений, например для HTTP-прокси и веб-серверов.
Чтобы снизить уязвимость к некоторым атакам и повысить производительность, узлы для построения клиентских tunnel выбираются случайно из наименьшей группы, которой является группа “быстрых” узлов. Нет предпочтения к выбору узлов, которые ранее участвовали в tunnel для того же клиента.
Выбор узлов для исследовательских tunnel
Исследовательские tunnel используются для административных целей router, таких как трафик базы данных сети и тестирование клиентских tunnel. Исследовательские tunnel также используются для связи с ранее неподключенными router, поэтому они называются “исследовательскими”. Эти tunnel обычно имеют низкую пропускную способность.
Узлы для построения исследовательских tunnel обычно выбираются случайным образом из стандартной группы. Если процент успешности этих попыток построения низкий по сравнению с процентом успешности построения клиентских tunnel, router будет выбирать взвешенное среднее узлов случайным образом из группы высокой производительности. Это помогает поддерживать удовлетворительный процент успешности построения даже при плохой производительности сети. Нет предвзятости в сторону выбора узлов, которые ранее участвовали в исследовательском tunnel.
Поскольку стандартная группа включает очень большое подмножество всех известных router’у узлов, исследовательские tunnel’ы по сути строятся через случайный выбор из всех узлов, пока коэффициент успешного построения не станет слишком низким.
Ограничения
Для предотвращения некоторых простых атак и повышения производительности действуют следующие ограничения:
- Два узла из одного и того же IP-пространства /16 не могут находиться в одном tunnel.
- Узел может участвовать максимум в 33% от всех tunnel, созданных router’ом.
- Узлы с крайне низкой пропускной способностью не используются.
- Узлы, для которых недавняя попытка подключения завершилась неудачей, не используются.
Порядок узлов в туннелях
Peers упорядочены внутри tunnel для противодействия атаке предшественника (обновление 2008 ). Более подробная информация находится на странице tunnel .
Будущая работа
- Продолжать анализировать и настраивать расчеты скорости и пропускной способности по мере необходимости
- Реализовать более агрессивную стратегию исключения при необходимости для контроля использования памяти по мере роста сети
- Оценить ограничения размера группы
- Использовать данные GeoIP для включения или исключения определенных узлов, если настроено
Примечания
Для тех, кто читает статью Peer Profiling and Selection in the I2P Anonymous Network , пожалуйста, имейте в виду следующие незначительные изменения в I2P с момента публикации статьи:
- Расчет интеграции все еще не используется
- В статье “группы” называются “уровнями”
- Уровень “Неисправный” больше не используется
- Уровень “Не неисправный” теперь называется “Стандартный”