StarCraft:BroodWar: news, replays

Быстрый поиск:

Reps.Ru

Главная
Новости
Колонки
Интервью
Статьи
Стратегии
Репортажи
Чемпионаты
Gosu Replays
1:1 games
Team Plays
Реплей паки
Реплеи недели
Реплеи юзеров
Файлы
StarCraft 2
SC UserBars
Наш Дамп

Forum

Общий
Стратегии
Кланы
Чемпионаты
Всё о VOD'ах
Юмор
Музыка и Видео
Помощь
StarCraft II
Покер
Политика
Бизнес
Игры
Поиск

About

ТОП юзеров
Reps.Donate

Info

По вопросам работы сайта, сотрудничества, ньюсмейкерства, спонсорства и размещения рекламы, обращайтесь:
Mail: evil-2002@yandex.ru
ICQ: 864-000

Replay Of The Week

PIMPEST PLAYS 2 reps.ru

Country: vs
Race: NO vs NO
Map: Wuthering Heights
Expansion: NO vs NO
Lenght: 00:00:00
Rating: 10
Event: PP
Comment:
Просмотрел более 500 реплеев, 8 лучших на мой взгляд :) Приятного просмотра d^_^b

» Comment 17
» Downloads: 1525
» All replays of the week





Reps.Ru :

Поиск

Текст/Заголовок:


Последние колонки

Ark Royal
» [For the Sake of BroodWar] WCG Korea '10 (12)

Ark Royal
» [For the Sake of BroodWar] Shinhan Season 3 OSL '07 (14)

Ark Royal
» [For the Sake of BroodWar] Daum OSL '07 (5)

Ark Royal
» [For the Sake of BroodWar] EVER OSL '07 (14)

[Ещё]

Main / All columns / Other columns?

Улучшаем пинг в СК2

@ 30 Mar. 2010 17:20 / Комментарии: 10 / Прочитано: 5011

LAN latency SC2

Не так давно комрад Bahamas R1CH в своей статье на tl.net рассказал об особенностях сетевого подключения второго СтарКрафта.

Сразу оговоримся, что под "латентностью", "пингом" или "лагом" имеется именно сетевой пинг (тот, что зависит от проводов). В СК2 так же встроен командный буффер, который предназначен для сглаживания игры при высоких лагах. С другой стороны он автоматически добавляет некий дополнительный пинг, который нельзя исправить никакими подрутками.

 

Введение

СК2 запускается через удаленный сервер, как например HoN. Не p2p как было в БВ, а через удаленную машину-сервер. Близзард - хост игры, а не вы (не тестировались Произвольные игры, может быть в них все немного иначе). Протокол - TCP, а не UDP как было ранее. Я не знаю, почему в Близзард решили использовать TCP/IP, ведь при равных условиях этот протокол проигрывает по пингу из-за потерянных пакетов. Вероятно, они не хотели ломать голову с фрагментацией или NAT.

 

"Дропхак" и обычные лаги

Т.к. другие игроки так же подключаются к серверу Близзарда, а не к вам, вохможность "дропхака" исключена полностью. Дропхак позволяет прервать соединение какими-либо способами, и десинхронизировав соединение, выкинуть вас из игры. А т.к. в СК2 соединение идет через сервер, все что можно сделать - дискнуть себя с сервера. Сервер же остается жив, и сможет определить, кто остался в игре. Он будет победителем и получит очки.

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

Вы могли заметить, что окно Waiting for players появляется довольно часто. Сервер настроен так, что при лаге одного игрока, на паузу ставятся все остальные. Типа не честно было бы продолжить игру, чтобы "нелагающий" игрок перемикрил, или, того хуже, поймал на муве лагающего, пока тот не в состоянии что-то сделать. В теории же, можно сделать как в HoN'е - если игрок лагает, это его проблемы, у остальных все хорошо. С другой стороны, такая система позволяет зайти в игру миллиону обсов. Если обс лагает, кому есть до этого дело?

 

Port Forwarding

Настраивать порт-форвардинг не нужно. Вы подключаетесь к battle.net'у как к репсам. Опять же, это решает вопрос с proxy: 1x1 это, 2x2, 3x3 - разницы нет.

 

Мапхак

Небольшой технический взгляд на мапхаки. Т.к. соединение идет через сервер, технически возможно полностью избавиться от мапхака (сервер отправляет игроку только то, что он "может видеть"). HoN так делает. Но в HoN'е мало юнитов, это ж как DotA, но в случае войны лимитов (тем более в каком-нибудь 4x4, где воюют 4 тосса с батонами). Это означает, что как только лимит входит в зону вашей видимости, сервер должен отправить в одно мгновение пару мегабайтов. При этом не должны теряться пакеты, иначе будет лаг. И если это каким-то хитрейшим способом можно расчитать, ссылаясь на скорость и вектор движения юнитов, то точка скана - чисто случайная точка для сервера.

То есть в теории можно замутить очень хитро, но на практике от этого пострадает пинг, а пинг в РТСках крайне важен.

 

Улучшаем латентность

Как уже было сказано, СК2 использует TCP. TCP разработан так, что пинг вторичен по отношению к скорости передачи данных. Практически все стрелялки используют UDP из-за этого. Особенность TCP - точная передача данных. Если пакет утерян, его нужно переслать заново (а игра в этот момент подлагивает).

Тем не менее, можно подкрутить коннект так:

Меняем TcpAckFrequency на единичку

Запускаем редактор реестра (Пуск - выполнить - regedit), затем переходим на закладку:

HKEY_LOCAL_MACHINE
SYSTEM
CurrentControlSet
Services
Tcpip
Parameters
Interfaces

Здесь должен быть ключик IPAddress с вашим ИПом. Здесь же правой кнопкой создаем новый ключ DWORD, называем его TcpAckFrequency, значение "1".

Почему это работает?

Обычно TCP отправляет запросы на подтверждение получения пакетов. Это происходит до тех пор, пока сервер не получит ответ, либо не прекратит это дело по тайм-ауту. Таймаут может произойти из-за того, что отправляющая сторона ожидает от вас подтверждение (ack). Установив TcpAckFrequency на единичку, вы отправляете подтверждение сразу после получения данных. Обратите внимание, что это повышает требование каналу, т.к. вы будете отправлять в разы больше данных.

 

Что может помочь

Если вы сидите на ADSL'е, соединение может использовать метод interleaving, который уменьшает подверженность всяким ошибкам, но опять же, добавляет пинг. В настройках ADSL модема стоит отключить эту опцию. Опять же, качество проводов, шумы в телефоне, расстояние до АТС (а также погода на Марсе и все такое прочее) может заставить вас включить эту опцию (без нее все станет работать еще хуже). Можно попробовать связаться с провом, объяснить задачу, но вероятность получить ответ типа: "чоо0???77" крайне высока.

Провод против беспровода:
Правильно настроенная беспроводная сеть практически исключает лаг. Тем не менее, если вы находитесь в местности буквально кишащей шумами на частоте 2.4 гигагерца, пинг может стать существенным. Пинг до правильно настроенного роутера - 1-2ms. Если больше - провод вам в помощь.

На дешевеньких картах по беспроводу также можно получить лаг в момент сканирования точек доступа. WlanOptimizer'ом можно отключить сканирование, но он только для Висты/Вин7.

ХРюшникам можно посоветовать подкрутить RWIN. Информации много, гуглится легко.

 

Стопудово не поможет

В сети миллиард твиков, которые типа "улучшают интернет". Как правило их задача сводится к подкрутке значений TCPNoDelay, NetworkThrottlingIndex, TcpDelAckTicks, отключению QoS Packet Scheduler. Можно конечно попасть на уникальный для себя твик-артефакт (один из сотни), который даст нужный результат. Но у другого он работать уже не будет. Тут дефалтные настройки - лучший выбор.

Комментарии

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

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

А если игра лагает - то твиками реестра здесь не отделаешься - придется искать более расторопного провайдера, или переходить на более скоростной тариф, если проблема именно в недостаточной скорости линии.

#1 - uQu)StudeNT1k
Автор опроверг возможность "передачи позиций каждого интерцептора". Просто сделал это "от обратного" :)

По поводу расторопных провов. Вопрос относительный. Если у тебя 90ms пинг, можно сказать "у меня и так все пиздато", а можно твиками сделать 80ms, а это 11% как бы.

(Другое дело, что "исправление" 1000ms даже на 500 не значит ничего)

охуенно, но использовать не буду.

Блин у меня в Interfaces куча папок причем почти везде ipadress равен 0.0.0.0, собственно куда добавлять то?)

SCII.Predelnik
не заморачивайся) У тебя похоже IP присваивается через DHCP (тоесть автоматически выдается тебе сервером) Так что тебе эта штука точно не поможет )

"Сразу оговоримся, что под "латентностью" имеется именно сетевой пинг"
XDDDDDDDD
"Если у тебя 90ms пинг, можно сказать "у меня и так все пиздато", а можно твиками сделать 80ms, а это 11% как бы."
Разница в 10ms а по процентам 11 это почему так? Почему не 10%? =(

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

латенси и пинг - разные вещи, и зря их RICH обобщает.

пинг - это время пакета в пути, от источника к получателю. причем время передачи пакетов может сильно отличаться от протокола к протоколу из-за троттлинга. у ICMP приоритет часто бывает выше, чем у TCP. Поэтому если команда ping <IP address> возвращает 100ms, это не означает, что пакеты TCP/UDP будут передаваться с такой же скоростью. это так... к слову.

латенси, помимо скорости передачи пакетов, сильно завязана на обработку данных на стороне клиента - калькуляция, рендеринг и т.п. если комп слабый, то на эту обработку времени тратиться больше - латенси увеличивается (а СК2 попрожорливей будет чем СК1 ^___^). предположим, что у вас протянута оптика до сетевой карты, а комп гавно, то лагать вы все равно будете безбожно, чтоб вы там не крутили с настройками в реестре.

Использование TCP протокола странный ход. Может, на то есть свои тех. причины конечно.

В War3 примерно такая же система соединения клиентов. Однако, с мапхакерами там полный караул.

а если у меня прокси сервер HTTP (IP + порт 3128)... подключатся к батле и грать можно будет ??

Добавить комментарий

Вы не зарегистрированы на сайте, поэтому данная функция отсутствует.
You are not register on the site and this function is disabled.

Everything about Starcraft Broodwar world Pro-gaming. Gosu Replays

User

Create your profile on reps.ru

» регистрация
» восстановление пароля
Почта/Логин:

Пароль: