Describe receiver-clock bandwidth bounds and ACK wire format
This commit is contained in:
1 parent
6fc964031c
commit
ea5a0b7d5a
2 files changed
+19
-1
No files matched your search
+17
-1
@@ -80,6 +80,18 @@ ACK ограничивается последним назначенным seq (
|
||||
BBR каждого линка получает ACK/loss samples и возвращает cwnd и pacing rate.
|
||||
Скорость — доставленные байты за max(интервал отправки, интервал доставки), по снимкам при отправке.
|
||||
Интервал между соседними ACK не используется: ACK одной пачки могут обрабатываться в один tick.
|
||||
ACK с подтверждениями также возвращает точку приёма своего пути: накопленные DATA-байты и монотонное время
|
||||
последнего увеличения счётчика. В счётчик входят допустимые сохранённые/уже доставленные DATA, включая копии;
|
||||
OOM до сохранения и отвергнутые DATA его не меняют. Считаются байты полезной нагрузки секции, без заголовков.
|
||||
При отправке попытка запоминает известную точку. ACK действующей попытки продвигает точку пути;
|
||||
повторный/чужой ID её не меняет, переставленные ACK не откатывают. Противоречивая пара логируется и игнорируется.
|
||||
При положительных дельтах добавляется нижняя граница интервала ceil(delivered*delta_rx_us/delta_rx_bytes).
|
||||
Итоговый interval — максимум трёх границ; BW может только уменьшиться относительно прежнего sample.
|
||||
Счётчики и времена — uint64, часы двух сторон не сравниваются. Нулевые/неизвестные дельты не создают границы.
|
||||
Если интервал не представим в uint32, sample не используется для BW вместо насыщения, завышающего скорость.
|
||||
После пустого физического flight база начинается заново, чтобы простой не занижал скорость следующей передачи.
|
||||
Reset потока обнуляет точки приёма; исчерпание локального 64-битного счётчика закрывает соединение с ERROR.
|
||||
RTT/min_rtt, формула RTO, политика окна и дедлайн ACK не корректируются приёмной точкой.
|
||||
Внутренняя полоса — байты/мкс Q16; pacing — байты/с, BDP — байты, без повторного множителя MSS.
|
||||
Минимальное окно BBR — четыре DATA-фрагмента normalizer; максимальное — bbr_max_cwnd (по умолчанию 1048576).
|
||||
8192 — нижняя допустимая граница настройки bbr_max_cwnd; транспорт не повышает до неё текущее окно.
|
||||
@@ -121,7 +133,11 @@ pending/частичный буфер normalizer; ограничение окн
|
||||
- seq: uint32_t — номер подтверждаемого пакета
|
||||
- attempt_id: uint64_t — ID конкретной физической попытки DATA; возвращается только тем же путём
|
||||
- delay_us: uint32_t — задержка между приёмом DATA и формированием ACK, мкс; UINT32_MAX исключает RTT sample
|
||||
Каждая запись = 16 байт, база ACK = 8 байт; count=0 допустим для передачи till.
|
||||
При count>0 после всех записей обязательно добавляется [rx_data_bytes(8 LE)][rx_data_time_us(8 LE)].
|
||||
Это точка приёма всего пути на момент формирования ACK, а не отдельной подтверждаемой попытки.
|
||||
Время — монотонные микросекунды получателя при последнем положительном приросте DATA-байтов; 0/0 — точки нет.
|
||||
Каждая запись = 16 байт, база ACK = 8 байт; полный размер = 8+16*count+(count>0 ? 16 : 0).
|
||||
count=0 допустим для передачи till, точки приёма не содержит. До обработки проверяется вся длина ACK.
|
||||
ACK_REQUEST: [0x0a], одна секция длиной 1 байт, запрос повторной отправки актуального till.
|
||||
в) channel timestamp (добавляется после выбора канала передачи, если есть свежие данные):
|
||||
[0x06] [RET_Timestamp(2 байта LE)] [RECV_Rel_Timestamp(2 байта LE)]
|
||||
|
||||
@@ -49,6 +49,8 @@ void etcp_tx_complete(struct ETCP_DGRAM* dgram, int success);
|
||||
* Неизвестный старый ID не создаёт измерение и не вычитает окно. UINT32_MAX delay — RTT недостоверен.
|
||||
* peer_rx_bytes/time_us — согласованная точка приёма пути из ACK; 0/0 — неизвестна.
|
||||
* Достоверная пара ограничивает BW темпом приёма, сохраняя границы send/ACK; RTT и доставка от неё не зависят.
|
||||
* interval=max(send_us,ack_us,ceil(delivered*delta_rx_us/delta_rx_bytes)); дельты от снимка при отправке.
|
||||
* Используется неубывающая точка пути; старый/чужой attempt не меняет её, перестановка ACK не откатывает.
|
||||
* Непредставимый интервал не создаёт оценку BW. Пустой flight заново начинает приёмную базу, исключая простой. */
|
||||
void etcp_tx_ack(struct ETCP_LINK* link, uint32_t seq, uint64_t attempt_id, uint32_t receiver_delay_us,
|
||||
uint64_t peer_rx_bytes, uint64_t peer_rx_time_us);
|
||||
|
||||
Reference in new issue
Block a user