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.