~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+relaybot
DUHOVKIN_
Guest7184
Most2
Nausicaa
Nikat
Ruskoye_911
Vort
Xeha
anon3
b3t4f4c3
fidoid
karamba_i2p
nemiga
not_bob_afk
onon
plap
poriori
profetikla
qend
segfault
soos
teeth
tetrimer_
uis
un
unlike
user
vade
weko
whothefuckami
weko
Tunnel creation success rate: 17%
weko
Total tunnel creation success rate: 29%
weko
чот подозрительно
weko
Routers: 16101
Vort
в общем, похоже, мои подозрения подтвердились
Vort
сессия с интродьюсером должна жить 80 минут (SSU2_TO_INTRODUCER_SESSION_EXPIRATION), а живёт всего 5 минут (SSU2_TERMINATION_TIMEOUT)
Vort
я уже нашёл, что существует механизм IntroducersUpdateTimer. но, видимо, он поломан
Vort
подозреваю, что там путаница с тем, кто именно должен посылать keepalive, и в итоге не посылает никто
orignal
интересное наблюдение
orignal
я посмотрю
orignal
Vort я правильно понимаю что ты утверждаешь что keepalive не посылается когда надо?
Vort
orignal: ну для начала мне надо знать, кто должен его посылать - чарли (U узел) или боб (интродьюсер)?
orignal
чарли разумеется
Vort
сейчас покажу, что у меня вызвало сомнения
orignal
и он должен посылать только тем кто опубликован
Vort
вот по поводу этого m_IsPublished у меня и сомнения
Vort
m_IsPublished true - это же значит, что мы - Боб и у нас R узел?
Vort
тогда зачем оно проверяется при keepalive
orignal
неее
Vort
у чарли как я понимаю там всегда будет false
orignal
он про другое
orignal
я уже не помню
Vort
bool m_IsPublished; // if we maintain introducers
Vort
we - боб?
orignal
bool m_IsPublished; // if we maintain introducers
orignal
думаю что мы чарли
orignal
почему так называется x3
orignal
скрее всего я перенес код со старого
Vort
i2p::config::GetOption ("ssu2.published", m_IsPublished);
Vort
у чарли что будет в ssu2.published?
orignal
true
orignal
false это когда нет не IP не интродьюсера
orignal
такое тоже допустимо
Vort
хм. значит, надо дальше смотреть
Vort
я ещё сделаю точнее анализ времени жизни сессии
Vort
я рандомно повыбирал - и все закрывались за 5 минут
Vort
то ли чарли, то ли бобом
orignal
так ты просто запиши в лог отсылается keepalive или нет
crystalway
Всем привет. Подскажите как называется http заголовок с b32 адресом клиента. Не могу нагуглить
orignal
X-I2P-DestB32
Vort
orignal: ну это надо U узел завести. да я туда просто брекпоинт воткну
crystalway
orignal спасибо
Vort
не уверен, что у меня правильный U узел выйдет. ещё ни раз не делал такого
orignal
Vort я давно хочу сделать параметр
orignal
forcefirewalled
orignal
может ты лучше его и сделаешь?
orignal
ну то есть если в ssu2 стоит такое то всегда статус Firewalled
Vort
попробую разные варианты. у меня и комп с NAT есть и виртуалка ещё
Vort
если не получится сделать по простому
orignal
такой параметр в принципе нужен
Vort
в ВМ сделал. отправляются KeepAlive. значит, не в этом дело. буду дальше разбираться
Vort
уже нашёл кое что, что мне не нравится: SSU2: Data message payload is too short
Vort
подозреваю проблемы с формированием KeepAlive
Vort
но если хотя бы часть проходит, то должно быть норм
orignal
too short надо смотреть
Vort
вполне может быть в этом дело
orignal
там должно быть минимум 24 байта с заголовком
orignal
возможно
Vort
из 3х интродьюсеров один меня послал
Vort
SSU2: Termination reason=2
orignal
блин как нам не хватает деда
orignal
eSSU2TerminationReasonIdleTimeout = 2
Vort
в общем, было три - два довольно долго продержались, а один довольно быстро дропнул сессию
Vort
надо копать почему keepalive битые создаются
Vort
значения для Data message payload is too short кстати 5 6 и 7 бывают
Vort
вот в такое можно вляпаться:
Vort
[21/Jul/2023:14:32:59 +0300]@694/warn - SSU2: Data message payload is too short 7
Vort
[21/Jul/2023:14:32:59 +0300]@694/debug - SSU2: Sending KeepAlive to introducer Qr4H
Vort
[21/Jul/2023:14:32:59 +0300]@694/warn - SSU2: Data message payload is too short 5
Vort
[21/Jul/2023:14:32:59 +0300]@694/debug - SSU2: Sending KeepAlive to introducer mDpN
Vort
[21/Jul/2023:14:32:59 +0300]@694/warn - SSU2: Data message payload is too short 6
orignal
size_t payloadSize = CreatePaddingBlock (payload, 20, 5);
Vort
minsize = 5
Vort
SSU2Session::SendData
orignal
да но там +3 заголовок
Vort
if (len < 8)
Vort
хм
orignal
я посомотри через полчаса где то
Vort
окей
Vort
в общем, это явно проблемное место
orignal
разумеется
orignal
очевидная бага
orignal
и понятно почему иногда проходит
orignal
там же случайная длина
Vort
ага
orignal
else if (paddingSize + 3 < minSize) paddingSize = minSize - 3;
orignal
тьфу
orignal
счас починю
orignal
все
orignal
поправил
Vort
буду скоро тестировать
Vort
но мне кое что помимо этого ещё не понравилось
Vort
слишком быстро один из интродьюсеров меня кикнул
Vort
за 2 минуты. вроде же 5 минут таймаут
Vort
может быть ещё какая-то бага
orignal
const int SSU2_TERMINATION_TIMEOUT = 330; // 5.5 minutes
Vort
ну да, а получилось вот так:
Vort
[21/Jul/2023:14:24:46 +0300]@694/debug - SSU2: Session with hcsx was established
Vort
[21/Jul/2023:14:24:59 +0300]@694/debug - SSU2: Introducer added 2806378117 at hcsx
Vort
[21/Jul/2023:14:25:29 +0300]@694/debug - SSU2: Sending KeepAlive to introducer hcsx
Vort
[21/Jul/2023:14:25:59 +0300]@694/debug - SSU2: Sending KeepAlive to introducer hcsx
Vort
[21/Jul/2023:14:26:29 +0300]@694/debug - SSU2: Sending KeepAlive to introducer hcsx
Vort
[21/Jul/2023:14:26:59 +0300]@694/debug - SSU2: Sending KeepAlive to introducer hcsx
Vort
[21/Jul/2023:14:26:59 +0300]@694/debug - SSU2: Session with hcsx was terminated
orignal
а сообщение пришло?
Vort
hcsx - i2pd, свежей версии
orignal
ну termination
Vort
аж два
orignal
и какой код?
Vort
2
Vort
по логике он вообще даже без keepalive не должен был так рано кикнуть
orignal
это конечно странно
orignal
естественно
Vort
угу. может, правда, то не его код 2. в логах же не пишется abbr
orignal
надо посмотреть в каком случае он еще отсылает
Vort
приходится догадываться
Vort
а я подобавлял не везде
Vort
может, это наш "2" ?
Vort
вот тоже про логи - не понятно, где исходящее, а где - входящее
orignal
ну не подумал
Vort
в общем, пока что просто проверю, как будут слаться keepalive со свежим исправлением
Vort
и сколько продержатся сессии
Vort
опять сессия за 3 минуты сдохла. но кода на этот раз я не увидел вообще
Vort
ладно. послежу, сколько остальные 2 проживут
orignal
надо смотреть
Vort
вторая сессия прожила 5 минут и сдохла с кодом 0
Vort
в общем, 4 сессии отвалились по непонятным причинам, а 3 оставшиеся уже живы около 10 минут
Vort
прожили больше таймаута в 5 минут - уже хорошо
Vort
если 80 минут проживут - будет ещё лучше :)
orignal
ну смотреть надо почему рано закрываются
Vort
опять вижу дважды SSU2: Termination reason=2. и подозрительно близко с отсылке keepalive
Vort
пример куска лога (с моим дополнительным логированием)
Vort
SSU2: Session with iKCO was terminated
Vort
сессия 17 минут прожила
orignal
возможно keepalive не дошел
orignal
надо посмотреть в каком случае отсылается 2
Vort
работает ли для keepalive перепосылка в случае потери пакета?
Vort
"<~orignal> возможно keepalive не дошел" если перепосылки нету, то вполне вероятно. у меня UDP перегружен сейчас
Vort
хотя это же 10 раз подряд должно не дойти
Vort
ну и остаётся вопрос, из-за чего может дропаться сессия когда 5 минут ещё не прошло
Vort
я наверно много путался из-за того, что в логах нет отметки, для какой именно сессии обработка данных идёт
Vort
в общем, думаю, надо, чтобы ещё кто-то потестировал последний коммит
Vort
кто тут в чате держит U узел?
Vort
weko: у тебя же U узел был вроде? поможешь с тестированием?
orignal
перепосылки нет
Vort
ок
orignal
можно добавить
Vort
надо для начала узнать, какой эффект от последнего коммита
Vort
если он допустим 90% проблем решит, то, вероятно, этого и достаточно
Vort
(90% проблем с потерей сессии к интродьюсеру имею в виду)
orignal
вероятность 3/15
orignal
что пападает в эту ситуацию
Vort
и это надо 10 раз подряд чтобы не отправилось? ну примерно. каждые 30 сек на протяжении 5 минут
Vort
я понимаю, что UDP ненадёжен, но не настолько же. или настолько...
orignal
ну x3
orignal
вот перепосылку можно сделать
Vort
да оно то можно. но желательно вначале подтвердить, что проблема в потерях
Vort
у меня в этом большие сомнения
Vort
похоже, что есть ещё баги
orignal
возможно
Vort
добавил в логи abbr и понял, что гадать по времени прихода пакета было бессмысленно - блоки идут в лог вперемешку
Vort
запустил опять XR узел, будут смотреть с позиции "Боба"
Vort
буду*
weko
[13:32:36] <Vort> weko: у тебя же U узел был вроде? поможешь с тестированием?
weko
Ну могу собрать с термукса наверное
orignal
Vort проще добавить тот параметр который я сказал
Vort
weko: надо глянуть, повлияет ли последний коммит на количество тразита через U узел
Vort
так я специально XR запустил. хочу убедиться, что keepalive от других узлов не приходит
weko
Там дефолтные настройки. Сейчас надо будет конфигурировать
Vort
так если там U, то зачем ещё что-то нужно?
Vort
или там ещё и L ?
weko
orignal: помню недавно что-то мы про keep alive обсужади
weko
Так говорю же с термукса сборка
weko
Установщика нету
weko
Кстати хорошая идея добавить в термук пакет i2pd
weko
А стоп он там есть
weko
:))
Vort
похоже, я опять с анализом ошибся. со стороны Боба сессии с тегом дропаются просто потому, что не каждая сессия с тегом выбирается в роли интродьюсера
Vort
так что придётся смотреть в логи внимательнее
Vort
чтобы запросы на интродьюс были
Vort
по результатам неверного анализа нашли реальный баг. хехе
weko
Я уже собираю
Vort
окей
Vort
weko: в общем, суть бага в том, что некоторые keepalive к интродьюсерам не отправлялись из-за того, что создавались неверного размера
weko
Это я прочитал
Vort
вроде бы как бы их всё равно отправляется много и должно хватать. но стоит проверить - вдруг исправление даст положительный эффект
Vort
словил (в роли Боба) одно взаимодействие с Чарли (Джава). склеивал логи по кусочкам, так что мог где-то ошибиться. но всё же:
Vort
первое наблюдение - похоже, у java keepalive реже (2 минуты что ли?)
Vort
второе наблюдение - он сам отвалился первым. код 2
Vort
он же только что keepalive присылал. с чего бы это код 2? может, у java по-другому критерию код 2 отсылается?
Vort
подожду, может ещё сессию с i2pd выловлю
orignal
вот тут бы и нужен дед
orignal
чтобы разъяснил
Vort
да я могу полезть в код java. но не сейчас
orignal
да не надо
Vort
вот, ещё один не найденный тег словился. рассмотрю, может i2pd попадётся
Vort
таки да, i2pd. разбираюсь
orignal
понимаешь с этими интродьюсерами может быть куча багов
orignal
потому что код был фактически позимнствован с SSU
orignal
а там вообше море багов было
Vort
ну вот один выловили, может ещё выловим
orignal
не может а точно
orignal
там просто море багов
orignal
и да надо сделать перепосылку
Vort
я вот как раз смотрю одно общение с i2pd узлом. по нему будет видно, теряются ли пакеты
Vort
эх, не пойму я ничего. paste.i2pd.xyz/?f939abf911251d0e#4z2Gx7KHqr5HYyKFV1JPpcUA3pU1GHK3bjGrTSpHu13e
Vort
это узел с довольно старой версией (0.9.56). может от этого странности
Vort
вот те Block type 12 в старой версии - это случаем не перепосылка была? (плохо понимаю, но на всякий случай спрашиваю)
orignal
12 это Ack
orignal
подтвержение получения
Vort
перепосылка - это другое?
Vort
ладно, наверно сам когда-нибудь почитаю
Vort
ещё один пример с java: paste.i2pd.xyz/?e83c5c044d48a21f#3peKKsLT8X3Kd2R84Sr1k4f4asNyuPjGA3FXo7eAmRPA
Vort
видимо, E47H не дождался ответа от моего узла
Vort
а пока ждал, то даже пингов не слал
orignal
перепосылка это просто сообщение и все
Vort
прошу прощения за тупые вопросы :/ I2NP сообщение? пустышка там есть - eI2NPDummyMsg? и в отличие от блока паддинга узел будет I2NP сообщение слать пока не отошлётся?
orignal
неее
orignal
есть блок Data
orignal
пардон сообщение
Vort
eI2NPTunnelData
Vort
а нет
Vort
eI2NPData
orignal
причем тут SSU2?
orignal
в SSU2 есть сообщение Data
orignal
в нем есть всякие полезные блоки типа I2NP и фрагменты
Vort
ага, вижу. eSSU2Data
orignal
вот иногда их перепосылают
orignal
новым сообщением Data
orignal
смысл чтобы все сообщения дошли
orignal
если на KeepAlive не пришел Ack то мы тоже можем послать новое и все
Vort
а отправки не логируются похоже...
orignal
не помню
Vort
речь об Ack как типе блока? или ещё какой-то Ack есть?
Vort
eSSU2BlkAck
orignal
Ack всего один
orignal
но в нем куча всего может приходить
Vort
KeepAlive - это eSSU2BlkPadding, верно? внутри Data ?
Vort
и по приходу этого BlkPadding мой узел должен ответить BlkAck ?
orignal
да это просто псутое сообщение
orignal
вот насчет Ack не уверен
orignal
может и нет
orignal
надо смотреть по коду
Vort
просто если для них не предусмотрен Ack, то и ждать его нет смысла. и на его основе не сделаешь перепосылку
Vort
да и вообще мне кажется, что дело не в потерях пакетов. 10 штук потерять подряд - это надо очень постараться
Vort
скорее всего какие-то баги. вот как в тех логах, которые я недавно скидывал - keepalive просто не отсылаются. какой-то затык происходит
Vort
сессия же используется не только для пробива портов. что-то пошло не так с другими задачами - и сессия рвётся
orignal
так я не помню
orignal
ты же посмотрел что отсылается
Vort
по-моему сейчас логируются только "избранные" отсылки. а вот приёмы логируются почти все
Vort
так что я пока что видел только половину картины
Vort
нормально пинги приходят: paste.i2pd.xyz/?56873d56df81252e#96ibJxLYLb1kaUEymhXZLqrUf315MiFrsqFqfvEa2kVD
Vort
[21/Jul/2023:19:40:26 +0300]@901/info - SSU2: Packet was not Acked after 6 attempts. Terminate session
Vort
в общем, я считаю, что спешить с перепосылкой не стоит
Vort
стоит набрать данных о тех проблемах, которые приводят к разрыву сессий
Vort
на всякий случай обобщу: проблема такова: сессии к интродьюсерам рвутся чаще, чем этого бы хотелось
Vort
один из потенциальных источников такой проблемы устранили, но их явно намного больше
Vort
вполне даже может быть, что проблемы не особо специфичны для интродьюсеров. и что с остальными сессиями тоже беда
Vort
но от разрыва остальных сессий особо проблем нету - они и так рвутся по неактивности
Vort
а вот для сессий к интродьюсерам качество должно быть повыше
orignal
возможно
weko
Transit Tunnels: 13
weko
Полтора часа аптайм
orignal
если U то нормально
weko
Обычно меньше как мне кажется
weko
Бывают туннели где я OBEP... И вот один с обилием трафика (уже почти 4 мб), и бывают даже IBGW
weko
Если я правильно помню обозначение стрелочек
weko
Кто такие может строить?
weko
Transit Tunnels: 55
weko
NTCP2 / SSU2 640/720
weko
WTF
weko
Откуда то статус ок
weko
А блять
weko
UPnP может?
orignal
если он есть то да
weko
Я хз, походу есть
weko
Но сработал не сразу
weko
Запустил всё по новой
Vort
"если U то нормально" - не нормально. но объяснимо. если сессии с интродьюсерами 5-10 минут живут
Vort
но единой причины для хреновой живучести SSU2, похоже, нету
Vort
там небось гора мелких багов, каждый из которых по чуть-чуть, но ухудшает ситуацию
weko
Transit Tunnels: 33
weko
43 минуты
Vort
в состоянии U ?
weko
да
weko
при чём RI новый
Vort
только RI ? или и ключи новые?
weko
ну RouterIdent
weko
значит и ключи
Vort
не значит
weko
RI то постоянно меняется так как U
Vort
ключи в файлах router.keys ntcp2.keys ssu2.keys
weko
RI на основе ключей роутера образуется
Vort
да
weko
а без них с ним не связаться
weko
ну точнее можно но не туннель уж точно
weko
но в любом случае всё новое
Vort
то есть поудалял keys и они создались свежие ?
weko
нет вообще директория новая
Vort
ок, понял
Vort
я опять запустил U узел в виртуалке и заметил странное явление
Vort
на почти каждый KeepAlive интродьюсеры отвечали Path challenge
Vort
почитал о том, что это; проверил через Wireshark - и таки да, за 30 секунд успевает поменяться порт
Vort
не знаю, важно ли это - на всякий случай рассказал
Vort
а вот это уже наверно важно. послал меня очередной интродьюсер. и я кажется понял, почему. моему узлу не понравился короткий Path challenge, а интродьюсер обиделся, что мой узел не ответил
Vort
[22/Jul/2023:00:23:11 +0300]@379/debug - SSU2: Sending KeepAlive to introducer xAzT
Vort
[22/Jul/2023:00:23:11 +0300]@379/debug - SSU2 (xAzT): Block type 18 of size 3
Vort
[22/Jul/2023:00:23:11 +0300]@379/debug - SSU2: Path challenge
Vort
[22/Jul/2023:00:23:11 +0300]@379/warn - SSU2: Incorrect data size for path response 3
Vort
xAzT - i2pd версии 0.9.58
orignal
да path challenge будет если меняется
orignal
тоже посмотрю как мы отвечаем на path reposnse
orignal
его вообще никто не проверял