Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Не могу пробить NAT, UDP создает канал (2 стр)

Не могу пробить NAT, UDP создает канал (2 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
RammПостоялецwww4 дек. 201712:19#15
Dampire
> Это просто невозможно (или я не знаю как). Тут только различные UPnP технологии
> применимы или прокси/туннели.
И как тут этот UPnP поможет, это же не панацея. Только посредник...
И почему в случае симметричного НАТа этот панчинг не поможет?
PANDA
> Клиент просто говорит своему роутеру, что ему надо пробросить порт наружу и
> весь трафик, который идет на этот порт роутера автоматически пересылать
> клиенту. После того, как твоя программа пробросила порт все работает
> элементарно. Единственное ограничение: роутер должен уметь UPnP (сейчас все
> практически умеют) и он должен быть включен (проблема самого клиента, с которой
> он может справиться).
Угу, вот только если это НАТ провайдера, то он посылает мою просьбу что-то там пробросить нафиг, поэтому этот UPnP разобьется об него.
DampireУчастникwww4 дек. 201712:25#16
Ramm
UPnP как раз панацея, если это не ISP и если роутер умеет в UPnP (и если это не нат за натом). Клиент сам просит открыть дырку в нате и она открывается. И все просто работает.

Правка: 4 дек. 2017 12:26

RammПостоялецwww4 дек. 201712:31#17
Dampire
НАТ провайдера сплошь и рядом, да еще и роутеры со своими натами...
И разве нат провайдера откроет мне нужный порт?
DampireУчастникwww4 дек. 201712:35#18
Ramm
ISP это и есть провайдер. Разумеется он тебе ничего не откроет.
RammПостоялецwww4 дек. 201713:03#19
Подводим итог: если это не симметричный НАТ - панчинг должен помочь, если симметричный - все, кранты, только через внешний сервер?
ZabПостоялецwww4 дек. 201713:06#20
Ramm
> Или без стороннего STUN никак не обойтись?
Сторонний стан тебе не поможет ровным счетом ничем. Пробиваешь NAT ты через свой сервер точно также, как через stun. Но stun только пробивает, он не позволяет клиентам узнать друг о друге, все равно нужен свой сервер, который их свяжет.

Для чего полезен stun - он протестирует твой тип NAT'а и скажет в каком ты режиме, restricted или нет. Но это скорее для разбирательств "почему не соединяется", чем для работы. Сам реализовывать такую тестирующую функциональность замучаешься, да и незачем.

Еще одна возможная проблема - если у тебя перегружена сеть. Винда в этом случае может выкидывать udp-пакеты даже не пытаясь их отправить. И ничего не сообщать тебе, потому как это не дефект, udp имеет право так себя вести, хоть все 100% отправленных терять может.

RammПостоялецwww4 дек. 201713:20#21
Zab
Ну я о том, что в случае с симметричным НАТом отправлять пакеты на свой сервер а тот уже остальным подключившимся клиентам... Это единственный, я так понимаю, способ обмена?
DampireУчастникwww4 дек. 201713:29#22
Ramm
Забей на симметричный нат. Если у клиента такой - сам себе буратино. Тем более он не работает только с Port-Restricted или еще одним симметричным. Во всех остальных вариантах есть свои воркэраунды.
DampireУчастникwww4 дек. 201713:30#23
Ramm
> Ну я о том, что в случае с симметричным НАТом отправлять пакеты на свой сервер
> а тот уже остальным подключившимся клиентам... Это единственный, я так понимаю,
> способ обмена?
С чего ты взял? Что мешает симметричному прицепиться к Full Cone или Restricted Cone?
К Full Cone он просто подключается, к Restricted Cone - сначала Restricted Cone шлет пакет на любой рандомный порт Symmetric, потом Symmetric имеет возможность подключиться к нему. В чем проблема то?

Правка: 4 дек. 2017 13:34

RammПостоялецwww4 дек. 201713:47#24
Dampire
И в случае, если этот клиент ливнет, который за Full Cone или Restricted Cone, то и у всех подключившихся все ляжет.
Да и пользователь за симметричным натом не сможет стать хостом (сервером) к которому подключаются...
П.С. Если какие-нибудь сервисы, которые показывают тип ната? Я бы сейчас проверил свой...
ZabПостоялецwww4 дек. 201714:08#25
Публичных stun серверов довольно много, например stunserver.org.
Клиентов тоже пруд пруди, но ни один из них не официальный. Их пишут все кому не лень, в том числе очень неквалифицированные программисты. Советовать не рискну то, что сам не пробовал. Более или менее можно верить клиентским утилитам от телекоммуникационный компаний, наверное у каждой из них такая есть, например от астериска.
RammПостоялецwww5 дек. 20178:40#26
Спасибо! Очень сильно помогли разобраться в этой теме.
Но вот есть один вопрос еще...
Zab
> Каждому из них NAT назначит свой натовский порт, они ни разу не совпадают с
> номерами портов, которые у тебя прописаны в клиенте.
Вот это не понял. У меня похоже именно симметричный НАТ, и порт, который я забиндил на клиенте, совпадает с внешним портом, который я извлекаю из пакета от клиента на сервере...
DampireУчастникwww5 дек. 20179:27#27
Ramm
Да епт. С чего ты взял, что у тебя симметричный нат? Потому-что порт симметричный? Сделай запрос ко второму сокету сервера с клиента. Если внешний порт изменится - симметричный. Если не изменится - обычный port restricted. Порты нат какие хочет, такие и назначает. Хочет - назначает такой же (при условии что он свободен). Все зависит от реализации. Сто раз уже сказал. Симметричный нат редкость сейчас. На роутерах его почти никогда не делают, так как достаточно port-restricted и он менее прожорлив по потреблению портов.

Правка: 5 дек. 2017 9:29

RammПостоялецwww5 дек. 201714:10#28
Dampire
Порт каждый раз одинаковый, тот, который я забиндил. Т.е. на оба сокета сервера сообщения приходят с одного и того же порта, даже если я забиндил 80 или 443 на клиенте - сервер все равно их определяет такими. И при каждом перезапуске нат выделяет именно те, что я явно указываю на клиенте.
Ну и какой это тип?=) Если бы был обычный port restricted он бы мне хоть раз, но поменял бы порт.
DampireУчастникwww5 дек. 201714:26#29
Ramm
> Если бы был обычный port restricted он бы мне хоть раз, но поменял бы порт.
Ну раз ты знаешь лучше, то ок. Разбирайся дальше сам.
Страницы: 1 2 3 4 5 6 7 Следующая »

/ Форум / Программирование игр / Сеть

2001—2018 © GameDev.ru — Разработка игр