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

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

Страницы: 1 2 3 4 5 6 7
RammПостоялецwww14 дек. 201721:17#90
Сейчас в большинстве случаев до _квартиры_ доходит занатовый адрес, и в каждой квартире по роутеру, сужу по количеству wifi точек соседей, которые, гадство, их не отключают... Чему тут удивляться? Жду еще комментарий Dampire по поводу поиска локальных адресов роутеров...
RammПостоялецwww14 дек. 201721:18#91
А трассировка пути - это совсем черная магия?
ZabПостоялецwww14 дек. 201721:23#92
Ramm
> А трассировка пути - это совсем черная магия?
При проходе через роутер в пакет дописывается информация о пути, которым он шел. Весь путь можно проследить, по идее, если его специально не стирали аннонимайзерами, и не подделывали. Но как это сделать не знаю, через сокеты оно не доступно.
CoderInTankПостоялецwww15 дек. 20170:42#93
Ramm
> А трассировка пути - это совсем черная магия?

tracert трассирует так: посылает пакеты до цели с возрастающим TTL, 1, 2, 3, ..., пакет соответственно сдыхает сначала на роутере, потом на шлюзе роутера, потом далее по цепочке до цели. Вся эта цепочка по очереди посылает обратно сообщение, что время жизни истекло, получите пакет обратно. Ну и адрес свой оставляют. Делается это кажись через ICMP. Вообще могут быть ситуации когда это не поможет. Например, если у провайдера 2 локальные сетки между собой не связанные, сидят за NAT'ом у которого NAT Loopback не включен, ну и соответственно 2 клиента, один в первой, другой во второй, Loopback это то самое которое отвечает на то отвечает ли NAT на запросы из внутренней сети или нет. В этом случае вообще ничего походу не сделаешь) Но думаю, что это нечастая ситуация в реале.

Еще во всяких игровых серверах, на некоторых клиентов вешают функции посредника. Тогда получается трафик будет идти не через сервер нагружая его, а через одного\нескольких игроков, которых тоже можно подбирать по значению пинга, мол у игрока 1 пинг до игрока 2 и 3 хороший, а игроки 2 и 3 не могут друг до друга достучаться, значит будешь им посредником.

DampireУчастникwww15 дек. 201712:00#94
Ramm
Локальный адрес в сети провайдера узнавать тухлая затея, порты то мапиться могут как угодно. Но ты сам понимаешь, что это невероятно? В одной квартире - да легко, тут тебе надо знать только локальный адрес и локальный порт. Плюс учитывай, что невозможность игры за одним натом это особенность настройки. За каким хером ты сам придумываешь невероятные сценарии и начинаешь вайн? То у тебя порты все рандомятся, то у тебя у всех симметрик, теперь вот все сидят за одним натом.

Правка: 15 дек. 2017 12:00

RammПостоялецwww15 дек. 201714:47#95
Dampire
> За каким хером ты сам придумываешь невероятные сценарии и начинаешь вайн?
Хз, но у меня этот невероятный сценарий прям передо мной сейчас работает)))
Ок, план такой:
1. Получаем на сервере пакеты от клиентов, узнаем их адреса и порты, отправляем им, они начинают совершать фрикции, слать пакеты друг другу в надежде пробиться...
2. Если у них это не удалось, они уведомляют сервер, типа 20 секунд молчание, он проверяет адрес, если он не совпадает - пускаем весь их трафик через сервер, т.к. NAT не пробит и нихрена не вышло. Если совпадает - просим их прислать локальные адреса и забиндинные на прослушку порты. Отправляем им полученную инфу.
3. Клиенты пробуют подключиться по локальным адресам, если выходит - повезло, нет - пускаем весь трафик через сервер.
Так? Все правильно?
ZabПостоялецwww15 дек. 201716:07#96
Ramm
Сервер для доставки лучше иметь возможность назначить другой, не тот, через который игроки ищут друг друга. Ничто не мешает совместить два в одном, но рано или поздно ты захочешь освободить от лишней нагрузки связной сервер, протокол должен это позволять.

Правка: 15 дек. 2017 16:08

DampireУчастникwww15 дек. 201716:26#97
Ramm
> Хз, но у меня этот невероятный сценарий прям передо мной сейчас работает)))
Этот невероятный сценарий перед тобой потому что у тебя отладка идет, это раз. Во вторых это решается локальными адресами (которые можно сразу хранить вместе с внешними и отсылать их тоже парой, пусть клиенты сами разбираются к чему подключаться). А чтобы у тебя два клиента сидели за одним провайдерским натом (но за разным домашним) это как раз из области уличной магии.

Что касается сервера доставки - достаточно подменить адрес проблемного клиента адресом сервера доставки. Весь трафик гонять через него не нужно.

Правка: 15 дек. 2017 16:28

RammПостоялецwww15 дек. 201717:23#98
Zab
Да, я тоже об этом думал. Ну и если что-то хоть немного получится - увеличить кол-во серверов...
Dampire
Да, точно, только для проблемных клиентов, а те, кто смогут подключиться напрямую - будут слать напрямую.
Уфф, блин, всем спасибо большое, более-менее начал шарить в теме.
RammПостоялецwww15 дек. 201717:25#99
CoderInTank
> Тогда получается трафик будет идти не через сервер нагружая его, а через
> одного\нескольких игроков, которых тоже можно подбирать по значению пинга, мол
> у игрока 1 пинг до игрока 2 и 3 хороший, а игроки 2 и 3 не могут друг до друга
> достучаться, значит будешь им посредником.
И если кто-нибудь уйдет - у тех, кто к ним подключен все ляжет)
GLoomУчастникwww15 дек. 201718:21#100
Ну почти так работает don't starve together. Когда выходит "хозяин" сервера у остальных игра заканчивается.
RammПостоялецwww15 дек. 201718:29#101
GLoom
Одно дело - создатель лобби, другое - пятый чел, к которому тебе повезло подключиться... Как вариант - тут же переключаться на другого в лобби или на свой сервер.
CoderInTankПостоялецwww15 дек. 201723:49#102
Ramm
> И если кто-нибудь уйдет - у тех, кто к ним подключен все ляжет)

ну вот в Awesomenawts допустим иногда возникает прямо посреди игры на пару секунд сообщение "Подождите, идет смена хоста\оптимизация подключений".  Вполне себе нормальная ситуация и не раздражает так как понимаешь, что сейчас то получше должно стать) Но и это убрать просто введя запасного посредника который если что налету подхватит.

RammПостоялецwww13 янв. 201811:42#103
Ребят, я тут тему создал по поводу внутреннего буфера сокета
http://www.gamedev.ru/code/forum/?id=232860#m14
Можете написать свои мысли по этому поводу?=)
Страницы: 1 2 3 4 5 6 7

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

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