Запомнить
 
       
United Kingdom Russia
Local time (MSK): 11:31
Последние комментарии:
30.01.2021 22:55 HEmo vs FRC
24.01.2021 20:32 PD vs FRC
24.01.2021 00:06 SPARX vs DuSt
15.01.2021 11:53 Warcraft III..
12.11.2020 22:57 GC vs PD
07.11.2020 22:26 GC vs Emo
07.11.2020 16:45 FraB vs DuSt
07.11.2020 01:47 Sun vs FRC
02.11.2020 22:19 RBTV vs TDK
01.11.2020 23:37 wU] vs TL7
01.11.2020 17:45 HEmo vs L7
01.11.2020 11:43 FraB vs GC
25.10.2020 21:35 PD vs FraB
23.10.2020 23:51 SPARX vs FRC
18.10.2020 22:49 SPARX vs InFs

Последние блоги
14.06.2012 RussiaNeoPhix 1
Несчастливый день или поход в бильярд.
01.04.2012 Russiahalfpast5 0
Интересно и понятно - о физике.
01.04.2012 Russiahalfpast5 0
Пираты в минус, продажи в минус.
17.03.2012 RussiaNeoPhix 7
О любви
08.03.2012 RussiaNeoPhix 9
Самопознание. Никаких ответов

Статьи
Warcraft и GGArena: сетевые реалии
23 Nov, 13:51| author: iAct.n2l.Derain

В онлайн-матчах достаточно остро стоит вопрос с хостами, с чем связана масса проблем различного характера. Для одних на определенном хосте всё шикарно, другие же мучаются из-за так называемых спайков и прочих неудобств вроде невозможности зайти в игру. На мой взгляд, кому-нибудь будет интересны технические особенности, стоящие за суровой действительностью интернета, о чем собственно и пойдет речь.

Для начала стоит сказать об общей организации. Связь между двумя конечными пользователями осуществляется через несколько машин, в простонародье именуемых роутерами. Самый близкий пользователю - тот, которым заведует его родной провайдер, через него и гуляют все данные, предназначенные для других пользователей. Роутеры же шлют эти данные дальше согласно их таблице маршрутизации, где описано, к какой машине следует отправить очередной пакет по конечному адресу получателя. В большинстве случаев эти роутеры соединены между собой весьма толстыми и качественными каналами связи, что сводит к минимуму задержки и потери данных. При этом стараются подбирать оптимальные маршруты, исходя из качества и стабильности связи отдельных путей, а также их пропускной способности и загруженности. В данной системе наиболее узким зачастую является подключение именно к своему провайдеру, но не исключены и проблемы между вышеупомянутыми роутерами.

Далее есть такая штука, как пинг. Многим известно, что пинги характеризуют задержку между определенным действием и откликом сервера на это действие. Собственно, пинг - это время, за которое пакет определенного размера (обычно в 32 байта, но Windows позволяет гонять пинги размером до 65000 байт) доходит до сервера и возвращается обратно. Выходит, что по этому определению пинг от первого пользователя до второго абсолютно идентичен тому же пингу от второго до первого - в обоих случаях пакет пробегает туда и обратно. При этом пинги обязательно проверяются относительно какого-либо другого пользователя - фраза "у меня пинг 50" сама по себе смысла не имеет никакого.

Перейдем теперь к нашим реалиям - то бишь, хостам в GGArena. Для тех, кто вовсю пользуется этим клиентом, не станет новостью тот факт, что определенные хосты без различного шаманства с туннелями и антиспайками просто не видны. С чем это связано технически, я сказать затрудняюсь, это ведомо только разработчикам самого клиента, но факт есть факт. Впрочем, дальнейшие рассуждения основаны лишь на личных наблюдениях и какими-либо конкретными вещами вроде кода сетевой работы клиента не подтверждены. Но при особом желании описанные вещи можно опробовать на практике, и результат должен быть тем же.

Для того, чтобы частично избежать проблемы с нерадивыми хостами, в клиенте есть такая фича, как туннели. Так как непосредственное соединение между двумя пользователями через стандартный маршрут затруднено, вполне логично попробовать использовать посредника, до которого у обоих из игроков соединение идет без проблем. Что, по-видимому, и лежит в основе механизма работы туннеля - вместо того, чтобы гонять пакеты по нерадивому маршруту, они идут сначала к третьему лицу, после чего заворачивают туда, куда им и следовало. Какие эффекты сопутствуют такому подходу?

1. Товарищ N о такой подлости не подозревает (никто же не видел сообщения "внимание, через вас запущен GGC-туннель"?), и прием-отправка пакетов между вышеупомянутыми игроками поедает и его трафик.

2. Качество соединения Товарища N оказывает непосредственное влияние на игру. Если его лагает - куда пойдут пакеты? А они будут "ждать", пока маршрут не наладится вновь. Если туннелей несколько (а их обычно 3 штуки), то есть альтернативные пути. Если же он единственный - получаем лаги.

3. Держим в голове тот факт, что Товарищ N ничего не знает, и он, вдоволь нагонявшись в Warcraft, идет гулять/спать/отдыхать, выключая GGAren'у, да и весь компьютер тоже (это необязательно). Возвращаемся к той ситуации, когда маршрута для пакетов нет - получаем столь любимый всеми дисконнект с кучей криков в стиле "почини инет" и "тебя диск, виноват ты".

4. Туннели периодически пропадают по неизведанным причинам. Возможно, это связано с тем, что еще один человек пытается найти маршрут до нашего хоста, и туннель перекидывается на него, возможно, что-то другое. Но факт - связь рвется, и до перезагрузки клиента обоими сторонами игроки друг друга не видят.

Какие из всего этого можно сделать заключения. Если до какого-либо хоста у вас "крест" или красный пинг, то для стабильной игры в комнате нужно некоторое количество народу, которые при других обстоятельствах были бы неплохим хостом для соответствующего игрока. При этом этот самый народ должен оставаться в комнате до конца матча. В какой-то мере это выполняется в комнатах с большим количеством игроков, вроде ACL, что не особо способствует удобному проведению матчей между командами, так как в комнате банально "шумно". А если играть в комнате без сторонних лиц, выходит, что нужны хосты с соединением до обоих игроков.

Еще одна ситуация, которая иногда вызывает споры - это влияние зрителей, в простонародье обсерверов, на задержки в игре. Что творится в сети в данном случае, попробую описать ниже.

Собственно, начнем с того, кто же есть на самом деле хост и зачем он нужен.
Хост (сервер) - это машина, с которой устанавливает соединение каждый из присутствующих клиентов в игре. При этом соединения между самими клиентами отсутствуют полностью - "общение" данными идет исключительно через сервер. И тут возникает следующая проблема. Если клиентов слишком много, а канал сервера не справляется с раздачей данных каждому из них, у всех (и игроков, и обсерверов) начинается дикое подтормаживание. При этом пинг до игроков может быть минимален, но пакеты им отправить просто трудно из-за их большого количества. Лечится эта ситуация либо расширением канала сервера, что всегда затруднительно, либо оставлением всех жаждущих наблюдать кровавую зарубу двух игроков за бортом. При этом наличие зрителей никоим образом не сказывается на пинге между игроком и сервером, и при соответствующей ширине канала толпы фанатов мешать игре не будут. Естесственно, если не брать в расчет случаи с убогим соединением самих зрителей, что приводит к их периодическим дисконнектам, а в особо приятных случаях - обсбагам, когда выход одного зрителя по неизведанной пока никому причине вызывает выход одного из игроков.

Продолжая тему со зрителями, один раз я даже столкнулся с мнением, что их количество влияет на загрузку процессора компьтера игроков. Честно говоря, не знаю, что могли написать программисты из Blizzard такого, что наличие зрителей в игре требует обсчета со стороны игрока, но точно могу сказать, что такое решение крайне нелогично и нормальные люди так программы не пишут. Да и что такого игрок "считает" за зрителя, что это превышает загрузку от расчетов на отображение 3д-объектов и алгоритмов по поведению юнитов.

Вот такой ликбез. Надеюсь, кому-нибудь он будет полезен, а если я где ошибаюсь - с радостью выслушаю правильную версию.
Комментарии
RussiaVolanD #1 - 23.11.2009 14:12




Нет аватара

Команда: EuropeiP

Offline
Отличная статья, очередь за проверкой
Russiahalfpast5 #2 - 23.11.2009 14:59
Команда: RussiaiAct

Offline
Ну я интуитивно понял, большего от меня не ждите хР Норм так статейка!
RussiaiAct.Morfius #3 - 23.11.2009 21:32




Нет аватара


Offline
мне понравилась))) терь при диске буду тыкать ею в лицо кому нить)
Russiamyself-alive #4 - 25.11.2009 11:05




Нет аватара


Offline
Спасибо, теперь буду знать, как работают туннели в гарене (если это конечно, правда)
Russiaag3nt #5 - 02.12.2009 09:34
Команда: EuropeHEmo

Offline
1) насчёт туннелей - имхо всегда используется первый из 3х, если он дискается, то и тебя дискает, иначе б не было так чато дисков. но тут я не знаю. Если до хоста не X, а ты его протуннелил, эффекта не будет никакого, туннель не используется, когда он не необходим, так что можете не боятся, когда туннелите, чтобы узнать примерно свой пинг до хоста (на самом деле он всегда меньше, чем выдает туннель, тк будет без посредника).
2) написано не полно.
ситуация X до хоста возможна в 3-х случаях:
а) у хоста нет внешнего ИП, т.е. к нему В ПРИНЦИПЕ НЕВОЗМОЖНО подключится, его не видно извне, только он сам может подключатся к человеку только с внешним ИП. Т.е. два человека в внутренними ип не могут установить соединение без посредника (туннеля).
б) файрволл - в результате аналог ситуации а), соединение невозмоджно установить из-за того, что попытки пресекаются файрволлом (закрытые порты относятся к этому же случаю).
в) провайдер - мудак. например в Перми [читается Перми, а не Перьми, как думают моржи всякие] пользователи провайдера ЮТел имеют внешний ип-адрес, видят абсолютно всех, могут коннектится ко всем хостам, X нет никогда, кроме 1 случая - если хост тоже от ЮТел. Я не знаю, что там намудили они, но полгода назад можно было наслаждаться игрой с пингом 30 от человека с твоего города и провайдера (как мы с фалленом всегда наровили делать).

ну всё, я не эксперт в этой предметной области, но всё примерно так.
RussiaDerain #6 - 02.12.2009 10:40
Команда: RussiaiAct

Offline
ну вот ситуаций 2а и 2б у меня нет - айпи внешний, файрвола нет. Но при этом крестов полно. Вариант 2в тоже не особо нравится - я ж там всё-таки работаю =). Да и к тому же, я думаю, если создать в том же баттл.нете, то соединение будет. По-крайней мере если открыть TCP-сервер на каком-нибудь порту, подсоединиться смогут. Что при этом мешает работать соединению в ГГАрене - непонятно :(

Вы не зарегистрированы. Для того, чтобы отправлять комментарии, вам необходимо зарегистрироваться.

Командные встречи
Предстоящие
нет
Завершенные
iAct > FR 4:1
iAct > hdg 4:2
iAct won ... (tech)
iAct > bru 4:0
iAct < Vincere 1:4
Optimized for IE & Opera
PHP engine by Derain