SPDY Головка блокировки линии

У меня возникают проблемы с пониманием того, как SPDY может решить блокировку HOL.

Цитата: http://chimera.labs.oreilly.com/books/1230000000545/ch02.html#TCP_HOL

Чтобы понять, почему это так, напомните, что каждый TCP-пакет несет уникальный порядковый номер, когда он помещается в провод, и данные должны быть переданы в приемник в порядке (Рисунок 2-8). Если один из пакетов потерян в пути к получателю, все последующие пакеты должны храниться в буфере TCP приемников, пока потерянный пакет не будет повторно передан и не поступит в приемник. Поскольку эта работа выполняется в пределах уровня TCP, наше приложение не имеет видимости в повторных передачах TCP или буферах в очереди пакетов и должно дождаться полной последовательности, прежде чем сможет получить доступ к данным. Вместо этого он просто видит задержку доставки, когда пытается прочитать данные из сокета. Этот эффект известен как блокировка TCP head-of-line (HOL).

Таким образом блокировка HOL существует, потому что TCP гарантирует доставку в порядке. Но здесь пользователь igrigorik говорит, что SPDY позволяет пакету поступать в другом порядке. Но разве SPDY не просто заменяет HTTP? Это означает, что он по-прежнему работает через TCP (от здесь).

Ответ 1

HOLB имеет несколько причин, одна из которых - повторная передача пакетов, но не относится к HTTP и SPDY. Тот, который имеет отношение к HTTP и SPDY, заключается в том, что в HTTP 1.x требуется несколько запросов на запрос.

Представьте, что HTTP-клиент, отправляющий на сервер 2 запросы по одному и тому же TCP-соединению, и что первый ответ "большой" по длине контента, а второй ответ "мал" в длине контента.

Из-за характера протокола HTTP 1.x второй ответ должен дождаться завершения первого ответа. Второй ответ заблокирован первым ответом.

При использовании мультиплексированных протоколов, таких как SPDY и HTTP 2, этот тип HOLB не существует, потому что второй "маленький" ответ может прийти к клиенту задолго до первого "большого" ответа (они могут даже чередоваться).

Диаграмма вопроса на который вы ссылались выше, объясняет это графически.

Илья в своем ответе не ссылался на пакеты TCP, а на "пакеты" HTTP, когда говорил, что они могут быть не в порядке. Представьте себе "пакет" из заголовков HTTP, а "пакет" из данных POST будет загружен на сервер (или в ответ "пакеты" , сделанные из данных, которые будут загружены клиенту). В HTTP 1.x эти "пакеты" HTTP должны быть в порядке (сначала все "пакеты" HTTP "запроса 1", затем все "пакеты" HTTP запроса 2 или сначала все "пакеты" HTTP "ответа 1 и затем все HTTP-пакеты" response2", в то время как в SPDY и HTTP 2 они могут быть не в порядке или даже чередуются.

Отсутствие такого типа HOLB в SPDY и HTTP 2 делает эти протоколы более эффективными, чем HTTP 1.x.

HOLB, вызванный повторными передачами TCP, влияет на любой протокол на основе TCP, включая мультиплексированные протоколы, такие как SPDY и HTTP 2, и дуплексные протоколы, такие как HTTP 1.x.