|
|
|
|
@ -6,15 +6,13 @@
|
|
|
|
|
к протоколу, семейству, фактическому локальному IP:port и поколению сокета. |
|
|
|
|
PUBLIC/NAT/PRIVATE/LOCAL — политика конфигурации, а не результат измерения. |
|
|
|
|
source=ETCP означает измерение рабочего endpoint; source=STUN — резервную оценку |
|
|
|
|
по его IP/netif через другой порт. Измеренный ETCP имеет приоритет до истечения TTL. |
|
|
|
|
по его IP/netif через другой порт. Успешный ETCP имеет приоритет до явного сброса endpoint. |
|
|
|
|
|
|
|
|
|
Модель: src/routing_layer/address_profile.h. |
|
|
|
|
mapping: UNKNOWN, UNCHANGED, EIM, DEPENDENT. |
|
|
|
|
inbound: UNKNOWN, OPEN, CONTACT_REQUIRED. |
|
|
|
|
source: NONE, ETCP, STUN. |
|
|
|
|
evidence_id: случайный 64-битный ID завершённого раунда владельца. |
|
|
|
|
checked_at: время измерения владельца, Unix microseconds. |
|
|
|
|
generation: случайный 64-битный ID жизненного цикла локального endpoint. |
|
|
|
|
round/generation: локальные ID раунда и жизненного цикла endpoint; в NODEINFO не входят. |
|
|
|
|
|
|
|
|
|
UNCHANGED означает совпадение наблюдаемых и локального адресов на испытанных |
|
|
|
|
направлениях. Оно не доказывает свободный вход. EIM означает одинаковый внешний |
|
|
|
|
@ -75,11 +73,12 @@ facet не превращается в ложный STRICT. Потери, оши
|
|
|
|
|
остаются подсказками для попыток, подтверждение связи даёт handshake с нужным ключом. |
|
|
|
|
|
|
|
|
|
Один активный раунд на S. Таймаут пробы — max(1 секунда, 4*RTT), не более 3 секунд; |
|
|
|
|
три попытки, бюджет раунда 30 секунд. Повтор после ошибки через 30 секунд или |
|
|
|
|
после появления подходящего транспорта; штатный refresh через 180 секунд. |
|
|
|
|
Срок фактов — 300 секунд. Таймеры владельца используют monotonic timebase; |
|
|
|
|
checked_at не обновляется повторным NODEINFO и не зависит от ответа сервера NTP. |
|
|
|
|
При несогласованных часах получатель использует осторожные попытки, не отказ. |
|
|
|
|
три попытки, бюджет раунда 30 секунд. До первого результата повтор после ошибки |
|
|
|
|
через 30 секунд или после появления подходящего транспорта; штатный refresh через 30 минут. |
|
|
|
|
Успешный профиль не протухает по таймеру. Ошибка перепроверки сохраняет прежний результат |
|
|
|
|
и редкий период; неизвестный inbound при том же mapping/endpoint сохраняет прежний ETCP inbound. |
|
|
|
|
Свойства разных источников не объединяются в один ETCP-профиль. Смена адреса отменяет |
|
|
|
|
старый раунд, сбрасывает профиль и назначает скорую проверку. Таймеры используют monotonic timebase. |
|
|
|
|
|
|
|
|
|
TCP и прокси |
|
|
|
|
------------- |
|
|
|
|
@ -114,11 +113,12 @@ owner_key и helper_key имеют разные поля и никогда не
|
|
|
|
|
--------------- |
|
|
|
|
|
|
|
|
|
Профиль публикуется только владельцем в общей подписанной записи NODEINFO. |
|
|
|
|
Списки и их границы входят в подпись; mapping/inbound/evidence/checked_at |
|
|
|
|
Списки и их границы входят в подпись; mapping/inbound/source |
|
|
|
|
сохраняются и загружаются вместе. node_addresses — производная проекция: |
|
|
|
|
nat_mapping, nat_inbound, nat_evidence, nat_checked, address_kind. |
|
|
|
|
nat_mapping, nat_inbound, nat_source, address_kind. |
|
|
|
|
При изменении формата старый кэш адресов пересоздаётся; старый NAT_TYPE не |
|
|
|
|
интерпретируется как новая модель. Подписанные snapshots и записи чата не удаляются. |
|
|
|
|
интерпретируется как новая модель. При сокращении SOCKMETA старые snapshots инвалидируются |
|
|
|
|
с сохранением timestamp; адреса и REALITY остаются bootstrap-сведениями. Записи чата не изменяются. |
|
|
|
|
|
|
|
|
|
Общий NAT-адрес рекламируется только после EIM. DEPENDENT не рекламирует |
|
|
|
|
универсальный внешний endpoint. NTP.reachable не управляет рекламой адресов. |
|
|
|
|
|