UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Что мы знаем об IP-сетях

  • Мы отправляем пакеты
  • черный ящик их пересылает клиенту
  • клиент собирает пакеты

Внутри черного ящика есть уровни:

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Давайте сравним TCP и UDP. В них сильно отличается структура пакетов:

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Главное: TCP задуман как протокол надёжной доставки данных, а UDP — нет. Может ли оказаться, что UDP лучше решит задачу надёжной доставки?

Цели на сегодня

  • Как работает сеть
  • Зачем сравнивать TCP или что с ним не так
  • С чем и на чём сравнивать TCP
  • Как это сделал Google
  • Какое будущее сетевых протоколов нас ждёт

Теорию и математику обсуждать не будем. Будем разбирать практические кейсы.

Мобильный мир победил

Важно: сначала появились проводные сети, но беспроводные, которые появились позже, сейчас явно победили. Большая доля трафика — мобильный трафик или хотя бы вайфай.

В беспроводных сетях бывают потери пакетов, смена порядка и jitter. Протокол TCP/IP скрывает от нас эти ошибки.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Вот средние параметры соединения у пользователей мобильного интернета.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Итоги:

  • > 80% используют беспроводной интернет
  • парметры беспроводных сетей постоянно меняются
  • в них высокие показатели packet loss, jitter, reordering
  • фиксированный асимметричный канал, возможна смена IP-адреса

Статистика показывает, что потребление мобильного видео зависит от качества канала.

Получается, что TCP не очень эффективен для доставки контента.

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

Ошибки уменьшают утилизацию канала, а распараллеливание при ошибках помогает увеличить утилизацию:

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Почему нам не подходит TCP

Итого: зачем же нужно сравнивать ТCP?

  • беспроводные сети победили и они нестабильны
  • потребление контента зависит от скорости интернета (а мы хотим, чтобы пользователи потребляли больше)
  • TCP плохо утилизирует канл на нестабильных сетях. Распараллеливание помогает, но не всё можно распараллелить.

Что с этим делать?

  • Можно сделать свой протокол рядом с TCP и UDP. И годами ждать, пока его поддержат все участники интернетов.
  • Или сделать свой надёжный протокол поверх UDP в User Space.

получаем smUDP: self-made UDP

У разного контента разные профили потребления сети.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

HTTP 1.1 и HTTP/2

Конечно же мы должны сравнить протоколы на HTTP 1.1 и HTTP/2.

HTTP 1.1 предлагает использовать по одному соединению на каждую единицу контента. HTTP/2 — одно мультиплексированное соединение.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

При этом в HTTP 1.1 клиент (браузер) обычно использует пул соединений. Проблема в том, что между соединениями есть конкуренция. Картинка, которую пользователь уже пролистал и больше не увидит, конкурирует с другой, которая впереди в ленте. И в HTTP 1.1 сложно отменить загрузку — только закрыть сокет и отменить соединение.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

HTTP/2 лучше:

  • бинарный, со сжатием заголовков;
  • есть мультиплексирование,
  • приоритизация,
  • отмена загрузки,
  • и server push.

Приоритизация позволяет получить приоритетный контент раньше:

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Server push: сервер может отдать контент, который точно понадобится в будущем.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Отмена загрузки: если клиенту уже не понадобится контент, клиент может отказаться от загрузки.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Сравниваем TCP и smUDP

Итого, на чём нам сравнивать TCP и smUDP

  • Профили сети: WiFi, 3G, LTE
  • Профили потребления:
    • стриминг
    • мультиплексирвоание и приоритизация с отменой загрузки (в HTTP/2)

Простая сеть: bandwidth + RTT

В TCP важен размер буфера отправки. Сервер держит контент в буфере, пока не получит подтверждение (acknowledgement), что контент получен. Но чем больше RTT, тем дольше ждать подтверждения.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Если мы увеличим размер буфера, то фактическая ширина канала вырастет.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Но всё не так просто. Важны on-the-fly packets. Это те, которые мы отправили, но ещё не получили подтверждения. Если буфер слишком мал, то мы недоиспользуем сеть, как мы уже поняли. Но если буфер слишком большой, то мы приходим к распуханию буфера (bufferbloat). Буфер заполнен кучей on-the-fly пакетов, а скорость снова маленькая.

Казалось бы, давайте временно увеличивать буфер, когда нам нужно отправить много пакетов. Но буфер нельзя просто так уменьшить.

А если у нас свой протокол, то мы можем:

  • уменьшать буфер
  • раньше отправлять более важные пакеты
  • если клиент отправил cancellation, сбросить пакеты из буфера

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Как это делается? Присваиваем отправляемым пакетам сквозной sequence number.

Итак:

  • размер буфера имеет значение
  • mutable buffer — это хорошо

Сложная сеть: bandwidth + RTT + packet loss

Стандартный алгоритм: если за установленное время сервер не получил acknowledgement, он повторно посылает пакет. Давайте снова будем терять пакеты.

Разберёмся, как работает Congestion Control.

Для начала, TCP window: количество одновременно отправляемых пакетов. Отправитель начинает с 10 и разгоняется, увеличивая количество. Если в какой-то момент пакеты теряются, он уменьшает окно и снова разгоняется.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Congestion Control придуман для предотвращения перегрузки сети. Вот где-то в сети есть роутер, который больше всего нагружен. Он умный: не ждёт когда совсем перегрузится, а начинает дропать пакеты чуть раньше, чтобы отправитель уменьшил окно.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Вся эта схема придумана давным-давно для проводных сетей. Там потеря пакетов могла означать только одно: где-то перегружен узел, надо снизить скорость. Но в беспроводных сетях не так! Там пакеты теряются просто потому что соединение беспроводное.

Получается, есть два типа потерь:

  • congestion loss, от переполнения
  • random loss, от плохого беспроводного соединения

Каким бывает Congestion Control

Congestion Control эволюционирует. Нам особенно интересны реализации Cubic и BBR.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Если скорсть растёт, BBR схлопывает окно заранее, Cubic дожидается потери пакетов и тогда схлопывает окно.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Работают они так:

  • BBR прощупывает размер окна и поддерживает его. За счёт этого получается минимальная задержка. BBR различает congestion loss и random loss.
  • Cubic работает агрессивно: переполняет буфер до потери пакетов, сбрасывает скорость, потом снова постепенно повышает.

Совсем сложная сеть: bandwidth + RTT + packet loss + jitter

Казалось бы, BBR решит все наши проблемы. Но есть ещё и jitter! Он влияет в том числе на получение acknowledgements от получателя. То есть в некоторых случаях пакет доставляется успешно, но отправитель не успевает получить подтверждение и шлёт пакет снова. BBR уязвим к высокому jitter.

Было бы здорово, если бы сервер мог знать jitter клиента. Но в стандартном пакете acknowledgement (ACK Frame) в TCP этой информации нет. Зато мы можем добавить её в smUDP ACK Frame.

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Мобильные сети асимметричны. Обычно 70% на приём и 30% на отправку. Стоит разделить jitter на приём и отправку.

Какой congestion control выбрать на сервере?

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

А на клиенте всегда Cubic и мы не можем на это повлиять.

Выводы такие:

UDP против TCP, или Будущее сетевого стека (highload обсуждение)

Добавить в избранное -пригодится

4 КОММЕНТАРИИ

  1. Статья поднимает важные вопросы о работе IP-сетей и сравнении протоколов TCP и UDP, однако интересует несколько моментов, которые, возможно, стоит уточнить. Например, можно было бы подробнее рассмотреть, как именно протокол UDP может использоваться для более надежной доставки данных в определенных сценариях. Если UDP изначально не предназначен для таких целей, то какие механизмы можно внедрить в приложения, использующие этот протокол, чтобы минимизировать проблемы, связанные с потерей пакетов и переупорядочиванием?

    Еще один интересный момент — это влияние и характеристики беспроводных сетей на выбор протокола. Можно было бы добавить информацию о том, в каких случаях использование TCP более оправдано, а в каких — UDP. Например, в реальном времени играх, где важна минимальная задержка, может быть целесообразнее использовать UDP, несмотря на возможность потерь.

    Как Вы думаете, в каких еще прикладных задачах было бы полезно применить подходы, характерные для протокола UDP, и какие потери в качестве данных при этом могут быть допустимыми?

  2. В статье поднимается важная тема о различиях между протоколами TCP и UDP в контексте современного использования беспроводных сетей. Интересно, что вы упомянули о том, что TCP обеспечивает надежную доставку, а UDP — нет. Однако, учитывая, что в беспроводных сетях часто возникают проблемы с потерями пакетов, например, можно ли рассматривать использование UDP в комбинации с дополнительными методами контроля за потерями при передаче данных?

    Примером такого подхода могут служить различные технологии, которые используют протокол UDP, но интегрируют в себя механизмы контроля, такие как RTP (Real-time Transport Protocol) для потокового аудио или видео. Это может быть интересным направлением для исследования в вашей статье.

    Также вы затронули вопрос о будущем сетевых протоколов. Наблюдается ли тенденция перехода на более надежные протоколы в условиях мобильного трафика, как это происходит с переходом на 5G? Чи не будут ли потребности пользователей в надежности и качестве связи влиять на развитие новых протоколов? Могли бы вы подробнее осветить, какие изменения ожидаются в сетевых протоколах по мере развития беспроводных технологий?

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь

+ 74 = 79

360 Javascript Viewer: Просмотр 360-градусных изображений на сайте — обзор и настройка

360 Javascript Viewer — это мощный инструмент для WordPress, который позволяет добавлять на сайт интерактивные 360-градусные изображения. С его помощью можно создавать эффектные визуальные...

3CX Free Live Chat, Calls & WhatsApp: Интеграция чата, звонков и WhatsApp на сайт — обзор и настройка

В современном мире онлайн-коммуникаций важно предоставлять клиентам удобные способы связи. Плагин 3CX Free Live Chat, Calls & WhatsApp позволяет интегрировать на ваш сайт сразу...

3D Viewer – WP 3D Model Viewer Plugin: Просмотр 3D-моделей на сайте — обзор и настройка

3D Viewer – WP 3D Model Viewer Plugin – это мощный инструмент для интеграции 3D-моделей на ваш сайт, созданный специально для WordPress. Этот плагин...

99minds Giftcard: Настройка подарочных карт для WooCommerce — обзор и настройка

Подарочные карты — это отличный способ привлечь новых клиентов и повысить лояльность существующих. Если вы используете WooCommerce для управления своим интернет-магазином, то плагин 99minds...

A WordPress Testimonial Plugin to Showcase Testimonial Slider, Testimonial Grid and More: Solid Testimonials: Управление отзывами и рекомендациями — обзор и настройка

Solid Testimonials — это мощный и гибкий плагин для WordPress, который позволяет легко управлять отзывами и рекомендациями на вашем сайте. С его помощью вы...

ACF: Better Search: Улучшение поиска с помощью Advanced Custom Fields — обзор и настройка

Если вы используете WordPress и Advanced Custom Fields (ACF) для создания кастомных полей, то наверняка сталкивались с проблемой поиска по этим полям. Встроенный поиск...

AI Image Generator by ChatGPT: Генерация изображений с помощью ChatGPT — обзор и настройка

AI Image Generator by ChatGPT — это инновационный плагин для WordPress, который позволяет создавать уникальные изображения с помощью искусственного интеллекта. Этот инструмент идеально подходит...

AI Proposal Builder: Создание предложений с помощью искусственного интеллекта — обзор и настройка

AI Proposal Builder — это инновационный плагин для WordPress, который позволяет автоматизировать процесс создания профессиональных предложений с помощью искусственного интеллекта. Этот инструмент идеально подходит...

AI Writer: Content Generator GPT | ChatGPT: Генерация контента с помощью GPT и ChatGPT — обзор и настройка

AI Writer: Content Generator GPT | ChatGPT — это мощный инструмент для автоматизации создания контента на основе искусственного интеллекта. Этот плагин позволяет генерировать тексты,...

ПОХОЖИЕ СТАТЬИ

Обзор лучших WYSIWYG web редакторов: выбор, преимущества и недостатки

WYSIWYG web редакторы, это редакторы, которые используются для работы с контентом сайта. Как правило в каждой из cms идёт свой выбор редакторов, но на...

PWA для сайтов,что это, как использовать и как установить

Новая достаточно технология PWA расшифровывается как прогрессивное мобильное приложение и его задачей является создание мобильного приложения сайта на любых мобильных устройствах. Это естественный виток...

Сборка WordPress сайта от Ok2web — оптимизировано и настроено

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

Поздравляю с новым 2018 годом. Мои пожелания!

Хочется всех поздравить с Новым годом и пожелать по настоящему приятного и нужного на весь год. Но странное дело, задумался, а что же пожелать, чтобы...

Яндекс начинает бороться с агрессивной рекламой на сайтах

Только недавно Google объявил, что будет контролировать уровень рекламной насыщенности через Chrome, а тут уже и Яндекс подхватил инициативу, также высказавшись о необходимости фильтрации...

Мои мини мемуары за 2017 год, отчёт и пожелания

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

Защита сайта от вирусов, лечение сайта от вирусов и проверка

Вообще заражение сайтов вирусами вполне возможная участь для сайта на любой системе cms и для Wordpress в том числе. Вылечить сайт от вирусов возможно...

Ошибка импорта в PHPMyAdmin: достигнут временный лимит.

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

Полезные команды для проверки работы MySql

Собрал список, который занимал у меня штук 30 открытых вкладок. Когда я понял, что сил по ним бегать нет, то решил собрать такой материал,...

Настройка my.cnf для стабильной работы Mysql

Один из важных моментов в скорости работы сайта, это правильная оптимизация конфигурационного файла базы данных my.cnf, с которым многие сталкиваются в процессе оптимизации системных...

Настройка OPCache для оптимизации производительности сервера и ускорения работы PHP скриптов

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

Список кодов ответов FTP (ФТП) при соединении

Полный список кодов ответов FTP для web мастеров. Здесь вы сможете найти полный список ответов ФТП при создании соединения. Ответ FTP сервера на любую...
OK2WEB
OK2WEB
Более 12 лет занимаюсь разработкой и продвижением сайтов. Городские порталы, информационные и новостные сайты. Сейчас в основном разрабатываю интернет магазины и коммерческие сайты. Если у вас есть вопросы пишите, стараюсь оперативно ответить и помочь.