Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implicit acknowledgment via header block acknowledgment #1399

Closed
wants to merge 4 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
27 changes: 23 additions & 4 deletions draft-ietf-quic-qpack.md
Expand Up @@ -489,17 +489,26 @@ After processing a set of instructions on the encoder stream, the decoder will
emit a Table State Synchronize instruction on the decoder stream. The
instruction begins with the '1' one-bit pattern. The instruction specifies the
total number of dynamic table inserts and duplications since the last Table
State Synchronize, encoded as a 7-bit prefix integer. The encoder uses this
value to determine which table entries are vulnerable to head-of-line blocking.
A decoder MAY coalesce multiple synchronization updates into a single update.
State Synchronize or Header Acknowledgement that increased the largest
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reading the section here makes me think perhaps having Header Acknowledgement described before TSS.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, but I want to do that later.

acknolwedged dynamic table entry. This is encoded as a 7-bit prefix integer.
The encoder uses this value to determine which table entries are vulnerable to
head-of-line blocking.

A decoder MAY coalesce multiple synchronization updates into a single update. A
decoder MAY rely on Header Acknowledgement instructions to indirectly
acknowledge changes to the dynamic table. Relying on Header Acknowledgment
instructions exclusively leads to poor compression efficiency if the encoder
waits for an entry to be acknowledged before using it. This happens if the
encoder wants to avoid the risk of blocking at the decoder, or the encoder has
already reached the decoder's limit for blocked streams.

~~~~~~~~~~ drawing
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 1 | Insert Count (7+) |
+---+---------------------------+
~~~~~~~~~~
{:#fig-size-sync title="Table Size Synchronize"}
{:#fig-size-sync title="Table State Synchronize"}

### Header Acknowledgement

Expand All @@ -523,6 +532,16 @@ blocks within a stream have been fully processed.
~~~~~~~~~~
{:#fig-header-ack title="Header Acknowledgement"}

An encoder MUST treat receipt of a Header Acknowledgment as also acknowledging
any dynamic table entries that the header block referenced. That is, this
instruction is also processed as a Table State Synchronize instruction with a
value matching the Largest Reference of the corresponding header block.

A decoder MUST track increases to the largest acknowledged dynamic table entry
caused by acknowledging a header block so that it can correctly generate the
Table State Synchronize instruction.


## Request and Push Streams

HEADERS and PUSH_PROMISE frames on request and push streams reference the
Expand Down