Dijkstra June 2018 | Page 20

HTTP/2 2. VẤN ĐỀ a. Head-of-line blocking gây ra bởi TCP Ý tưởng của HTTP/2 giúp tránh được HOL giữa các request, tuy nhiên lại mắc phải một dạng HOL khác gây ra bởi giao thức TCP. HTTP/2 truyền nhiều request (stream) trên cùng một TCP connection. Nhưng TCP sẽ không biết về điều này. Dưới góc nhìn của TCP chỉ có những packet được đánh số thứ tự. Nhiệm vụ của TCP là đảm bảo tất cả packet được truyền đi đầy đủ, và đúng thứ tự. Do đó nếu có packet nào bị mất do truyền tải ở tầng IP thì tầng TCP sẽ huỷ toàn bộ các packet phía sau, và bắt đầu truyền lại từ packet bị mất. Hình: Kiến trúc HTTP/2 Trong trường hợp những packet này thuộc những stream khác nhau, thì khi mất mát gói tin của một stream thì các stream còn lại sẽ bị ảnh hưởng. Và head-of-line blocking lại xuất hiện. HTTP/2 được xây dựng trên tư tưởng mỗi TCP connec- tion sẽ có nhiều stream, mỗi packet được truyền tải trong stream sẽ là một frame, các frame này sẽ có đầy đủ các thông tin định danh stream. Hình: HTTP/2 nhiều stream dùng chung một connection Hình: Head-of-line blocking do cơ chế bảo vệ flow của TCP Khi sử dụng, mỗi request sẽ sử dụng một stream độc lập, mỗi frame đều có thông tin định danh cho stream riêng, nên việc thứ tự truyền/nhận của request/response không còn là vấn đề, dữ liệu của frame nào sẽ được đưa vào stream của nó, tương ứng với đó là request/response tương ứng. Như vậy vấn đề head-of-line blocking được giải quyết. b. Stream dùng chung thuật toán chống nghẽn Thuật toán chống nghẽn được thiết kế nhằm giúp TCP sử dụng băng thông tối đa mà nó có thể, tùy vào lượng mất mát gói tin mà thuật toán sẽ tự điều chỉnh lượng băng thông truyền đi. Trong HTTP/2, nhiều stream sẽ dùng chung trên một kết nối, nên sẽ phải sử dụng chung một trạng thái chống nghẽn. Việc này sẽ gây ra vấn đề nếu một gói tin thuộc stream tương ứng bị mất, thì thuật toán chống nghẽn sẽ điều chỉnh làm chậm băng thông của kết nối lại, kéo theo các stream còn lại của kết nối này cũng sẽ bị chậm theo. QUIC - QUICK UDP INTERNET CONNECTIONS Hình: Vấn đề Head-of-line blocking được giải quyết trong HTTP/2 20 DIJSKTRA 1. TỔNG QUÁT Để khắc phục vấn đề head-of-line blocking gây ra bởi TCP, cách duy nhất là thiết kế HTTP/2 trên nền một giao thức khác. QUIC là 1 giao thức xây dựng trên nền UDP, một giao thức thông dụng và có thể dễ dàng tương tác ở userland.