TCP или UDP: в чём разница и что выбрать
TCP и UDP решают одну задачу — доставить данные от программы к программе, — но подходят к ней противоположно. Разберём, чем отличается TCP от UDP, как понять, какой протокол нужен твоему сервису, и что произойдёт, если ошибиться.
Главное различие в одном предложении
TCP гарантирует, что данные дойдут целиком и по порядку, но ради этого готов ждать. UDP не гарантирует ничего, зато не ждёт никогда.
Всё остальное — следствия этого выбора.
Таблица различий
| TCP | UDP | |
|---|---|---|
| Соединение | Устанавливается заранее | Нет, пакеты шлются сразу |
| Подтверждение доставки | Есть | Нет |
| Повтор потерянного | Автоматически | Нет (или силами приложения) |
| Порядок пакетов | Восстанавливается | Как пришли, так пришли |
| Контроль перегрузки | Есть | Нет |
| Задержка | Выше и плавает при потерях | Ниже и стабильнее |
| Накладные расходы | Больше | Минимальные |
| Типичное применение | Сайты, файлы, SSH, базы данных | Голос, видео, игры, DNS |
Как понять, какой протокол у твоего сервиса
Гадать не нужно — это фиксированное свойство сервиса, и почти всегда оно есть в документации. Короткий ориентир:
- Передаются файлы, текст, команды, страницы — TCP. Потеря куска ломает смысл.
- Передаётся поток в реальном времени — UDP. Устаревший кусок не нужен.
- Игра — смотри конкретную игру, единого правила нет.
Последний пункт — главный источник путаницы:
| Сервис | Протокол |
|---|---|
| Minecraft Java Edition | TCP 25565 |
| Minecraft Bedrock Edition | UDP 19132 |
| CS 1.6, Day of Defeat, Condition Zero, Sven Co-op | UDP 27015 (RCON — TCP) |
| Valheim | UDP 2456–2458 |
| Terraria | TCP 7777 |
| Rust | UDP 28015 |
| TeamSpeak 3 | UDP 9987 (голос) + TCP |
| Веб-сервер, API | TCP |
Два издания Minecraft — разные протоколы. Одна игра CS 1.6 — UDP для игры и TCP для админской консоли. Поэтому проверять стоит конкретный сервис, а не «игры вообще».
Что будет, если выбрать не тот
Ничего драматичного — просто не заработает. Трафик уйдёт в протокол, который на той стороне никто не слушает: клиент будет видеть сервер как недоступный или бесконечно подключаться.
Это самая частая причина «туннель поднят, а зайти не могу»: сервер на UDP, а туннель создан TCP. Лечится пересозданием туннеля с правильным протоколом.
Можно ли просто включить оба
Иногда именно это и нужно: у TeamSpeak голос идёт по UDP, а передача файлов и запрос к серверу — по TCP; у серверов GoldSrc игра на UDP, RCON на TCP.
Но «оба» — это не переключатель, а два независимых канала. В туннеле на каждый протокол создаётся свой туннель со своим внешним адресом. Тратить на это слоты имеет смысл только если сервису действительно нужны оба — большинству хватает одного.
Частые вопросы
Какой протокол безопаснее? Ни один. Шифрование — отдельный слой: HTTPS шифрует поверх TCP, WireGuard — поверх UDP.
Какой быстрее? UDP даёт меньшую задержку. По объёму переданных данных на хорошем канале разница невелика — она проявляется при потерях, когда TCP начинает ждать и замедляться.
Почему TCP-порт и UDP-порт с одним номером — разные? Нумерация у протоколов независимая. Операционная система различает их по паре «протокол + номер».
Что использует HTTP/3? UDP — через протокол QUIC, который добавляет надёжность и шифрование поверх UDP по собственным правилам, без задержек, свойственных TCP.
Открыть порт любого из них
Туннель поддерживает оба протокола плюс режим HTTPS — выбор делается одним переключателем при создании. Общий разбор — в статье Как открыть локальный порт в интернет.
Подробнее про каждый: что такое TCP · что такое UDP