Назад в библиотеку
Сделаем TCP быстрее
Автор: Yuchung C.
Источник: https://habr.com/ru/post/136926/
Компания Google опубликовала ряд рекомендаций, как уменьшить задержку
(latency) для TCP-соединений между веб-сервером и браузером. В этих
рекомендациях обобщаются исследования, которые компания вела в течение
нескольких лет.
- Увеличьте первоначальный размер congestion window до 10 (IW10). Сейчас
в начале TCP-соединения отправляется три пакета данных в три раунда (RTT)
для передачи небольшой информации (15 КБ). Наши эксперименты показывают,
что IW10 уменьшает сетевую задержку для веб-соединений более чем на 10%;
- Уменьшите первоначальный таймаут с 3 секунд до 1 секунды. RTT в 3
секунды был приемлем пару десятилетий назад, но в современном интернете
нужен гораздо меньший таймаут. Наше обоснование для этого хорошо
задокументировано здесь;
- Используйте TCP Fast Open (TFO). Для 33% HTTP-запросов браузеру сначала
нужно потратить один RTT на установление TCP-соединения с удалённым пиром.
Большинство HTTP-ответов умещаются в первое окно насыщения
(congestion window) из десяти пакетов, удваивая время отклика. TFO
устраняет эту избыточность, включив HTTP-запрос в первый пакет TCP SYN.
Мы показывали, что TFO уменьшает время загрузки страницы в среднем на 10%,
а во многих ситуациях — более чем на 40%. Есть научное исследование, а
также мы подготовили драфт стандарта, которые нацелены на разрешение таких
проблем, как потеря пакетов и DDoS-атаки при использовании TFO.
- Используйте механизм PRR (Proportional Rate Reduction) для TCP. Потери
пакетов указывают на нарушение или перегрузку в сети. PRR — новый алгоритм
для восстановления потерь, который равномерно распределяет повторно
передаваемые пакеты и восстанавливает потери, возникшие из-за перегрузки
сети. Этот алгоритм быстрее, чем используемый сейчас механизм RFC 3517,
поскольку способен изменять частоту передачи пакетов в зависимости от
уровня потерь. Алгоритм PRR уже включён в ядро Linux и сейчас оформляется
как часть стандарта TCP.
Кроме того, мы разрабатываем алгоритмы для более быстрого восстановления
соединения в перегруженных сетях сотовой связи и для гарантированной доставки
2-RTT в процессе загрузки. Вся наша работа над TCP является open-source и
публично доступной. Мы распространяем наши инновации через ядро Linux,
предложения стандартов IETF и научные публикации. Наша цель — вместе с
представителями индустрии и научными организациями усовершенствовать TCP
для всего интернета.