UDP против TCP, или Будущее сетевого стека

В докладе рассказывается про:

  • эволюцию и настройки сетевого стека TCP/IP в Linux и Android, iOS;
  • проблемы TCP: в плохих сетях, параллельной доставки данных, приоритизации, смены IP…
  • развитие QUIC и о проблемах UDP- и User Space-протоколов, особенно для HL-проектов;
  • рассказывают об опыте написания своих сетевых протоколов в User Space поверх UDP, работающих для десятков миллионов пользователей.

Данная статья является лишь тезисами к прикрепленному видео.

Источник

Докладчик: Александр Тоболь (Одноклассники).

Тезисы

TCP - решает проблемы packet loss, reordering, jitter за нас.

smUdp - Протокол надстройка Одноклассников над udp, + к надежности доставки

RTT (англ. Round Trip Time) - интервал времени между отправкой пакета и окончанием его обработки на принимающей стороне. RTT позволяет определять двусторонние задержки по маршруту, т.е. косвенно определять занятость полосы пропускания.
В большинстве случаев данный интервал отслеживают с помощью ICMP протокола. Зависимость RTT от занятости полосы пропускания - нелинейная обратная величина.

ICMP (англ. Internet Control Message Protocol) - Протокол обмена управляющими сообщениями позволяет маршрутизатору сообщить конечному узлу об ошибках, с которыми машрутизатор столкнулся при передаче какого-либо IP-пакета от данного конечного узла.

HTTP2.0: Server Push - позволяет серверу превентивно «проталкивать» ресурсы веб-сайта клиенту, прежде чем пользователь запросит их явно. То есть мы можем заранее отправить то, что, как мы знаем, понадобится пользователю для запрашиваемой страницы.

HTTP2.0: reset - позволяет отменять загрузку данных.

Flow Control - Управление потоком передачи данных — в компьютерных сетях, механизм, который притормаживает передатчик данных при неготовности приёмника. Различают три основных способа:

  • аппаратный, при котором сигналы «готов/занят» передаются по отдельным физическим линиям связи. Наиболее известна такая реализация в интерфейсе RS-232.
  • программный, при котором программный флажок «готов/занят» взводится и сбрасывается вставкой в поток данных специальной уникальной последовательности (XOn/XOff). Применяется в программных драйверах интерфейса RS-232 как альтернатива аппаратному контролю потока в случаях неполного соединительного кабеля.
  • протокольный, при котором программный флажок «готов/занят» взводится и сбрасывается специальными соглашениями в рамках протокола обмена данными. На сегодня является практически единственным применяемым способом контроля потока. Наиболее известный пример — реализация контроля потока в протоколе TCP методом скользящего окна.

TCP congestion control - Протокол управления передачей использует алгоритм предотвращения перегрузки сети, который включает в себя различные аспекты схемы аддитивного увеличения / мультипликативного уменьшения, с другими схемами, такими как медленный запуск и окно перегрузки, для достижения предотвращения перегрузки.

Cubic - congestion control, который смотрит на потерянные пакеты и схлопывает размер окна.

BBR (Bottleneck Bandwidth and RTT) - В отличие от классических алгоритмов Reno и CUBIC, использующих потерю пакетов в качестве индикатора перегрузки, в BBR применяются методы моделирования канала связи, прогнозирующие имеющуюся пропускную способность через последовательные проверки и оценку времени приема-передачи (RTT), но не доводя до потери пакетов или задержек в передаче. На начальной стадии соединения BBR оценивает потолок пропускной способности канала, затем снижает интенсивность отправки для разгрузки очереди и переходит в режим корректировки, то повышая, то снижая интенсивность отправки, балансируя между максимальной пропускной способностью и незаполненностью очереди пакетов (борьба с промежуточной буферизацией). Но он боится jitter, т.к. он его обманывает.

smUdp ack frame - записывает данные при отправке и на стороне клиента. Таким образом высчитывая jitter.

TFO (TCP Fast Open) - если ты с сервером уже 3way handshake и у тебя кука есть, то ты можешь ускориться повторное подключение и подключится+передать данные за 2 пакета. syn+coockie+get -> syn+ack+data <-. Это будет 0-RTT. Чтобы юзать в sendto MSG_FASTOPEN.

TLS 1.3 - в 2 раза ускоряет весь процесс за счет объединения нескольких шагов, сокращая время до начала обмена информацией. Последовательность получается следующая:

  • Клиент сообщает серверу о системах шифрования, с которыми он может работать.
  • Сервер одобряет системы и передает свой ключ.
  • Клиент предоставляет сессионные ключи.

zeroTLS 1.3 - Режим, в котором сервер и клиент могут установить соединение по старым ключам, если они уже обменивались пакетами. Такой подход сократит время до начала приема-передачи данных.

IP migration - Смена айпишника во время общения с сервером. В tcp не возможно, а вот прикрутить к udp можно - если сервер запоминает устройство и ключ.

NAT unbinding - Проблема в том что для TCP нат знает что клиенту не стоит ничего менять пока FIN не прийдет, а для udp не понятно сколько чего хранить. Решается ping-pong пакетами.

Pacing пакетов - Технология прорежения пакетов, “размазывая” их по времени. Увеличивает надежность передачи в связи с тем что размазанные пакеты по времени с меньшей вероятностью забьют буфер где-нибудь.

TLP (англ. tail lost probe) - Отправка хвостовых потерянных данных TCP соединения.

QUIC (сокр. от англ. Quick UDP Internet Connections; произносится quick) — экспериментальный интернет-протокол, разработанный Google в конце 2012 года. QUIC позволяет мультиплексировать несколько потоков данных между двумя компьютерами, работая поверх протокола UDP и содержит возможности шифрования, эквивалентные TLS и SSL. Гугл говорит что HTTP3 будет на QUIC. Уже сейчас из хрома гугл и ютуб на gquic работают.

Multipath - технология подключения узлов сети хранения данных с использованием нескольких маршрутов, например юзер подключен и к wifi и 4g и отправлять можно данные и там и там параллельно.

comments powered by Disqus