~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest29533
HackerMan
Most2
Nausicaa
Ruskoye_911
Vort
`
acetone_
anon3
b3t4f4c3
fidoid_
flumental
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
tensor
un
weko_
whothefuckami
orignal
думаю пришло время для андроида по умолчанию публиковать D
Vort
orignal: теперь keepalive вообще не шлются. так как попали в else ветку: github.com/PurpleI2P/i2pd/blob/4aa631c33f7db3e75979a3e21da3597ebd83bc6b/libi2pd/SSU2.cpp#L1002
Vort
предпоследний коммит исправить будет, скорее всего, не сложно, поэтому сразу напишу о следующей проблеме:
Vort
исправление сессий к интродьюсерам - это только половина решения проблем с NAT
Vort
если теперь установка связи с U узлом будет работать нормально, то надо бы чтобы и данные передавались надёжно
Vort
не хотелось бы получить увеличение количества сессий к U узлам только чтобы затем обнаружить, что эти сессии ломаются через 20 секунд неактивности
Vort
однако полноценное исрпавление работы с NAT, на мой взгляд, связано с кое какой проблемой:
Vort
для сессий к интродьюсерам KeepAlive выполняет двойную функцию: 1. спасает сессию от закрытия по IdleTimeout. 2. спасает порт на NAT устройстве от удаления
Vort
проблема же в том, что для всех остальных сессий с U узлом спасать порт от удаления нужно, а вот спасать сессию от закрытия по IdleTimeout - не нужно
Vort
как разделить эти функции - не знаю. хотелось бы надеяться, что для этого не придётся создавать SSU3
orignal
да согласен счас поправлю keep alive'
orignal
поправил
Vort
orignal: остались у меня ещё некоторые сомнения по этому коду. или я что-то не понимаю, или баг
orignal
ну объясни
orignal
там эже 3 строчки ))
Vort
из RI интродьюсер удаляет какая строчка? вот эта? i2p::context.RemoveSSU2Introducer (it, v4);
orignal
да
orignal
если сессия протухла
Vort
то есть, это примерно после 60 минут должно происходить?
orignal
ой да ты прав
orignal
счас
Vort
я запутался :(
orignal
да баг это да
orignal
через 60 минут надо удалять
Vort
а, ну да, критерий протухания теперь не годится для удаления из RI
orignal
но в списке сидит до 80
Vort
(я пока что отойду)
orignal
поправил
Vort
поставил последний коммит тестироваться в виртуалке
orignal
я тоже
orignal
у меня винда восьмерка там
Vort
теперь по поводу проблемы номер два. я думаю, что нужен ещё один тип KeepAlive, отправка и приём которого _не_ обновляет m_LastActivityTimestamp
Vort
если есть варианты решения проблемы без такого изменения, интересно о них узнать
orignal
а почему без обновления?
orignal
я понимаю ты пытаешься отловить смену порту
orignal
*порта
Vort
"<~orignal> а почему без обновления?" чтобы обычные (не интродьюсерные) сессии имели возможность отвалиться по неактивности. при постоянной посылке KeepAlive #2
Vort
для интродьюсеров же ничего менять не надо - туда должны идти KeepAlive #1 (те, что сейчас)
orignal
а ну это можно
orignal
но я думаю надо делать это только если мы firewalled
orignal
для OK смена порта не происходит
Vort
"<~orignal> но я думаю надо делать это только если мы firewalled" если хоть один U узел в сессии есть, да
Vort
вот только не знаю, кто должен отправлять KeepAlive #2 если оба узла U
Vort
можно конечно в две стороны, но как-то неаккуратно
Vort
ну точнее U узел должен всегда отправлять (если я правильно понимаю механизм)
Vort
даже если сессия была входящая
Vort
если R и R - никто не отправяет. если U и R (или R и U) - отправляет U. если U и U - или кто-то один отправляет или оба (хз как лучше)
Vort
меня больше беспокоит, как это вписать в уже существующий SSU2
Vort
если вписать можно, то остальное уже детали
orignal
у тебя вопрос как узнать как они соединяеются?
Vort
у меня два вопроса - 1. как конкретно сделать необновляющий активность KeepAlive #2
Vort
2. если оба узла U, то надо ли слать KeepAlive #2 в оба направления или только одного достаточно (и какого)
orignal
ну 1 довольно легко
orignal
сохраняешь старое значение отправляешь возвращешь старое на место
orignal
оба надо потому что оба могут порт сменить
Vort
а разве NAT грохнет порт если чисто входящие будут?
Vort
там разве что вопрос потерь пакетов будет правда
Vort
исходящие никуда не денутся (не потеряются)
Vort
а вот входящий может не дойти - тогда проблемка
Vort
в общем, два направления - надёжнее
Vort
можно сделать пока что так, а потом подумать, можно ли "соптимизировать" одно направление
Vort
ну это я про вариант U - U конечно же говорю
Vort
"<~orignal> сохраняешь старое значение отправляешь возвращешь старое на место" а как различать KeepAlive первого типа и второго? первый же тоже очень важен, просто поменять поведение первого нельзя
orignal
параметр сделать
Vort
куда? сейчас же шлётся eSSU2BlkPadding. разве ему можно что-то ещё прикрутить? или речь о другом уровне?
orignal
в метод SendKeepAlive
orignal
сохраняешь m_LastActivityTimestamp в начале
orignal
и возращаешь обртано после отправки
orignal
он protected
Vort
это только отправка
Vort
на стороне приёма тоже надо делать "необновление"
orignal
а с получением никак не различить
orignal
только если отдельный блок вводить
Vort
хотя если U будет рвать (типа он порядочный), то может и сойдёт
Vort
как промежуточный вариант нормально
Vort
а вообще новый блок или новое что-то_ещё - да, надо
Vort
так это довольно лёгкое исправление выходит
Vort
пусть и с компромиссами
orignal
именно так достаточно ввести новый блок KeepAlive
orignal
в который еще и некоторые данные можно впихнуть
Vort
ну как я понял, сейчас можно обойтись без ввода нового блока. а в будущем... будет видно
orignal
проблема только в том что согласовать с idk это будет невозможно
Vort
надо "оживить" U узлы для начала. а потом можно "полировать" решение
orignal
он будет беконечно сопли жевать
orignal
час прошел все пашет
Vort
ага, вижу 6 keeaplive шлётся за раз
Vort
теперь осталось ещё отметку в 80 минут пройти без багов
orignal
я до этого не дошел ))
Vort
подозреваю, что таки баг :(
Vort
интродьюсеры, выбранные на 60й минуте, на 80й минуте куда-то потерялись
Vort
и выбрались новые
Vort
хм. мой узел с кодом 2 закрыл к ним соединения
Vort
ага. потому что до этого были выбраны другие интродьюсеры
Vort
странно
orignal
но потом появились?
orignal
просиходит ротация
Vort
попробую объяснить. приблизительно вот так получилось:
Vort
первая партия интродьюсеров проработала с 0 до 80 секунд
Vort
вторая партия - с 60 до 80 секунд
Vort
третья начала работу с 80 секунд
Vort
я ожидал, что будут перекрывающиеся диапазоны по 80 сек
Vort
а получился один 80, а один, короткий, 20
Vort
ой, не секунд, минут
Vort
в общем, не понятно, почему вторая партия выкинулась раньше времени
Vort
хотя кажется догадываюсь
Vort
отсчёт 80 минут идёт с создания сессии, а не с выбора сессии интродьюсером
Vort
я правда так и не понял, какая разница, насколько старая сессия
orignal
надо посмотерть в код
Vort
то есть, как я понимаю, надо хранить не только время создания сессии, но и время выбора её интродьюсером
orignal
не уверен
Vort
и отсчитывать 60 и 80 минут от времени выбора
orignal
возможно что да
orignal
или просто как я там кое где делаю менять время создания
weko
Зачем вообще эти 20 минут
Vort
weko: чтобы дать время информации расползтись по сети
weko
Так пишется ли в RI время истечения интродьюсера?
orignal
да
orignal
iExp
Vort
пишется +80
Vort
а меняется интродьюсер в RI через 60
weko
Так а зачем тогда эти 20 минут? Они бесполезны
Vort
остальные 20 минут получается двойной набор интродьюсеров
Vort
старые доделывают свою работу, но уже подключены и новые
weko
[15:12:39] <Vort> остальные 20 минут получается двойной набор интродьюсеров
weko
Проще просто количество увеличить
weko
И/или длительность
Vort
нет, надо плавно вывести из работы интродьюсеры, заканчивающие свой срок
weko
Каждый пир должен сам видеть что иетродьюсер сдох
weko
Потому что он знает время своё и время истечения
Vort
видимо, это нужно для того, чтобы не забивать место в RI почти-истёкшими интродьюсерами
weko
А значит знает что использование закончившихся интродьюсеров смысла не имеет
weko
И кто именно закончился
weko
Ясно, спасибо
weko
Надо поменять тогда названия, а то не понятно нифига
Vort
по сути, и то и то - сроки годности, да. только разные
weko
EXPIRATION -> DURATION (фактически сколько длиться) (хотя можно и оставить)
weko
DURATION -> PUBLIC_TIME (сколько времени публикуется)
Vort
срок годности для обслуживания и срок годности для анонсирования
weko
Ай блять перепутал
weko
Не понятно короче и нужно переименовать
Vort
в i2p вообще с терминологией дела не очень
weko
Да тут термины не нужны специальные
weko
Нужно просто называть вещи как есть
Vort
ну вот я когда разбирался с i2p, меня сильно запутал термин "destination". будет ли это кто-то менять? ))
weko
Вот например для SSU2_KEEP_ALIVE_INTERVAL_VARIANCE нужно добавить "MINUS_ONE" если оно работает так как вы сказали
weko
Или исправить код чтобы работало как написано
Vort
эту 4ку можно интерпретировать, как возможность существования 4 разных значений - 15, 16, 17, 18
Vort
так что четвёрка тут есть :))
weko
А в комментариях написано "in seconds"
weko
Секунд тут нет
weko
[15:30:10] <Vort> ну вот я когда разбирался с i2p, меня сильно запутал термин "destination". будет ли это кто-то менять? ))
weko
Нет. А зачем? Тут как раз понятно всё
weko
Вот туннели бывают разные. Вот это путаница
Vort
"А зачем?" я эту сущность понимаю как просто адрес. этот адрес может быть как источником данных (source), так и назначением (destination)
Vort
почему тогда не source ?
weko
Так destination может быть как источником так и получателем
weko
По сути это и есть просто адрес
weko
Ну только "рабочий"
Vort
"Вот туннели бывают разные" - там другая путаница - количество туннелей и количество хопов. и то и то - количество
weko
[15:36:08] <Vort> "Вот туннели бывают разные" - там другая путаница - количество туннелей и количество хопов. и то и то - количество
weko
И что? По названию параметров всё понятно
weko
Количество хопов к тому же вообще именуется "длинна"
Vort
что ж тут понятного? длина списка с туннелями, допустим
weko
Длина
Vort
и почему нельзя сказать "количество хопов"?
Vort
просто потому что "традиция"? )
weko
[15:37:46] <Vort> что ж тут понятного? длина списка с туннелями, допустим
weko
Список у тебя только в вебконсоли. А это надстройка над i2pd и i2pdclient
Vort
в памяти i2pd полагаю тоже список. ну или массив. и у них есть длина
weko
Vort: список программный - там уже программисткий термин
weko
Не людской
weko
:))
Vort
может, кому-то прям сразу понятно, за всех говорить не могу. но меня путает до сих пор
weko
У меня никогда такого вопроса не возникало
Vort
вспомнил более точно, что меня запутало в термине "destination": я сразу стал искать, где же соответствующий ему "source". и удивился, когда не нашёл
weko
а с чего вдруг должен быть ?
weko
ну точнее его может не быть в коде или в используемой терминологии
weko
но фактически то он есть
Vort
"<weko> а с чего вдруг должен быть ?" по той же причине, по которой у палки должно быть два конца. если есть конечная точка, значит есть и начальная. ну должна быть по логике
weko
так она то есть
Vort
значит это просто точка, без указания того, конечная или начальная
Vort
ну это я не к тому говорю, чтобы что-то сейчас менять
Vort
просто для понимания ситуации
weko
<Vort> значит это просто точка, без указания того, конечная или начальная
weko
я же наоборот написал
Vort
может, я что-то не так понимаю? source на одном компе = destination на другом
Vort
то есть, он как бы есть, но является той же самой сущностью по сути
weko
ну так
weko
а я о чём?
Vort
почему тогда "наоборот"? сущность то одна и та же
weko
тут всё нормально по терминологии. не правильно что I2NP туннели путаются с IP туннелями
weko
<Vort> почему тогда "наоборот"? сущность то одна и та же
weko
ничего не понимаю. я написал что source не обязано быть написано на каждом углу
weko
и это не значит что его нету
Vort
как противоположности тому, что понимается под destination, - нету
weko
и с чего ты решил что этого не существует?
Vort
"I2NP туннели путаются с IP туннелями": IP туннель это что? port map ?
weko
данные же не из пустоты отправляются
Vort
"данные же не из пустоты отправляются" - из такого же "destination". разве нет?
weko
Vort: IP туннель это тот что ты создаёшь когда настраиваешь туннель в конфиге
weko
<Vort> "данные же не из пустоты отправляются" - из такого же "destination". разве нет?
weko
ну как ты сам сказал это и есть таже самая сущность что и source
Vort
так это не "нормально по терминологии"
Vort
про IP туннель согласен - есть такая проблема
Vort
я вообще думал, что tunnels.conf так называется из-за того, что там можно указать количество туннелей :)
Vort
хотя не очень то я и думал об этом если честно )
Vort
в веб консоли кстати написано "I2P tunnels"
Vort
а не "IP tunnels"
weko
<Vort> в веб консоли кстати написано "I2P tunnels"
weko
это вообще не туда ни сюда
Vort
так что хз что там имелось в виду. я больше запоминаю пункты меню по их расположению, так как смысл можно не пытаться понять )
weko
имелось ввиду "тяп ляп и в продакш"
weko
продакшн
Vort
так в java i2p не лучше. по крайней мере, в документации
Vort
или там точно то же?
weko
я откуда знаю
Vort
я подозреваю, что часть путаницы i2pd унаследована из java, а часть - придумана самостоятельно :))
weko
это же всё вопрос реализации
weko
в данном моменте документацию жаба-ш2з можно послать в известное место
Vort
термины - это ещё и вопрос документации
Vort
если в документации есть термин, то выдумывать свой аналог - это как раз и есть путаница
weko
нет
weko
так как в вопросе не касающихся протокола i2p документация не компетента
weko
и является просто рассказом "а у нас вот так"
Vort
стабильность иногда важнее точности. так что тут не однозначно
Vort
это важно, чтобы юзерам java не пришлось выучивать новые термины при переходе на i2pd
Vort
ну и вообще чтобы можно было общаться, понимая друг друга
weko
надо ещё горшок поставить
user
Нашел недоработку в алгоритме работы роутера. Если в конфиге добавить в доверенные только один RI, чтобы выходить в сеть через него, то через некоторое время этот RI удаляется из нетдб (вероятно как устаревший) и наш роутер повисает в �
user
Нужно бы придумать какой-нибудь механизм защиты от таких ситуаций
Vort
полагаю, это редко используемая опция. то, что оно хоть как-то работает - это уже достижение
weko
у тебя кодировка поехала
user
Проблема не критичная, но важная.
Vort
некоторые опции вообще не работают и кто их будет чинить - неизвестно
weko
кракозябры
Vort
это просто UTF8 символ напополам перекусило
Vort
тоже где-то баг :)
user
У роутера кроме веб-морды, есть еще интрфейсы для получения данных о текущем состоянии?
user
Вроде информации о туннелях, транзите, tcsr.
weko
I2Pcontrol
orignal
20 минут нужно потому что netdb не сразу обновляется
orignal
чтобы моглти подключиться те у кого в базе старый
weko
просто тогда верно говорить что интродьюсер 80 минут а не 60
orignal
ну я сделал как дед сказал
user
В i2pcontrol есть запрос на tcsr? Не могу найти. Искал здесь: geti2p.net/en/docs/api/i2pcontrol
orignal
у нас могут быть свои команды
orignal
i2p.router.net.tunnels.successrate"
orignal
у нас
user
i2pd.readthedocs.io/en/stable/devs/api/I2PControl меня отправил туда
orignal
ты читай наши отличия
user
Да, сейчас гляну, спасибо