13 KiB
Да, именно так! Вы абсолютно правы. Вся "магия" держится на сервере-посреднике, без него схема просто не сработает.
Однако, тут есть один нюанс: роль этого сервера меняется в зависимости от того, насколько удачно удалось "обмануть" систему.
У сервера-посредника есть две принципиально разные функции:
1. Роль "Свахи" (Брокер) — Работает всегда
Это основная и обязательная функция сервера.
- Что делает: Знакомит компьютеры друг с другом. Когда вы нажимаете "Включить" в Hamachi/Radmin, ваш компьютер стучится на центральный сервер и говорит: "Привет, я в сети, мой адрес такой-то". То же самое делает ваш друг.
- Зачем нужен: Ваши компьютеры сами по себе слепы. Они не знают IP-адреса друг друга и закрыты NAT-ом (роутером). Сервер-посредник сообщает им адреса друг друга и командует: "А теперь попробуйте соединиться напрямую!".
- Итог: Если всё прошло хорошо (UDP Hole Punching сработал), сервер отходит в сторону. Трафик идет напрямую от вас к другу. Это идеальный сценарий.
2. Роль "Переводчика" (Ретранслятор / Relay) — Работает, когда всё плохо
Это запасной вариант, если "пробить стены" (NAT) напрямую не удалось.
- Что делает: Если ваши роутеры слишком строгие (например, симметричный NAT или корпоративная сеть) и прямая связь невозможна, сервер начинает работать как труба. Весь ваш игровой трафик летит сначала на сервер Hamachi/Radmin, а оттуда — к другу.
- Почему это плохо:
- Огромный пинг: Сигнал делает крюк через дата-центр компании.
- Медленная скорость: Пропускная способность канала сервера ограничена.
- Как это увидеть:
- В Hamachi: Возле имени друга горит синий кружок (Relayed tunnel). Это значит, что вы идете через сервер. Если кружок зеленый — связь прямая (P2P).
- В Radmin VPN: Если связь идет через сервер, тип соединения обычно отображается как Relay/TCP.
Резюме
Сервер-посредник есть всегда для координации (чтобы найти друг друга). Но для передачи самих данных (игры, файлов) программы стараются его избегать, создавая прямой туннель. Если вы играете с комфортным пингом — значит, сервер только "познакомил" вас и ушел. Если пинг высокий — вы гоняете данные через него.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Чтобы создать видимость того, что компьютеры находятся в одной комнате (в локальной сети), хотя на самом деле их разделяют тысячи километров, Radmin VPN и Hamachi используют технологию виртуализации сети.
Весь процесс можно разделить на три ключевых этапа: обман операционной системы, упаковка данных в «конверт» и пробивание стен (NAT).
1. Виртуальный сетевой адаптер (Обман системы)
Когда вы устанавливаете Radmin VPN или Hamachi, они инсталлируют в Windows специальный драйвер — виртуальный сетевой адаптер.[1]
- Как это видит Windows: Система считает, что вы вставили в компьютер еще одну реальную сетевую карту и подключили к ней кабель.
- Что происходит на самом деле: Этот «кабель» никуда не ведет. Это программная эмуляция. Когда игра или программа пытается отправить данные в «локальную сеть» (например, найти сервер Minecraft), она отправляет их на этот виртуальный адаптер.
- Присвоение адреса: Программа выдает этому виртуальному адаптеру специальный IP-адрес (обычно в диапазоне 25.x.x.x или 26.x.x.x), который отличается от вашего реального интернет-адреса.[1]
2. Туннелирование (Упаковка в конверт)
Когда данные попадают на виртуальный адаптер, программа (Radmin/Hamachi) перехватывает их.
- Захват: Игра отправляет пакет данных «Привет, я игрок А» на адрес 26.15.20.1 (адрес друга).
- Шифрование и инкапсуляция: Программа берет этот пакет и шифрует его. Затем она кладет его внутрь обычного интернет-пакета (протокола UDP или TCP).[2][3]
- Аналогия: Вы берете письмо, адресованное «В соседнюю комнату», кладете его в большой почтовый конверт, пишете на нем реальный почтовый адрес друга в другом городе и отправляете по обычной почте.
- Передача: Этот пакет летит через обычный интернет, проходя через провайдеров, как обычный трафик (просмотр YouTube или скачивание файлов).
- Распаковка: Компьютер друга получает пакет. Программа Radmin/Hamachi на его стороне вскрывает «внешний конверт», расшифровывает данные и передает их своему виртуальному адаптеру.
- Результат: Windows друга видит входящий пакет от «игрока А» через виртуальный кабель и думает, что друг сидит рядом.
3. UDP Hole Punching (Пробивание стен)
Самая сложная часть магии — как соединить два компьютера напрямую, если у обоих, скорее всего, есть роутеры и нет «белого» IP-адреса. Для этого используется технология UDP Hole Punching.[4][5]
- Проблема: Ваш роутер (NAT) по умолчанию блокирует все входящие соединения извне, если вы сами их не запросили. Если друг просто попытается отправить вам пакет, роутер его отбросит.
- Решение:
- Оба компьютера сначала связываются с центральным сервером Radmin или Hamachi (сервер-посредник).[6][2]
- Сервер сообщает им реальные IP-адреса друг друга.
- Компьютеры начинают одновременно «бомбардировать» друг друга пустыми пакетами.
- Когда ваш компьютер отправляет пакет другу, ваш роутер открывает «дырку» (запись в таблице NAT) для ответа. В этот же момент друг делает то же самое.
- В какой-то момент пакеты проскакивают в открытые навстречу друг другу «дырки», и устанавливается прямое соединение (P2P).[7][6]
Если пробиться напрямую не удается (из-за строгого корпоративного фаервола), трафик идет через сервер-ретранслятор (Relay), что вызывает высокие задержки (пинг) в играх.[6]
Итог: почему пространство изолированное?
«Изолированность» обеспечивается тем, что:
- Виртуальные адаптеры имеют свои IP-адреса, которые не маршрутизируются в обычном интернете.[3]
- Весь трафик между участниками шифруется (обычно AES-256), поэтому провайдер видит только поток случайных данных, но не видит, что внутри (файлы, игра, чат).[8][3]
Таким образом, создается VPN (Virtual Private Network) — защищенный туннель внутри незащищенной сети Интернет.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
a^{n-1} \equiv 1 \pmod n
эквивалентно вот этому
a.pow(n-1) % n == 1