Один и тот же сервер, одно приложение, одна подписка — а на домашнем интернете работает, на мобильном нет. Или наоборот. Или работает, но постоянно рвётся. Разберём, чем мобильные сети принципиально отличаются и что из этого следует практически.
Первое отличие: в мобильных сетях абоненты не получают собственный адрес. Сотни и тысячи людей выходят в интернет через общее преобразование адресов, деля один внешний адрес на всех.
Мало того, этот адрес меняется. Один телефон за десять минут может побывать в нескольких подсетях оператора — при переходе между вышками, при переподключении к сети, просто по решению оборудования оператора.
Практическое следствие первое: сервисы, которые считают устройства по адресам, видят одного человека как нескольких. Мы столкнулись с этим в собственной системе защиты от злоупотреблений: она считала уникальные подсети и штрафовала пользователя, у которого их набралось пять. Разбор показал, что все пять адресов принадлежат одному провайдеру, а три из них — соседние подсети одного пула. То есть один телефон, гуляющий по адресам оператора, выглядел как три устройства.
Мы исправили это, изменив способ подсчёта — теперь адреса одного провайдера схлопываются в один. Но история показательна: если у вашего сервиса лимит устройств, а вы много пользуетесь мобильным интернетом, вы можете упереться в него, не нарушая ничего.
Практическое следствие второе: переподключение к мобильной сети иногда чинит проблему. Вы получаете другой адрес и, возможно, попадаете на другой узел оператора с другими настройками фильтрации.
Второе отличие тоньше, но именно оно чаще всего ломает соединения.
В обычной проводной сети пакет данных может быть до 1500 байт. В мобильных сетях предел обычно ниже — около 1400–1440 байт, потому что часть места занимают служебные заголовки мобильного протокола.
Проблема возникает при установке защищённого соединения. Первое сообщение рукопожатия бывает крупным, и на мобильной сети оно не помещается в один пакет — приходится дробить.
А дальше начинается самое интересное: разное оборудование фильтрации по-разному обрабатывает дробленые пакеты. Одно собирает их и анализирует целиком. Другое смотрит только на первый фрагмент. Третье дробленые пакеты просто отбрасывает.
Именно поэтому в мобильных приложениях появилась настройка фрагментации — принудительное дробление на мелкие части. Кому-то она помогает пройти там, где не проходило. Кому-то делает хуже. Зависит от того, через какой узел идёт ваш трафик.
Это же объясняет ситуацию, которая выглядит нелогично: соединение устанавливается, но данные не идут. Рукопожатие прошло, потому что уместилось, а дальше пошли крупные пакеты и застряли.
Третье отличие сводит с ума службы поддержки по всей стране.
Оборудование фильтрации стоит на узлах операторов, а не на страну и не на город. Абоненты одного города физически проходят через разные узлы — в зависимости от того, к какой вышке подключены и как оператор построил сеть.
У этих узлов разные настройки, разные версии, разная нагрузка. Отсюда картина: два человека в соседних домах, один оператор, одинаковые телефоны — у одного работает, у другого нет.
Добавьте сюда различия между операторами. Каждый настраивает оборудование по-своему, и одна и та же локация может открываться у одного оператора и не открываться у другого.
Вывод для пользователя прагматичный: если не работает, первым делом попробуйте другую локацию, а вторым — переподключиться к сети. Это не суеверия, за этим стоит конкретная механика.
Четвёртое отличие определяет выбор протокола.
Часть VPN-протоколов работает поверх UDP — он быстрее, потому что не тратит время на подтверждения доставки. На стабильном канале это преимущество.
На мобильной сети всё наоборот. Потери пакетов там обычное дело: смена вышки, слабый сигнал, перегрузка соты. TCP такие потери переживает — потерянный пакет отправляется заново, вы этого не замечаете. UDP не переживает: пакет потерян и потерян.
Поэтому протоколы поверх UDP на мобильном интернете рвутся заметно чаще. Особенно это заметно на длинных операциях: загрузка большого файла, видеозвонок, работа с нейросетями, где ответ генерируется минутами.
Мы используем транспорт поверх TCP именно по этой причине. Он немного медленнее в идеальных условиях и заметно надёжнее в реальных.
Пятое отличие касается всё большего числа абонентов.
Часть мобильных операторов выдаёт адреса нового формата, а до серверов со старыми адресами абонент добирается через преобразование на стороне оператора.
Обычно это работает незаметно. Но качество такого преобразования у разных операторов разное, и это ещё один источник различий: у одного абонента всё летает, у другого на том же сервере постоянные обрывы.
Все наши серверы имеют адреса обоих форматов, и мы рассматриваем возможность включить прямой доступ по новому формату — это убрало бы зависимость от преобразования у оператора.
Пробный день по email без карты. 6 локаций, умный маршрут, скорость до 1 Гбит/с.
Если на мобильном не работает, а на домашнем работает, порядок действий такой.
Первое: смените локацию. Разные адреса проходят через разные маршруты, и часть узлов пропускает то, что блокирует другой.
Второе: включите фрагментацию в настройках приложения, если она там есть. Может помочь, может не помочь — зависит от узла, но попробовать стоит.
Третье: переподключитесь к мобильной сети — включите и выключите режим полёта. Есть шанс попасть на другой узел.
Четвёртое: убедитесь, что не работает второй VPN. Встроенные в браузеры и блокировщики рекламы туннели конфликтуют за маршруты, и это причина примерно половины обращений в нашу поддержку.
Пятое: не переключайте локацию посреди длинной операции. Загрузка файла или генерация в нейросети оборвётся.
Мобильные сети останутся самой сложной средой, и причина структурная: там сходятся все факторы сразу — общие адреса, ограниченный размер пакета, потери, разнородное оборудование.
Сервис, который хорошо работает на мобильном интернете, почти наверняка хорошо работает и на проводном. Обратное неверно.
Поэтому мы держим несколько локаций разной географии и следим за тем, чтобы транспорт оставался устойчивым к потерям. За август мы четырежды теряли адреса — и каждый раз именно наличие запасных локаций позволяло людям продолжать работать, переключив страну в приложении.
Отдельное наблюдение, знакомое почти всем: одна и та же локация вечером работает хуже, чем ночью или утром. Причин две, и обе объяснимы.
Первая — обычная перегрузка сети. Вечером в сети максимум абонентов, соты загружены, скорость падает у всех независимо от VPN.
Вторая интереснее. Оборудование фильтрации работает на потоке и не может позволить себе долгий анализ каждого соединения — иначе интернет встал бы для всех. Под нагрузкой оно вынужденно упрощает проверки.
Казалось бы, это должно улучшать проходимость вечером, и иногда так и происходит. Но упрощение может работать и в обратную сторону: вместо разбора соединение отбрасывается по грубому признаку.
Практический вывод простой: если вечером не работает, попробуйте другую локацию, а не делайте вывод, что сервис сломался. Утром картина может измениться.
Часть мобильных проблем решается не на устройстве пользователя, а на сервере, и об этом стоит рассказать.
Мы держим транспорт поверх TCP, а не UDP — именно потому, что на мобильных сетях потери пакетов обычное дело, и TCP их переживает, а UDP теряет молча.
Мы используем 443-й порт на всех локациях без исключения. Опыт показал, что нестандартные порты режутся мобильными операторами заметно чаще: у нас была локация на порту 8443, и на домашнем интернете она работала, а на мобильном подключалась и не передавала данные. Перенос на 443-й решил проблему полностью.
Мы исправили подсчёт устройств так, чтобы ротация адресов у мобильного оператора не считалась подключением с разных устройств. Раньше один телефон, гуляющий по пулу провайдера, выглядел как три и мог упереться в лимит.
И мы держим несколько локаций разной географии, потому что на мобильной сети разница между узлами особенно велика: то, что не проходит через один, спокойно проходит через другой.