IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2024/09/10
~R4SAS
~orignal
~villain
@onon
&N00B
+Xeha
+r00tobo
+relaybot
+whothefuckami
AreEnn
HackerMan
KabaOS
Leastr
Most2
Nausicaa
Vort
WayBest
`
acetone
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob
osoznayka
poriori
profetikla
segfault
soos
teeth
tolik
un
unwr
weko
orignal сделал
orignal но как у тебя заставить считать RTT не знаю
orignal посылается в SendQuickAck если ничего долго не посылалось
onon1 Посмотрю
onon1 requestImmediateAck = m_LastSendTime && ts > m_LastSendTime + REQUEST_IMMEDIATE_ACK_INTERVAL && ts > m_LastSendTime + REQUEST_IMMEDIATE_ACK_INTERVAL + m_LocalDestination.GetRandom () % REQUEST_IMMEDIATE_ACK_INTERVAL_VARIANCE;
onon1 Две проверки это чтобы рандом лишний раз не дёргать?
orignal потому что это будет случаться редко
onon1 Угу
orignal как запустить вычисление RTT я не знаю
onon1 Сейчас подумаю, как это можно сделать
orignal проверил. запросы отправляются и аки на них приходят
orignal когда радио слушаю
onon1 А я что-то сразу подумал, что он попадёт сюда:
onon1 if (lastReceivedSeqn < 0)
onon1 LogPrint (eLogError, "Streaming: No packets have been received yet");
onon1 return;
orignal нет смотри что
orignal я слушаю радио
orignal оттуда приходят пакеты
orignal я раз в 10 секунд вместе с отправкой акка отправляю запрос
onon1 Тут про то, сколько ты туда отправил пакетов
orignal мне в ответ прилетает акк
onon1 Значит SYN считается
orignal то есть все это работает
orignal осталось замерять RTT
onon1 Да, мы уже работаем над этим
orignal htobuf32 (packet + size, 0); // this is plain Ack message
orignal size += 4; // sequenceNum
orignal вот тут надо номер пакета ставить
orignal а не 0
orignal когда запрашивае
onon1 Да мы просто в void Stream::ProcessAck можем проверять packet->GetAckThrough () == 0
onon1 Ещё bool добавить, что мы что-то отправили
onon1 и проверять если bool==true && packet->GetAckThrough () == 0
onon1 Пока думаю так
onon1 Но это будет работать только если ничего не отправляли
orignal так смотри мы туда номер пакета ставим
orignal запоминаем его
onon1 А можно подумать ещё и сделать если долго ничего не слали просто
orignal как только на него пришел ack это и будет RTT
onon1 Надо ещё подумать, время ещё есть
onon Что-то мне кажется что вот эта штука не работает:
onon if (!packet->IsNoAck ()) // ack received
onon ProcessAck (packet);
onon Как будто он туда все пакеты пихает
orignal почему?
orignal это же просто флаг
orignal который толдко в SYN былвает
orignal еще вариает есть
orignal мы запрашиваем ack
orignal если приходит без номера пакета то считаем его ответа
orignal *ответом
orignal if (!receivedSeqn && !packet->GetFlags ())
orignal // plain ack
orignal LogPrint (eLogDebug, "Streaming: Plain ACK received");
orignal вот здесь надо замерять
orignal полный порядок приходит точно в ту же секунду
onon Он на каждый полученный пакет вызывает ProcessAck (packet);
onon Разве так должно быть?
orignal потому что реально в каждом пакете идет акк
orignal а вот акк без пакета это как я показал вышел
onon Угу
orignal когда мы его запрашиваем мы сразу такой и получим и точное RTT узнаем
onon Сервер иногда сам делает SendQuickAck ()
onon Без нашего запроса
orignal ну может совпасть
orignal но редко
onon Ну как сказать, та ситуация, когда он начинает слать каждый пакет в новый туннель как оказалось совсем не редкая
onon И там же он делает void Stream::SendUpdatedLeaseSet ()
onon И SendQuickAck ();
orignal ну и что случится?
onon Будет маленький RTT, будет слать ответ на каждый пакет
orignal ну через 10 секунд исправится
onon Эта ситуация может длиться минуту и больше
onon Он как будто в цикл попадает
onon Но бывает и быстро выходит
onon Разобраться бы с этим
orignal не праивльно это когда шлется ack на кажлый пакет
onon Ну там же время "накопления" акков рассчитывается как RTT/10
onon Если это будут единичные "случайные SendQuickAck ()" то можно просто сглаживать значения, и не будет влиять, а пока они шлются потоком с сервера.
orignal я как мыслю
orignal когда у нас поток в одну сторону с той стороны они вообще не должны приходить
orignal или приходить крайне редко
onon Я тоже так считаю, но он зачем-то делает SendQuickAck ();
orignal так надо понять зачем и починить
onon Залогируй у себя SendQuickAck (); на сервере
orignal сделаю
orignal то то и оно что я не увидел лишних
orignal приходили ровно те которые запрашивались
onon У меня он шлёт SendQuickAck () сразу после void Stream::UpdateCurrentRemoteLease (bool expired)
onon Иногда шлёт один SendQuickAck (), иногда два
onon А иногда входит в цикл
onon И начинает слать на каждый пакет
orignal вот с циклом надо разобраться почему
onon Я пока другим занимаюсь, тогда отложим этот вопрос.
orignal ну не торопись пока
onon А, я понял. if (receivedSeqn <= m_LastReceivedSequenceNumber)
onon UpdateCurrentRemoteLease ();
orignal потому что мы думаем что от нас аки не доходят
onon Это не про цикл, это про то что нужно добавить проверку на ноль
onon А то сервер воспринимает твои аки как сигнал для смены туннеля
onon Если я правильно понял
orignal нихуя
orignal у меня же нулевой приходит
orignal у нас же проверкуа на ноль перед этим идет
orignal мы дотуда просто не дойдем
onon У меня лог Duplicate message 0 on sSID=xxxxxx
onon На сервере
orignal надо понять где пролазит
onon if (!receivedSeqn && !packet->GetFlags ())
onon Значит packet->GetFlags
orignal именно так
orignal надо дальше проверку значит
orignal ладно завтра уже
onon Угу
orignal да неправильно с нулем
onon Давай завтра уже
orignal поправил
onon И похоже что этот "цикл" это просто реакция на DELAY_CHOKING
orignal вполне может быть
onon Клиент на каждый акк шлёт DELAY_CHOKING и мы обрабатываем это как дубль...
orignal там окно становится 1
onon Да, и поэтому так долго не выходит из "цикла"
orignal клиент на акк вообще не должен отвечать
onon Ладно, спать уже нужно идти
orignal завтра проверишь
orignal вроде я все починил
orignal кдиент ставит DELAY_CHOKING когда наков слишком много
onon Я в курсе
Vort теперь пинги через стримы раз в ~10 сек идти должны что ли?
Vort смотрю вот на коннект с этим IRC сервером и ничего подобного не наблюдаю. активность где-то раз в минуту
Vort хотя, кажется, понял. пинги только при ассиметричной активности. если активности нет вообще, то и пингов нету
flumental в ирке пинги по протоколу положены, это не по инициативе i2pd
orignal на этом серервер еше нет кода для ответа
orignal пинги не отправляются отдельно а вместе с акками
Vort так и задумано? то есть, нет активности - пофиг, какой RTT ?
Vort (по другой теме) странную активность на ygg узле заметил. 5 мегов/сек транзита прёт уже довольно долго
orignal ну да если нет активности то какая разница?
Vort ок
Vort (про ygg) 17 гигов кто-то протащил. примерно за час
orignal с ygg все потому что я снарк гоняю на узле через ygg ))
orignal и видимо не олин я
Vort мне это больше на атаку кажется похожим
Vort но посмотрим
Vort пока жду
onon Что-то у меня ничего не работает
onon Сервер не делает SendQuickAck ()
Vort транзит ygg`а прёт кстати между узлом acetone и узлом wipedlife
Vort ygg - это не i2p, тут при желании источник найти можно )
onon Лось, дай мне банхаммер
orignal onon почему не делает?
orignal у меня все делает
onon Странно
onon Вроде последний код накатил
onon Буду разбираться
orignal ты про ответ на запрос или что?
onon Клиент шлёт запросы, но сервер не отвечает
orignal счас проверим
orignal да ты прав
onon Вчера это работало, но через другой механизм
onon А через флаги что-то не так
orignal починю
onon Ок
orignal Streaming: Invalid option size 512 Discarded
orignal вот в чем проблема
orignal похоже наткнулись на более крупную багу
onon Так это deprecated или просто у нас неправильно обрабатывается?
orignal мы там неправильно поле option size формируем
orignal наоборот
Vort выглядит похоже на баг с BE / LE несоответствием
orignal Vort не похоже
orignal ощущеие что сдвиг на 1 байт где то
Vort а, ну или так
orignal сейчас мы стали в quick ack использовать и вот
orignal думаю
orignal причем ошибка это при формировании пакета я проверил
orignal разберусь
orignal все нашел багу
Vort orignal: можешь напомнить условия при которых "клоны" (MogB, DtQs) в бан попадают? у меня довольно много валится в лог сейчас сообщний "Host mismatch" с ними. вот и думаю - или я раньше не обращал внимания или что-то поменялось в коде. ты же что-то с NTCP2
Vort переделывал
orignal я в NTCP2 просто сделал то же что в SSU2
orignal разумеется будет валиться больше
Vort а, окей
orignal клоны попадают в бан когда в нетдб свежее чем приходит в SessionConfirmed
orignal onon все забирай
orignal починил
onon Сча посмотрим
orignal у нас получается и choking не работал
onon А ловить его в таком случае где,
onon if (flags)
onon // plain ack with options
onon ProcessOptions (flags, packet);
onon else
onon // plain ack
onon LogPrint (eLogDebug, "Streaming: Plain ACK received");
onon В смысле ответ
orignal в ветке plain ack
onon ок
orignal там надо проверить что запрашивали ли мы
orignal если запрашивали взять текущее время измерить rtt и что то с ним потом сделать
onon угу
orignal вот что я не знаю
orignal иначе бы сделал ))
onon Сейчас что-нибудь придумаем
orignal я не знаю твой алгоритм как ты RTT вычисляешь
Vort какой смысл с забаненными (IsDuplicated) роутерами вообще какое-то дело иметь?
Vort не пойму, почему сразу функция на выход не идёт как такое попадается
Vort требуется каждый раз чтобы сдвиг времени был
Vort в итоге когда изредка сдвига нету, то прорывается мусор
orignal надо глянуть
orignal но я думаю чтобы избежать ошибочного срабаьывания
orignal profile = i2p::data::GetRouterProfile (ri1->GetIdentHash ()); // retrieve profile
orignal if (profile && profile->IsDuplicated ())
orignal return;
orignal ты про это?
orignal скорее всего просто для усокрения
orignal чтобы в нормальной ситуации профиль не дергать
orignal и да надо завершать сесииб там
orignal ну и потом в общем то пусть говно пролазит главное чтобы тоннели через них не строить
orignal а так они ничем не мешают
Vort в лог срут. может спустить Host mismatch с eLogError на уровень пониже?
orignal можно
orignal поправлю
orignal ну и сделаю там где надо Terminate
onon1 Нет, смена лиза на каждый пакет никуда не делась...
orignal это другая пробелема
orignal ответы нормально приходят?
onon1 Да
onon1 И RTT считается
orignal давай код тогда
orignal с RTT
orignal потмоу что это реально проблема
onon1 Ок, сейчас
orignal надеюсь с последним моим коммитом
onon1 Уговорил, скачаю последний.
orignal чтобы твои изменения были от него
onon1 Там ещё можно чуть лучше сделать, но это потом
orignal счас закоммичу
onon1 Явароутер тоже отвечает, пересчитывается RTT
orignal что то плохо работает
orignal как только RTT становится нормальным сразу лагает
onon1 Что значит лагает
onon1 На каком туннеле, какая скорость
onon1 Пинг какой
orignal пинг в районе 900
orignal а счас вроде нормально
orignal короче суть была
orignal когда пинг 3 тыс то идет
orignal а как RTT падает до 900 начинает лагать
orignal вот счас RTT 600 и все рабоатет
onon1 А на том сервере ты обновил?
onon1 Потому что он там может туннели меняет
orignal может просто тоннель неудачный
onon1 На каждый твой запрс
orignal утром сегодня
onon1 Ну у меня вначале секунд 10 запинался, теперь идёт норм
orignal а без твоего измененяи вообще не запинался
orignal как может влияет RTT на лаги?
onon1 Если сразу посчитался неправильно, то будет задерживать акки
onon1 На сервере будет срабатывать RTO и будет туннели менять
orignal так смотри что получаетчя наоброт
orignal когда сразу большой то все идет без запинки
orignal пока он не пересчитается до нормального и тут же начинает запинаться
onon1 Так быть не должно
onon1 Там есть некоторые проблемы у этого алгоритма, что он медленно разгоняется
orignal счас проверю снова
onon1 Если вначале дроп поймал
onon1 Вот сейчас сразу без запинок пошло
orignal проверим
onon1 Скоро доделаю новый алгоритм, должно стать немного лучше.
orignal все в порядке
orignal это у меня похоже были тоннели глючный
orignal счас закоммичу
orignal закоммитил
orignal Vort я поправил
Vort так в SSU2 то же самое
Vort или там надо?
orignal там еще не делал
orignal если ты про уровень
orignal в NTCP2 неправильно завершалось
Vort про уровень
orignal изменб в SSU2 при следующем измнениии там
orignal все равно собираюст там чинить пир тест
Vort потестировал немного радио, на 3 хопах. поначалу пинг прыгал 1000-2000, сейчас где-то на 600-700 стабилизировался
Vort небось поначалу медленные туннели "отсеивались"
orignal вопрос насколько стабильно играет
Vort ну и буфер "нажрался"
Vort ты же понимаешь, как буферизация обычно работает? каждое "заикание" в начале увеличивает задержку буфера. если в среднем туннель трафик выдерживает, то "стабильно" будет всегда
orignal естественно
Vort нажравшийся буфер только полный обрыв может опустошить
orignal но у вот у меня регулярно буфер съедался по мере пересчета RTT
Vort может у тебя клиент имеет лимит на лаг
Vort у меня скорее всего не имеет
orignal почему? может приходить медленнее
orignal у меня файрфокс
orignal пойду пересоберусь
hypn <+sha512sum> pastebin.com/1xyiDVus В обще вот
hypn <hypn> orignal: лови bt выше
onon Дайте мне банхаммер
sha512sum ~orignal, что за хрень? Почему вы даже не проверяете варнинги компиляторов? Там они кучу варнингов везде насовали при сборке
sha512sum libi2pd/RouterInfo.h и у RounterInfo дефолтное всё копирующее удалено по умолчанию.
sha512sum А там default стоит
orignal onon да зачем?
orignal перебесится и престанет
onon Ну ты видел, что он устраивает?
orignal да он все время устраивает
onon Ну все разбегутся
orignal да нет это годами тут
onon Смотри сам