Методика

Как измеряет Colitu Lab

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

Методика v1.0 · 6 октября 2026Данные и API

Источники данных

У лаборатории два источника, которые везде показаны раздельно:

  • Точки измерения — точки измерения, которые по расписанию проверяют каждый транспорт до каждого публичного сервера Colitu. Каждый результат сохраняется и публикуется отдельно, как был измерен. Это основной источник лаборатории.
  • Данные приложений — результаты транспортов, которые приложения Colitu и так передают при подключении. Лаборатория хранит только почасовые счётчики по странам и сетям и публикует их с задержкой и только там, где за ними стоит достаточно устройств (см. Данные приложений). На страницах они помечены «Данные приложений (с задержкой)».

Кроме того, команда может записывать заметки: наблюдения, написанные вручную, которые показываются среди событий с пометкой «Заметка». Заметки никогда не создаются автоматически и не входят ни в какую долю.

Точки измерения

Точка измерения — это программа (labprobe), которая работает на хосте и отправляет отчёты в лабораторию. У каждой точки есть короткое имя, место (страна и город), тип сети — дата-центр, домашняя или мобильная — и оператор хоста. Сегодня каждая точка работает на хосте, которым управляет Colitu; страница точек измерения перечисляет их.

  • Список серверов. Точка измерения получает серверы так же, как VPN-приложение: из подписки отдельной учётной записи лаборатории. Поэтому она проверяет то, что предлагают пользователям, с теми же настройками.
  • Расписание. Один раунд каждые 20 минут. Результаты, которые не удалось доставить, хранятся на диске и отправляются со следующим отчётом; лаборатория принимает результаты возрастом до 6 часов.
  • Сеть. Сеть точки измерения (её ASN и название сети) определяется по адресу, с которого приходят её отчёты. Сам адрес не хранится.
  • В сети. Точка измерения считается онлайн, если она отчиталась за последние 90 минут. «Отчётность, 7 дн.» — доля часов за последние 7 дней (или с момента добавления точки), в которые есть хотя бы один сохранённый результат.

Тесты

Раунд состоит из трёх видов тестов. На каждый отведено 12 секунд.

1. Базовые тесты — сеть без VPN

  • DNS поверх UDP и DNS поверх TCP: запрос example.com, отправленный напрямую на публичные резолверы 1.1.1.1 и 8.8.8.8.
  • HTTPS к трём нейтральным сайтам: wikipedia.org, google.com и cloudflare.com. Ответ со статусом ниже 500 считается успехом.

Если не проходит ни один базовый тест, значит, у самой точки пропало соединение: раунд передаёт базовые результаты и пропускает тесты туннеля, так что сбой на точке не выглядит как отказ VPN-транспортов.

2. Доступность — удаётся ли вообще достучаться до порта сервера?

Обычное TCP-соединение с портом транспорта на сервере, закрываемое сразу. Тест доступности есть только у транспортов на TCP; Hysteria2 и TUIC используют QUIC поверх UDP, у которого нет аналогичного соединения для открытия.

3. Туннель — идёт ли трафик на самом деле?

Точка измерения запускает настоящее ядро клиента для транспорта — Xray для VLESS, Trojan и Shadowsocks, клиент Hysteria для Hysteria2 — с настройками из подписки, ждёт его локальный SOCKS-порт до 5 секунд и запрашивает через него https://www.google.com/generate_204. Каждый запрос использует новое соединение. Ответ со статусом ниже 500 — успех; записывается время от отправки запроса до получения ответа («время до первого ответа»), поэтому оно включает рукопожатие туннеля.

После успешного теста туннеля точка скачивает через туннель файл 2 МБ с speed.cloudflare.com не более 10 секунд и записывает пропускную способность, если пришло не менее 64 КБ. Это грубая оценка, а не тест скорости: на неё влияют канал самой точки, загрузка сервера и маршрут.

Сравнение доступности и туннеля на одном порту — основа метода. Если порт отвечает, а туннель через него не работает, это указывает на инспекцию трафика; если порт не отвечает — на блокировку адреса или на упавший сервер, который тогда видят и остальные точки измерения.

Время

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

Сбои

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

КодПоказано какЗначение
timeoutТаймаутНет ответа за отведённое время (12 с на тест).
resetСоединение сброшеноСоединение было сброшено дальним концом или чем-то на пути.
refusedОтклоненоПорт активно отклонил соединение.
unreachableНедоступноНет маршрута до хоста или сети.
tlsОшибка TLSРукопожатие TLS или проверка сертификата не удались.
dnsСбой DNSНе удалось разрешить имя.
eofЗакрыто раньше времениСоединение было закрыто до получения ответа.
otherСбойВсё остальное, включая ошибку HTTP (статус 500 и выше) через туннель.
probe_errorОшибка точки измеренияПроблема на самой точке измерения, например не запустившееся ядро клиента. Не входит ни в одну долю.
authУчётные данные отклоненыСервер отклонил учётные данные аккаунта лаборатории — проблема с нашей стороны. Не входит ни в одну долю.

probe_error / auth ничего не говорят о сети, поэтому они сохраняются и публикуются в сырых данных, но исключаются из любой доли, медианы, статуса, события и отпечатка. Все остальные сбои учитываются. Классы сбоев — подсказка, а не диагноз: фильтр может вызвать таймаут или сбросить соединение, и перегруженный сервер тоже.

Доли и статус

Доля успеха — это успешные тесты, делённые на все тесты в выборке (кроме двух классов выше). Если на странице не сказано иное, она считается по всем серверам, а для страны — по всем точкам измерения в ней. Статус переводит долю в пятиступенчатую шкалу:

СтатусДоля успеха
Доступно98–100 %
Снижено90–98 %
Ограничено50–90 %
Сильно ограниченониже 50 %
Недостаточно данныхменее 6 тестов

Выборка менее чем из 6 тестов получает статус «Недостаточно данных» независимо от доли. Изменения рядом с долей — в процентных пунктах относительно предыдущего окна той же длины; они показываются, только если в том окне не менее 6 тестов.

Графики группируют тесты в интервалы — 1 час для окон до 48 часов, 2 часа до 8 дней, 6 часов до 31 дня и 1 день дальше — и оставляют разрыв там, где в интервале нет тестов. Разрыв означает «не измерялось», а не «0 %».

События

Каждые 10 минут детектор отдельно рассматривает каждую точку измерения и транспорт, объединяя все серверы. Он сравнивает последние 2 часа с предыдущих 7 дней:

  • Нужно не менее 8 тестов за последние 2 часа и 30 за предыдущую неделю; иначе детектор ничего не делает.
  • Событие открывается, когда недельная доля была не ниже 60 %, а недавняя ниже не менее чем на 25 процентных пунктов. Это отказ, если недавняя доля 10 % или ниже, иначе снижение качества. Началом считается начало двухчасового окна.
  • Пока событие продолжается, оно оценивается по доле до его начала, сохраняет худшее значение и становится отказом, если доля падает до 10 % или ниже.
  • Оно закрывается, когда недавняя доля возвращается в пределы 10 процентных пунктов от прежней.

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

Отпечаток сети

Страницы сетей считывают пять видов поведения по результатам сети в выбранном окне. Каждое сравнивает два вида тестов из одной и той же сети, чтобы отказ сервера — при котором не работают оба — не выглядел как вмешательство. Отрицательные разницы считаются нулём.

СигналЗначениеНаблюдается приНе наблюдается при
Адреса серверов недоступны (блокировка по IP или порту)Доля сбоев тестов доступности≥ 20 %≤ 5 %
TCP-транспорты не работают, хотя порт отвечаетДоля сбоев туннеля у TCP-транспортов минус доля сбоев их доступности≥ 15 п. п.≤ 3 п. п.
QUIC/UDP-транспорты сбоят чаще, чем TCPДоля сбоев туннеля у Hysteria2 и TUIC минус доля у TCP-транспортов≥ 15 п. п.≤ 3 п. п.
DNS поверх UDP к публичным резолверам нарушенДоля сбоев DNS поверх UDP минус DNS поверх TCP, те же резолверы≥ 15 п. п.≤ 3 п. п.
HTTPS к нейтральным сайтам не работает без VPNДоля сбоев базовых HTTPS-тестов≥ 10 %≤ 2 %

За сигналом должно стоять не менее 12 тестов (для разницы — 12 с меньшей стороны); при меньшем числе или при значении между двумя порогами он неопределённым. Пороги намеренно грубые. «Наблюдается» означает, что измерения согласуются с таким поведением, а не что выявлен конкретный фильтр.

Данные приложений

Сбор данных приложений сейчас выключен. Он остаётся выключенным, пока об этом не объявят здесь и в политике конфиденциальности; до тех пор все цифры на этом сайте берутся из точек измерения.

Когда приложение Colitu подключается, оно сообщает сервису, какие транспорты пробовало на каком сервере и шёл ли трафик, — приложения используют это для автоматического переключения транспортов. Когда данные приложений включены, лаборатория превращает эти отчёты в счётчики:

  • Адрес. Определяются страна и сеть (ASN) адреса, с которого пришёл отчёт; затем адрес отбрасывается и никогда не сохраняется.
  • Счётчики. Лаборатория добавляет отчёт в почасовые счётчики по стране, сети, транспорту и стране сервера: попытки, успехи и сумма времён соединения (на страницах показано среднее).
  • Устройства. Чтобы посчитать, сколько разных устройств стоит за ячейкой, идентификатор устройства превращается в псевдоним с помощью HMAC-SHA256 и случайного ключа, созданного на этот день UTC. Сам идентификатор не хранится. При ежедневном подведении итогов псевдонимы подсчитываются и удаляются вместе с ключом дня, поэтому псевдонимы разных дней нельзя связать.
  • Порог публикации. День по стране публикуется, только если в этот день данные прислали не менее 5 разных устройств (для страницы сети — не менее 5 в этой сети).
  • Эмбарго. Публикуются только дни, закончившиеся не менее 7 дн. назад, поэтому данные приложений никогда не говорят, что работает где-то прямо сейчас. Страницы показывают 30 дней до эмбарго; экспорт полевых данных по дням уходит на срок до года.
  • Через туннель. Отчёты, присланные с собственного адреса сервера Colitu, не описывают сеть доступа и игнорируются, как и отчёты о серверах в местах, которых нет на сайте.
  • Отказ от учёта. Запрос приложения с заголовком X-Colitu-Lab: off никогда не учитывается. Переключатель для этого в настройках приложений запланирован.

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

Охват и смещение

  • Точки измерения. Сейчас точек измерения: 22, стран: 17. Все на хостах, которыми управляет Colitu. Соединение из дата-центра фильтруется реже, чем домашнее или мобильное, поэтому такая точка может не заметить вмешательство, нацеленное на потребительские сети. Каждый результат содержит тип сети точки измерения.
  • Серверы. Проверяются только публичные серверы Colitu и только те транспорты, которые они предлагают (TUIC сейчас не предлагается). Результат описывает транспорт на этих серверах из данной сети, а не транспорт вообще.
  • Одна цель. Тест туннеля запрашивает один небольшой URL. Он показывает, переносит ли туннель трафик, а не то, доступен ли через него каждый сайт, и не является мерой веб-цензуры вообще.
  • Страны без точки измерения появляются только через данные приложений, и только когда они включены и превышают пороги.

Конфликт интересов

Colitu управляет и точками измерения, и проверяемыми ими серверами, и предлагает VPN, использующий эти транспорты. Мы говорим об этом прямо, потому что это важно для того, как читать результаты:

  • Результаты описывают транспорты на этих серверах из этих сетей. Они — не рейтинг VPN-провайдеров, и никакие другие провайдеры не измеряются.
  • Ни один транспорт не получает особого отношения. Каждый транспорт проверяется одинаково, в одном и том же раунде, с теми настройками, которые получают пользователи, и каждый сбой учитывается, кроме двух классов, возникающих по нашей вине (ошибки точек измерения и отказ в учётных данных) — они всё равно публикуются.
  • Всё публикуется в сыром виде: каждый результат точек, события, суточные агрегаты и этот метод. Любой может пересчитать каждую цифру на этом сайте по данные и проверить её.

Что публикуется — и что не публикуется никогда

Публикуется: каждый сохранённый результат точки измерения — время, точка, её страна, сеть и тип сети, тест, транспорт, страна сервера, цель базового теста, результат, класс сбоя, времена и скорость загрузки — а также события, суточные агрегаты и счётчики данных приложений, прошедшие пороги.

Не публикуется никогда:

  • идентификаторы и адреса серверов (имена, IP-адреса, порты, ключи) — только страна сервера;
  • IP-адреса хостов точек измерения;
  • IP-адреса или идентификаторы устройств пользователей, которые лаборатория никогда не хранит;
  • данные приложений в реальном времени или для любой ячейки ниже порога по устройствам.

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

Хранение

  • Измерения точек и почасовые счётчики данных приложений: 2 года, затем удаляются.
  • Суточные псевдонимы устройств и их ключи: удаляются при ежедневном подведении итогов, так что псевдоним существует не дольше примерно суток; отдельная очистка в качестве страховки удаляет любые псевдонимы старше 2 дней.
  • IP-адреса и идентификаторы устройств пользователей, а также адреса точек измерения: не хранятся.

Лицензия и ссылки

Данные и графики лицензированы под Creative Commons Attribution 4.0 (CC BY 4.0). Используйте их свободно, в том числе в коммерческих целях, и ссылайтесь как “Colitu Lab, lab.colitu.com”. На страница «Данные и API» есть пример ссылки и запись BibTeX. Названия сетей взяты из DB-IP ASN Lite, также под CC BY 4.0. На карте используется Natural Earth.

Изменения

ВерсияДатаИзменение
1.06 октября 2026Первая опубликованная методика.

Вопросы и исправления: hello@colitu.com. Действующие сейчас настройки (пороги, эмбарго) есть и в API: overview, поле field.