словарик

RTT - это так называемое "Round Trip Time" (Время в пути) время от пакета SYN серверу до ответа от него SYN,ACK .

RTO - Retransmission timeout. Этот параметр не передается в составе tcp пакетов, а вычисляется клиентом и сервером для себя каждый сам, чтобы понимать насколько "тормознутое" устройство с ним работает (хотя по факту тормоза складываются в целом от работы и клиента и сервера ). Вычислять RTO надо для того чтобы знать , когда надо повторно передавать пакет (retransmission), конечно если ответ на него не пришел.

SACK - selective acknowledgements. Опция передаваемая в SYN и ответе SYN/ACK.


TCP DUP ACK tcp duplicate_ack. Это не есть гут и говорит о неправильном обмене между клиентом и сервером.

Если нам (серверу) надо подольше подумать над принимаемыми данными можно искусcтвенно увеличить время ответа на SYN клиенту и тогда пакетов retransmission (от клиента) будет в дальнейшем меньше. Можно попробовать Просто в tcp_listen_input в ветку else if ( flags & TCP_SYN ) добавить задержку например vTaskDelay(100);

IP пакет

TTL - Time To Live - поле (Максимальное значение 0xFF), используемое для предотвращения циклического пути пакета. При прохождении через маршрутизатор, значение уменьшается на единицу, и когда достигает нуля, пакет отбрасывается.

TTS - Type Of Service

TCP SYN клиента

В передачи SYN и ответе SYN/ACK могут быть или не быть несколько опций :

Maximum Segment Size (MSS)
Window Scaling
Selective Acknowledgements (SACK)
Timestamps
Nop

WS - Window Scale - коэффициент масштабирования окна, который в сочетании с 16-битным полем Window в заголовке TCP может увеличивать размер окна приема до максимального значения, составляющего примерно 1 ГБ.

SACK - Selective Acknowledgemen - С помощью выборочного подтверждения получатель данных может оповещать отправителя о любых сегментах, которые прибыли успешно, так что отправителю потребуется повторно передать только фактически утерянные сегменты.

RTO 5 (2500 milliseconds)

Назначение некоторых функций LWIP

Начинать изучение отработки http запросов надо с функции http_recv . Именно сюда залетают данные из установленных tcp соединений с типом HTTP . Код функции http_recv общий для версия 1.4.1 и 2.1.2 в LWIP.

http_parse_request - надо понимать , что функция http_parse_request вызывается только в конце передачи , когда hs->post_content_len_left станет равен 0 . До этого момента вызывается http_post_rxpbuf столько раз сколько пакетов передается в одном post запросе .

http_parse_request делает окончательный парсинг всего http запроса (post , get, ..), когда он получен полностью.

На признаться , что код внедрения отработки post запросов в версию 1.4.1 не оказалось простым делом. Пришлось трассировать и внимательно изучать каждую функцию. Когда понимание пришло в итоге пришлось править родной код, так как изначально работать ничего и не должно было.