diff --git a/doc/etcp_protocol.txt b/doc/etcp_protocol.txt index 56e09271..35c31326 100644 --- a/doc/etcp_protocol.txt +++ b/doc/etcp_protocol.txt @@ -14,7 +14,8 @@ HELLO/CHALLENGE/CONFIRM и keepalive передаются своим незав inflight_bytes + длина DATA <= inflight_lim_bytes. Проверка выполняется без переполнения. Среди допустимых выбирается минимум inflight_bytes, при равенстве — round-robin. 3. Если DATA не помещается, он остаётся в очереди; для накопленных ACK выбирается - рабочий линк без ограничения DATA-cwnd, с учётом shaper. + рабочий линк без ограничения DATA-cwnd/pacing. ACK-only не увеличивает нагрузку DATA-shaper; + физическая очередь канала остаётся общей, её накопление ограничивают DATA-cwnd/pacing BBR. 4. Выделить ETCP_DGRAM до удаления DATA из очереди и изменения счётчиков. Отправляемый DATA занимает окно выбранного линка и переходит в input_wait_ack. Пакет содержит ACK, опциональные timestamp/измерительные секции и последнюю секцию PAYLOAD. @@ -59,6 +60,9 @@ Selective ACK освобождает отдельную inflight-запись, input_queue даже если подтверждённые записи уже удалены по selective ACK. ACK ограничивается последним назначенным seq (next_tx_id - 1); сравнения учитывают uint32 wrap. BBR каждого линка получает ACK/loss samples и возвращает cwnd и pacing rate. +Скорость — доставленные байты за max(интервал отправки, интервал доставки), по снимкам при отправке. +Интервал между соседними ACK не используется: ACK одной пачки могут обрабатываться в один tick. +Внутренняя полоса — байты/мкс Q16; pacing — байты/с, BDP — байты, без повторного множителя MSS. Лимит DATA — не менее 8192 байт и не более bbr_max_cwnd (по умолчанию 1048576). Отказ из-за нехватки окна сохраняет cwnd_limited до следующего ACK: вычитание ACK не должно скрывать этот факт от BBR. app_limited учитывает ожидающие очереди и