SOCKS5 как протокол очень лёгок — рукопожатие занимает несколько десятков байтов и после начала передачи данных не добавляет никаких накладных расходов. Тем не менее на практике он кажется медленным обычно не из-за протокола, а из-за конфигурации клиента.
Реальная цена: круги рукопожатия
Каждый круг стоит одного времени приёма-передачи (RTT). Если RTT до прокси составляет 34 ms, только установка соединения приближается к 200 ms. Повторное использование соединения устраняет эту стоимость.
1. Используйте пул соединений
Здесь наибольший выигрыш. Открывать новое SOCKS5-соединение на каждый запрос — значит каждый раз платить стоимость рукопожатия. С keep-alive вы можете пропускать несколько запросов через один и тот же туннель.
Самая частая ошибка — создавать на каждый запрос новый объект Session или agent . Это означает, что пул не работает вообще.
2. Сбалансируйте тайм-ауты
Слишком короткий тайм-аут обрывает нормальные запросы; слишком длинный — заставляет ждать мёртвые соединения. В SOCKS5 нужно настроить три отдельных значения:
| Этап | Рекомендуется | Примечание |
|---|---|---|
| Подключение (connect) | 10–15 с | Время до достижения прокси |
| Чтение (read) | 25–40 с | Время ответа целевого узла |
| Ожидание в пуле (pool) | 5–10 с | Ожидание свободного соединения |
Если точка выхода — домашняя линия или мобильная сеть, увеличьте эти значения. На мобильных прокси тайм-аут чтения в 10 секунд обрывает значительную часть нормальных запросов.
3. Управляйте стоимостью DNS-разрешения
socks5h использование предотвращает утечку, но переносит разрешение на прокси. Если резолвер прокси медленный, это создаёт дополнительную задержку. Есть две точки баланса:
- Приоритет приватности:
socks5hиспользуйте и примите дополнительную задержку. - Приоритет скорости, приватность вторична: Выполняйте разрешение локально и отправляйте IP — но доменное имя утечёт в локальную сеть.
- Баланс:
socks5hиспользуйте, но если список целей фиксирован, держите соединения открытыми долго; разрешение выполняется один раз.
4. Правильно настройте параллелизм
Пропускная способность выходит на плато примерно на 32, тогда как p95-задержка быстро растёт. Оптимальная точка обычно там, где начинается плато; дальше растёт только очередь.
Для расчёта параллельности смотрите нашу статью о лимите одновременных соединений можно посмотреть.
5. Не забывайте про сжатие
Поскольку SOCKS5 ничего не знает о содержимом, решение о сжатии полностью на стороне клиента. Accept-Encoding: gzip, br убедитесь, что заголовок отправляется — на текстовом содержимом это даёт экономию 65–80% и напрямую отражается на времени.
Измерение
time_connect вместе с time_appconnect разница между ними показывает суммарную стоимость рукопожатия SOCKS5 и установки TLS.
Для более полного измерения к нашей статье о тесте скорости и тест пинга .
Резюме
Сам по себе SOCKS5 — быстрый протокол; медлительность почти всегда происходит из отсутствия повторного использования соединений. Правильно настройте пул, подберите тайм-ауты по типу выхода, определяйте параллелизм измерениями и сохраняйте сжатие. Эти четыре пункта вместе заметно повышают эффективную скорость типичной операции на SOCKS5. За вариантами продуктов на нашу страницу SOCKS5-прокси можно посмотреть.