Dota! Clan KuDo
You need to upgrade your Flash Player or to allow javascript to enable Website menu.
Get Flash Player
Форма входа
Привет: Гость
Группа: Гости

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!

Меню

Категории каталога
Мои статьи [7]
Анти-гайды [4]
Banlist [2]
База о доте [10]
Здания [16]
B.net [1]

Мини-чат

Главная » Статьи » B.net

Почему я не могу хостить?

Для начинающих варкрафтеров может стать сюрпризом такая ситуация: создаёшь хост, а на него никто не может зайти. Ко мне уже несколько раз обращались с этим вопросом. Ходят даже мифы, что «ему дали хост — может, и мне когда-нибудь дадут». Нет, проблема в другом. А в чём — это я и хочу поведать вам.

Теория

Под хайдом большой и интересный текст. Кто не любит читать, вкратце:
1. Игроки подключаются к хосту, а не к Battle.net.
2. Поэтому хост должен иметь или реальный IP, или открытый порт на NAT'е.
3. А если есть брандмауэр — war3.exe или соответствующий порт должен быть открыт.

Кто такой хост?

Представим себе: несколько компьютеров ведут многопользовательскую игру. Попробуем ответить на два вопроса:
1) Что знает каждый из компьютеров о том, что творится в игровом мире? В частности: хранится ли на нашем компьютере положение невидимых юнитов? Вражеских героев?
и 2) Что компьютеры передают друг другу по сети?

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

А в стратегиях используют фундаментальное свойство цифровой ЭВМ: когда одной и той же программе «скармливают» одни и те же данные, получается один и тот же результат. Вуаля! 1) На каждом из компьютеров хранится весь игровой мир — всё, включая невидимок, противников в «тумане войны» и т.д. 2) Передаются команды управления наподобие «Пометить группу», «Двигаться» или «Использовать еул». Каждый из компьютеров, получив эту команду, выполняет её — и результаты будут идентичными.

Не так всё просто. Есть много вещей, которые могут привести к рассинхронизации. На разных моделях процессоров матсопроцессор может выдавать числа, чуть-чуть различающиеся в последнем знаке. Есть прерывания, которые проскакивают в неконтролируемые моменты. А есть просто баги. Так что написание «повторяемого» движка — дело непростое. Но принцип поняли...

Кстати, на этой же «повторяемости» основана запись реплеев.

В такой модели выделенному серверу просто нет места. Передавать короткие сообщения с машины на машину, служить посредником? Это вполне может взять на себя один из игроков. Так что вот вам ещё одна чеканная фраза: игроки налаживают соединение с хостом, а не с Battle.net.

А что же делает Battle.net? А он служит исключительно рекламой. Он объявляет игрокам хосты. И больше ничего. Варкрафтеры со стажем не раз встречали сообщение: «Через 20 минут сервер будет перезапущен». Сервер давно перезапустили, а игра идёт как ни в чём не бывало. Как раз по этой причине.

Сколько раз я уже слышал от людей с пингом под 200: «Я не лаггер»... Причина та же самая. Пинг проверяется от клиентов до хоста, а не от клиентов до сервера. Разумеется, на одном хосту будут лаги, в то время как на другом всё пройдёт гладко.

NAT'ы, брандмауэры и иже с ними

Таким образом, игроки налаживают соединение с хостом (обычно по порту 6112, хотя этот порт можно задать в настройках игры). Что нужно знать, чтобы наладить соединение? IP-адрес и порт.

IP-адрес — это четыре числа от 0 до 255. Например, 101.102.103.104. Всего IP-адресов 256^4 = 4 млрд. То есть, два IP-адреса на трёх жителей Земли. Уже во время конверсии Арпанета в Интернет выяснилось, что долго такая адресация не протянет. Так что сделали обходной путь — NAT (Network Address Translation). Как он действует, покажу на примере.

Без NAT'а всё просто. Маршрутизаторы передают TCP-пакет по эстафете без всяких изменений.

А как же с NAT'ом? Начнём с того, что адреса вида 10.x.x.x и 192.168.x.x считаются внутрисетевыми, и пакеты, предназначенные им, маршрутизаторы не пропускают. А как же мы с такими адресами ухитряемся качать порнуху? А вот так.

Мы — компьютер 10.0.0.5. Мы передаём пакет на шлюз, имеющий внутрисетевой IP 10.0.0.1 и внешний IP 25.26.27.28. А теперь самое интересное: маршрутизатор корректирует адрес отправителя, и в интернет идёт пакет с реквизитами «25.26.27.28 -> 31.32.33.34». Сервер возвращает ответ маршрутизатору (25.26.27.28). Тот вспоминает, что этот ответ предназначается 10.0.0.5, и ретранслирует его в сеть (попутно заменив 25.26.27.28 на 10.0.0.5)

А теперь вопрос: как связаться с 10.0.0.5 извне? Так, чтобы не наш 10.0.0.5 наладил соединение, а 31.32.33.34? Пакет с получателем 10.0.0.5 не дойдёт, его никакой маршрутизатор не пропустит. А если писать на 25.26.27.28, пакет дойдёт до маршрутизатора, но в таблице открытых соединений ничего по этому поводу нет — а значит, пакет снова не дойдёт!

Чтобы разрешить эту проблему, в NAT'е есть ещё одна таблица — так называемая таблица перенаправления портов. Но, к сожалению, её приходится заполнять вручную (на админском языке это называется «пробросить порт»). А если доступа к ней нет (например, NAT провайдерский) — только облизываться.

Получается, что находящиеся в локальной сети компьютеры для внешнего мира «не существуют», от их имени действует NAT-шлюз. Мы можем ходить на веб-сервер 25.26.27.28:80, а можем — играть в Dot'у с 25.26.27.28:6112, даже не подозревая, что это разные машины. NAT используется повсеместно: когда за ним квартира, когда компьютерный клуб, когда целая страна. Да, бывает и такое: в некоторых мусульманских странах один IP-адрес на всех. И нам, украинцам, в этом плане ещё везёт.

Межсетевой экран, или брандмауэр — аппаратно-программный комплекс, не пропускающий «вредного» трафика. Если брандмауэр есть, в нём надо сделать дырочку: указать, что Warcraft — программа полезная и её резать не надо.

NAT-маршрутизатор сам по себе выполняет часть функций брандмауэра, пропуская входящие соединения только по разрешённым портам. Впрочем, настоящие брандмауэры блокируют и другие виды атак — вредоносный исходящий трафик, сканирование портов или DoS.

Категория: B.net | Добавил: [KD]SILENT (03.10.2008)
Просмотров: 1295 | Комментарии: 2 | Рейтинг: 0.0/0
Всего комментариев: 2
2 Phil^  
0
я уже могу :Р

1 егр  
0
мне лучше бы кто нить написал как с версией 1.23.0.6352 по сетке с кем нить играть(если ет возможно) или по баттл нету или ваще как нибудь кто знает напишите плиииииз cry

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск

Друзья сайта
DotA.org.ua
WarCraft Naruto - 3rd Shinobi Wars

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Copyright MyCorp © 2024