IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2025/05/24
~AreEnn
~AreEnn_
~R4SAS
~acetone
~orignal
~villain
@onon
&N00B
+Xeha
GFW
GTA
Komap
Most2
Nikat
Opax
Vort
`
anon
anontor
b3t4f4c3
duck
fidoid
grimreaper
iiii
karamba_i2p
not_bob
osoznayka
poriori
profetikla
qend
r3med1tz
rc13
slfd
soos
teeth
un
weko_
whothefuckami
orignal onon так как коммит назвать?
onon А ты что, решил такое заливать?
onon Ворт же сказал крешится
onon Но у меня не крешилось
onon Хз
orignal так он не знает крэшится это или нет
orignal вот зальем и проверим ))
onon Ну основное там это disable loss-control наверное
orignal и что вместо него?
onon Delay-based control
onon Там были оба вместе
onon Я щас улучшил делай и выключил лосс
onon Но лосс можно обратно включать кто хочет
orignal понял
onon Будет работать
orignal завтра залью
onon Но это не окончательный вариант, там ещё нужно переделывать кой-чего. Но я пока не в силах.
orignal ну в релиз можно запускать?
onon Оно работает лучше чем то что есть сечас
orignal отлично
onon Ну я долго тестил-гонял
onon Новых багов не обнаружил
orignal разберемся ))
onon Только дед может начать ругаться
onon Я не знаю точно как ява ограничивает скорость транзита
onon Если дропами - то им не повезло
orignal на деда покластб
onon Потому что этот алгоритм игнорирует бропы
onon Кроме choked
orignal счас закоммичу
onon Ну и нужно тогда начинать думать как нам самим ограничивать транзит тогда
onon Потому что один такой стрим примерно мегабайт/сек гонит
orignal ээээ
onon А то кто-то поставит себе лимит в 500кбайт/с а ему мегабайты будут гонять
onon И ничего он не сделает
onon Только новый туннели принимать перестанет
orignal ну это вообще другая тема
orignal у меня вот счас через ygg-only ротуер мег транзита прет и че?
orignal закоммитил
onon Да ниче, просто бывают лимитированные тарифные планы
orignal пусть L ставит
orignal тогда через него клиентские тоннели не буду строиться
orignal если явно не указать
onon Логично
onon Но это мягкий лимит
onon Нужно будет делать хард лимит
onon С задержкой пакетов
onon Чтоб не отправлял быстрее, чем в конфиге указано
onon А возможно и на приём ограничивать скорость
Vort "<@onon> Я так понял, Vort пытался сделать codel" основная цель была - защита от атаки, которую я описал ранее. но алгоритмы похожи получились, верно
Vort "<@onon> Т.е. отправитель даже не заметит такой рост RTT" поэтому мы и обсуждали перенастройку констант. если отправитель и 4 секундный лаг не заметит, то тут уже проблема в отправителе
Vort "<@onon> А с delay сами видите, какая история получается" получается, что не получается обсуждения. в первую очередь, нужно потдтверждение или опровержение возможности той атаки, что я написал
Vort затем подтверждение или опровержение эффективности того алгоритма что сейчас в SSU2 по противодействию этой атаке
Vort для альтернативных алгоритмов тоже можно сделать анализ, как по защищённости от атаки, так и по граничным условиям для дропа пакетов
Vort "<@onon> Только там не RED а скорее tail drop" там Terminate ()
Vort "<@onon> Тогда нужно будет и RED перенастраивать" это то, о чём я уже несколько лет как говорю - для разных скоростей нужны разные размеры буферов. поэтому в SSU2 и сделан лимит по времени. он учитывает эту особенность
Vort "<@onon> Чтобы пакеты удалялись, если больше максимально допустимого периода времени лежат." именно это и сделано
Vort осталось только константы до конца обсудить, но обсуждение опять ушло куда-то не туда
Vort onon: если скорректировать максимальное время сидения в очереди для SSU2, какие-то ещё проблемы у этого алгоритма останутся? если да, то какие?
onon > если отправитель и 4 секундный лаг не заметит, то тут уже проблема в отправителе
onon Согласен
onon > нужно потдтверждение или опровержение возможности той атаки, что я написал
onon Подтверждаю, атака на переполнение возможна
onon > подтверждение или опровержение эффективности того алгоритма что сейчас в SSU2
onon Очень эффективен. Настолько, что у нас в сети транзита почти не осталось.
onon > это то, о чём я уже несколько лет как говорю
onon И не ты один, сетевики уже десятки лет над этим думают
onon > какие-то ещё проблемы у этого алгоритма останутся?
onon Он перестанет защищать от вышеописанной атаки
onon И ещё. Обычный codel уже никто не использует. Все используют fq_codel
onon Но как это реализовать у нас, я точно не знаю.
Vort "<@onon> И не ты один, сетевики уже десятки лет над этим думают" у сетевиков немного другая задача, да и лимиты по доступным ресурсам более жесткие
onon Должен быть общий какой-то буфер для всех транспортов
onon И там уже для каждого потока рассчитывать время
onon Так буфер может быть больше, но переполнение не получится
Vort "<@onon> Он перестанет защищать от вышеописанной атаки" предлагаю подобрать более чёткие доказательства. я считаю, что при 100мегабитной сети максимальное потребление RAM очередью будет 44 мегабайта при 4 секундном лимите
onon Я такое Лосю задвигал, он сказал подумает
Vort при лимите в 500 пакетов как в NTCP2 атака около полугига может выжрать (точно не рассчитывал)
onon 44 мегабайта это тоже много
Vort ну вот если сравнивать атаку при лимите по количеству и при лимите по времени, то при лимите по количеству шанс заDoSить узел раз в 10 выше
onon СОгласен
Vort "<@onon> 44 мегабайта это тоже много" для сценария атаки - не много. при обычном режиме работы такого быть не должно
onon Ты ещё что-то писал про head drop. Как это у тебя сделано?
onon Если у нас в буфере есть пакет с превышением, начинаем дропать начало очереди?
onon Звучит странно
onon И сколько пакетов из начала очереди дропаем? Все?
Vort через задницу сделано если честно. сейчас ссылки подыщу
onon Вот берём мы пакет, проверяем, есть ли в очереди пакеты с превышением - ага, - есть. Дропаем.
onon Берём следующий пакет - ага, -дропаем...
onon И так всю очередь?
Vort bool SSU2Session::SendQueue ()
Vort msg->GetEnqueueTime() + m_MsgLocalExpirationTimeout < mts
onon Ты мне на пальцах объясни
Vort head drop происходит при вынимании из головы очереди
Vort если вынули старьё - выкидываем
Vort у каждого пакета есть таймстамп
Vort он проверяется
onon Так это работает только если все пакеты старые?
onon Почему тогда head drop называется?
onon Если всё дропается
Vort какой старый - такой выкинется. какой не старый - отправится
Vort не всё
Vort только старьё
Vort потому что в голове самые старые пакеты. в хвосте могут быть посвежее
onon Странное утверждение
Vort ну проверь
Vort если все пакеты свежие - ничего не дропнется
Vort если все старые - всё дропнется
Vort если часть свежих, часть старых - старые дропнутся, свежие пойдут в отправку
onon Так это не head drop
onon Это просто ты проверяешь время перед отправкой
onon Запутал меня
Vort очередь естественным образом отсортирована по старости пакетов
Vort те, что в голове - просидели в очереди дольше, чем те, что в хвосте
Vort а так как забираем пакеты начиная с головы - то и получаем head drop
Vort ну можно называть этот алгоритм и как-то по другому, не суть
Vort посмотри лучше сам код
onon Я понял
onon По константам, думаю, для транзита можно попробовать 2 сек, для своих - 3 сек.
onon Этого должно хватать для нормальной длины тоннеля.
onon А у кого длиннее - потерпят.
onon Ну или 3 и 4...
onon Точно нужно тестировать
onon Если вопросов больше нет, я пойду дальше спать.
Vort тут вопрос в обработке "своих" дропов
onon Ты говорил, есть маркер
onon Если нет - просто один лимит на всех
onon Просто смысла нету делать для своих пакетов более жёсткий лимт
onon Тебя перегружают, а ты свои собственные пакеты дропаешь
onon Нонсенс
Vort я просто не знаю, доходит ли до стримов нормально информация о "своём" дропе
onon До стримов теперь информация нио каких дропах не доходит
onon Он их просто игнорирует
Vort интересная мысль. эти дропы сделаны для того, чтобы забросить перегруженный канал и переключиться на другой, свободный
Vort но если это мы сами его специально перегрузили - тогда таки нонсенс
Vort вполне возможно, что для других типов пакетов это и правильно - мгновенно обнаружили затык и сунули пакет куда-то в другое место
Vort а для стримов нужно что-то другое
Vort но дело в том, что эту систему продумывал orignal и я плохо понимаю, что там зачем нужно
Vort я старался просто сделать так, чтобы ничего в ней не ухудшить
Vort а насколько она изначально было правильно спроектирована - этого я не знаю
onon Там ещё проблема есть, что у нас узел проверяет есть ли очередь на транспорте, и если есть, записывает этот роутер в профиле как "плохой"
onon Есть такое? Или мне показалось?
onon Так у нас все узлы плохими будут
onon isSlow врде так
Vort подробностей не помню, но если узел на время переполненной очереди исключится из выбора для туннелей - то и хорошо
Vort скорее всего после того как очередь рассосётся, то статус узла снова станет нормальным
onon Если на короткое время - то да
Vort перегрузить все очереди - это какая-то фантастика на данный момент
Vort сейчас чаще всего перегрузок или нет вообще или одна-две на несколько тысяч узлов
onon Это твоя защита так работает
onon Транзит в ноль режет
Vort так их и на NTCP2 нету
onon Потому что на пути в маршруте есть роутер i2pd с ssu2
Vort их и до этого алгоритма не было
onon Потому что тогда и стримов быстрых не было
Vort причина в другом - процент активных транспортов всегда невелик
Vort основная масса транспортов обслуживает пинги
Vort поэтому массовой перегрузки очередей не может быть в принципе
Vort вот у меня сейчас 3 тыщи транспортных соединений. очередь только на 2 из них (0.07%)
Vort даже если очередей станет в 100 раз больше - 7% - это всё равно никак не повредит алгоритму выбора узлов для туннелей
onon Хоршо
Vort поискал я по коду onDrop и, похоже, что стримы этот механизм не используют. то есть, пакеты стримов дропаются по тому же принципу, что и транзитные
Vort то есть, для исправления проблемы достаточно в функции bool SSU2Session::SendQueue () поменять m_MsgLocalExpirationTimeout на 4000000
Vort onon: если будет возможность, проверь, поможет ли описанное выше изменение от проблемы с дропами, которую ты обнаружил
orignal не используют так можно же добавить
orignal но смотри в чем проблема
orignal стримы они ведь не сообщения отсылают а блоки чеснока
orignal тогда придется OnDrop привязывать как то к блокам
Vort по вот этой фразе я так понял, что добавлять не надо: "<@onon> Просто смысла нету делать для своих пакетов более жёсткий лимт"
orignal у меня более практический вопрос
orignal отключаем постквантовую криптографию для релиза или нет?
Vort ты же говорил что там что-то с zzz надо дообсуждать
Vort без понятия в каком состоянии этот процесс
Vort и в целом меня эта постквантовость не сильно интересует. не будет крешить, не будет дырок - и ладно
Vort особенно после срача с D-Wave
orignal то то и оно что в недоделанном состояннии
orignal думаю перед релизом отключить
onon На прямом линке, конечно дропов не будет. А по сети будет видно только когда все обновятся.
Vort onon: я имел в виду те синтетические тесты, на которых ты обнаружил проблему
Vort если с ними всё в порядке, то и с реальными сценариями всё должно быть ок
Vort так как изменение там тривиальное
Vort можно, конечно, это изменение как-то аккуратнее оформить, но не хотелось бы опять встрять в долгую дискуссию
Vort самое главное - починить самое главное
onon А дропы можешь сделать рандомными, а не пачкой?
onon Пачкой - это очень плохо
orignal ты про OnDrop для стримов?
orignal там можно приделать его к чесноку и в лямбду передать какие номера пакетов там
orignal например
segfault orignal: что за постквантовое шифрование? есть официальный пропозал?
onon Я про то, что если на транспорте случился затор, то алгоритм ворта дропнет несколько пакетов подряд, которым не повезло.
onon А нужно бы дропать вероятностно в зависимости от перегрузки в данный момент
onon И вообще не очень понятно как это работает с одиночными пакетами. Вот пришёл мне TBM, я запрашиваю через интродьюсера следующий хоп, соединяюсь, и...
orignal сколько дропать?
onon Blinded message
onon Потому что он долго ждал пока я соединюсь?
orignal сколько долго?
onon Ну 500 мсек например
orignal перед соединением там вообще другая очередь
orignal а вот после соединения когда мы делаем splice это интересно
orignal проверяем ли мы время
orignal а вот по уму не надо дропать а высрать все сразу
orignal короче для новой сессии дроп через 4 секунды
orignal поставил новые стримы где радио
onon И что, работает?
orignal проверь сам
segfault onon: можешь хоть ты ответить?
onon На что?
segfault onon: orignal: что за постквантовое шифрование? есть официальный пропозал?
onon Историю чата читай, я так не помню
onon Пропозал есть
segfault onon: был оффлайн. кинь ссылку на i2p-projekt.i2p, если не сложно
orignal нафига дал ссылку?
orignal чтобы он еще и тут лез со своими "суждениями"?
segfault onon: спасибо
Vort "<@onon> Пачкой - это очень плохо" в случае 4-секундного затыка проблема будет совсем не в пачке. это будет скорее значить что узел просто ушел в оффлайн
Vort если такая хрень начнёт происходить, то её надо будет первым делом изучить, а потом придумывать меры противодействия
Vort "<~orignal> проверяем ли мы время" именно поэтому я сделал время постановки в очередь отдельным значением
Vort нет транспорта - нет очереди - нет времени постановки в очередь
onon Ты вставляешь в очередь пакеты пачкой. И всем пишешь одно и то же время, разве нет?
onon И потом ты эту всю пачку дропаешь
orignal нет
orignal ьам время создания I2NP сообщения вроде
Vort он правильно пишет
Vort только вот этого "потом" не должно происходить
Vort не должно быть дропов
Vort не должно быть расжиревания очереди до 4 секунд
Vort это всё лишь защита от атаки
orignal а ну да в момент вставки
Vort а в случае атаки там будет пофиг пачка или не пачка
onon Тогда может хотя бы меньшими пачками вставлять?
onon Если рандом дроп сделать не можешь
Vort в NTCP2 так вообще Terminate. по-моему, проблема поважнее
onon Ну да, там хотя бы RED сделать нужно
Vort дело не в том, могу или не могу, а в том, что нужны качественные тестовые кейсы. чтобы можно было оценить эффект
Vort пока что я видел разрастание очередей только от ухода узлов в оффлайн
Vort если хочется дальше улучшать это место, то я считаю стоит для начала сделать изменение на 4 секунды, а затем наблюдать
Vort если будут заметны переполнения, то надо будет попытаться понять, почему так произошло
onon Потому что ява на дропах работает
onon Она будет растить окно пока дроп не получит
Vort там ещё есть одна особенность - по-хорошему, дроп с головы надо делать не только в момент отправок, но и при постановке в очередь. но это вопрос будущего
onon Каноничный клиент не так страшен, там 128 окно
Vort я как обычно не хотел ничего поломать (а ещё и затормозить), поэтому оставил как было
onon А дрозд там себе 512 вроде поставил
onon ВОт он и будет перегружать
Vort не значит ли это что им тоже надо бы переходить на анализ задержек?
onon Конечно надо бы, но там есть проблемы
Vort ну и нужно экспериментальное подтверждение. может там у них из-за багов никогда не будет такого разжиревания
Vort или всё же где-то стоит защита от такого
onon У явы есть RED
onon У нас нету
onon Для защиты от переполнения ява просто лимитирует количество транспортов
onon Оптимально было бы , конечно, выработать единую стратегию
Vort от переполнения непосредственно на их узле? мы о другом говорим
Vort о том что они транзитом могут у нас раздуть очередь
Vort да вот только на практике я такого не видел. поэтому нужно подтверждение
onon Ну вот я и говорю, что ява сама себя от такого защищает REDом
onon А наш NTCP2 вполне модет перегрузить
Vort может для начала отладим на SSU2 нормально?
onon До стадии "нормально" я думаю ещё далеко
onon Для начало хоть как бы
Vort тут видимо без быстрых стримов просто не будет толком тестовых кейсов
Vort мне не нравится идея писать код вслепую
onon Ну вот и посмотрим, как обновятся все
onon Будем подстраиваться
Vort надо только не забыть 4000000 поставить до релиза
Vort ну и оттестировать. я то думаю, что всё ок будет. но лучше получить подтверждение
Vort ещё это загадочное повреждение кучи. самая противная проблема
Vort я то думал или сразу крешнется или вообще никогда. а оно вон как. через 2 дня
onon Ну я пол года их по всякому гонял с разными параметрами, у меня ни разу не падало
onon Может от системы зависит
Vort запросто. но система или нет, баг есть практически гарантированно
onon Там расчет джиттера накоплением считается
Vort просто некоторые системы могут его игнорировать
onon Он в инт64 сумму добавляет а потом делит на количество
Vort и что? при чём тут куча?
onon Ну это всё что отличает эти стримы от старых
Vort ладно. если больше ни у кого повреждение не вылезет, то и пофиг
Vort может я когда-то потом погоняю с отладкой
onon Ну вон Лось на радио накатил, тестирует
Vort окей
onon У меня пока полтора часа работает
orignal не тестирует
orignal лось занят домашними делами
onon Роутер работает?
onon Не падает?
onon Значит тестирует...
Vort ага. у меня крешнулось само по себе тогда
Vort из нагрузки только этот чат был
Vort ну и транзиты понятное дело
orignal короче дед сказал что они релизят без посткватновой криптографии
Vort не знаю насколько это важно, но решил написать своё наблюдение:
Vort я за последние несколько дней несколько раз перезагрузил свой узел
Vort до перезапусков рейт был около 30%, после одного перезапуска стал около 40% (почти рекорд). ещё один перезапуск - 20%
Vort на атаки не похоже, выглядит как проблемы с балансировкой нагрузки
Vort но непонятно и откуда они берутся и почему они такие масштабные
Vort транзит 1-2 мегабайта/сек как был, так и остался
Vort сегодня вот количество роутеров подозрительно высокое. остальное же примерно как и было
Vort хотя вот сейчас глянул график коннектов и вижу всплеск около 12 ночи по UTC. может, в этом дело
Vort хм. Transit: 125.10 GiB (4080.79 KiB/s)
onon Что, 4 сек поставил?
Vort нет, я на версии 2.56.0-123-gf93b354c
Vort без модификаций
onon Китайцы транк собрали
onon И торренты качают
Vort вот я тоже подумал, что кто-то может тестировать
onon Я вот радио лосиное слушаю
onon Уже 6 часов
onon 900 мегабайт накачал
orignal без обрывов?
onon Ну затыки бывают при переключении маршрута
onon А так непрерывно
onon Уже 7,5 часов
orignal ну неплохо