Что такое QUIC и HTTP/3
Вчера, в новой статье мы рассказали, как включить поддержку QUIC и HTTP/3 в веб-сервере Angie. Но далеко не все знают для чего и зачем это нужно.
Начнем с того, что обычный HTTP давно уже перестал быть текстовым протоколом и передает самые различные данные и количество их от день ото дня растет.
Современный сайт – это не просто страничка с текстом и картинками, а полноценное веб-приложение. И протокол TCP начал играть сдерживающую роль. Как мы все знаем, TCP – протокол с подтверждением доставки, если этого не случилось, то он будет посылать данные повторно.
Ну это же не плохо? А это как посмотреть. Если к качеству связи нет претензий, то все работает хорошо, а если нет, то начинаются проблемы. Все данные прикладных протоколов, работающих поверх TCP, разбиваются на сегменты и помещаются в буфер отправки.
Если сегмент доставлен получателю, то он удаляется из буфера и уступает место другому, если же нет, то он отправляется повторно. Таким образом мы можем получить ситуацию, когда сервер многократно отправляет одни и те же сегменты блокируя тем самым отправку других. Это называется проблемой блокировки очереди.
Изначально, протокол HTTP и вовсе подразумевал отдельное соединение для каждого запроса, т.е. если на страничке есть десяток картинок, скриптов, стилей и иных элементов, то на каждое из них открывалось отдельное TCP-соединение.
Это серьезно снижало производительность протокола, так как значительное время и ресурсы тратились на установление соединения, а не передачу данных. С шифрования ситуация стала еще хуже, так как добавились накладные расходы на согласование параметров шифрования и установление защищенного соединения.
Многие эти проблемы были решены компанией Google в протоколе SPDY на базе которого впоследствии был создан HTTP/2. Хотя стандарт и не подразумевает обязательного шифрования фактическое использование HTTP/2 возможно только поверх TLS (TLS 1.2 и выше).
В новом протоколе были решены многие проблемы производительности, в частности введена конвейеризация запросов и мультиплексирование их в одно TCP-соединение, это позволило значительно сократить накладные расходы и увеличить скорость работы протокола.
Но проблема блокировки начала очереди никуда не делась и решить эту проблему можно было только сменой протокола транспортного уровня.
И тут снова подсуетилась компания Google, разработав новый протокол QUIC, который использует в качестве транспорта UDP. Так как UDP не гарантирует доставку, то никакой блокировки начала очереди не может быть в принципе.
Также UDP использует простую модель передачи без установления соединения, что также положительно влияет на производительность. При этом вопросы целостности данных и контроля доставки берет на себя протокол QUIC.
Также QUIC сразу интегрирован с криптографией и требует для своей работы не ниже TLS 1.3. Также QUIC умеет повторно использовать текущее соединение даже при переподключении клиента на другой канал связи, что важно для мобильных пользователей.
Точно также, как и в случае с HTTP/2 протокол QUIC лег в основу HTTP/3 и начинает постепенное распространение в сети интернет. Это не значит, что нужно прямо сейчас бежать добавлять поддержку HTTP/3 рабочим серверам. Но на новых установках при наличии возможности включить поддержку HTTP/3 это сделать желательно.
Post #4256
2.97K