nat: finish observer-only rounds and document unknown-type candidates
This commit is contained in:
1 parent
71abf74bfc
commit
37461bb938
3 files changed
+11
-1
No files matched your search
@@ -60,6 +60,14 @@ eim filtered — внешний IP:порт одинаковый, серия п
|
||||
Известный тип NAT можно сохранить, даже если входящие проверить не удалось.
|
||||
Таймаут и отсутствие подходящих узлов сами по себе не означают strict.
|
||||
|
||||
Если один пир уже увидел публичный IP:порт, отличный от локального, этот адрес
|
||||
сразу сохраняется как NAT с type=UNKNOWN. Он публикуется отдельно от адреса
|
||||
интерфейса и остаётся кандидатом для пробного подключения: одного наблюдения
|
||||
недостаточно, чтобы обещать тот же адрес для других IP или открытый вход.
|
||||
Уже знакомый помощник пригоден для измерения типа NAT, хотя проверить незнакомый
|
||||
вход через него нельзя. Потеря результата входящих не останавливает сравнение
|
||||
адресов через доступные публичные узлы; ожидание одного этапа ограничено по времени.
|
||||
|
||||
Соединения по LAN работают независимо и не сбрасывают интернет-профиль.
|
||||
Если доступны только локальные узлы, определить интернет-NAT нельзя.
|
||||
Результат относится к проверенному UDP-сокету: проверка STUN с другого порта
|
||||
|
||||
@@ -770,7 +770,7 @@ static void owner_ping_cb(int success, uint16_t rtt, void *arg, uint64_t nonce,
|
||||
!route_ping_addr_equal(&state->measured_address, &observed, 1)))
|
||||
clear_profile(state, NAT_REASON_ADDRESS_CHANGED);
|
||||
remember_address(state, &observed);
|
||||
if (!state->helper) { owner_finish(state, NAT_REASON_NO_HELPER); return; }
|
||||
if (!state->helper) { state->cycling = 0; owner_finish(state, NAT_REASON_NO_HELPER); return; }
|
||||
if (owner_run(state, NAT_STEP_PREPARE)) owner_finish(state, NAT_REASON_CONTROL_LOST);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
* DEPENDENT (strict) — внешний IP:порт зависит от IP назначения.
|
||||
* inbound: OPEN — пакеты от незнакомого IP проходят; CONTACT — проходят после исходящего контакта (оценка filtered).
|
||||
* UNKNOWN в любом свойстве означает, что данных для его определения пока недостаточно.
|
||||
* Одно соединение может подтвердить NAT-адрес: он сохраняется в socket->nat_addr с типом UNKNOWN
|
||||
* и публикуется как NAT-кандидат. Это не адрес интерфейса и не подтверждение открытого входа.
|
||||
* Для UDP сочетания EIM+OPEN и EIM+CONTACT означают eim open и eim filtered. TCP-вход проверяется отдельно.
|
||||
* create(instance) запускает автоматические асинхронные проверки через доступные узлы сети.
|
||||
* get_status(detector, socket, &status) возвращает результат в status.effective_profile и ход проверки в остальных полях.
|
||||
|
||||
Reference in new issue
Block a user