В докладе рассказывается про:
- эволюцию и настройки сетевого стека 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 и отправлять можно данные и там и там параллельно.