TCP Window Full STM32 - PullRequest
       38

TCP Window Full STM32

1 голос
/ 23 мая 2019

Я разрабатываю приложение ethernet на плате ядра stm32 с использованием библиотеки LWIP и получаю сообщение TCP Window Full , когда моя плата получает данные, как вы можете посмотрите на захват Wireshark. Я несколько раз тестировал и понял, что он перестает работать, когда окно достигает 2144 байтов.

Кто-нибудь знает, как очистить / сбросить это окно? Я знаю, что мог бы увеличить это число, как вы можете видеть на втором фото, но я бы предпочел иметь возможность сбросить или очистить его через некоторое время, потому что в противном случае я бы заполнил память через несколько минут.

Заранее спасибо;)

WhireShark Capture: enter image description here

STM32CubeMX захват конфигурации LWIP: t

1 Ответ

0 голосов
/ 24 мая 2019

«TCP Window Full» происходит, когда ваше окно приема уменьшается до нуля, то есть - буферы приема заполняются. Он будет заполняться до тех пор, пока вы не получите данные из сокета.

Обычно это происходит, когда отправитель отправляет данные быстрее, чем получатель обрабатывает их, или, по крайней мере, получает их из сокета. Когда это происходит, отправитель должен прекратить отправку большего количества данных, пока получатель не сможет снова получить больше. Это происходит после получения данных из сокета, и отправителю сообщают об этом двумя способами:

  1. Получатель отправляет «Обновление окна TCP», которое указывает, сколько места в окне приема снова доступно. Это не тот кадр, который подтвержден отправителем, он может потеряться. Из-за этого есть и второй путь ниже.

  2. Отправитель постоянно опрашивает получателя, отправляя пакеты TCP Keep-Alive (пакеты без данных). Эти пакеты должны быть подтверждены получателем, и поскольку каждый кадр TCP содержит размер окна удаленного конца в своем заголовке, таким образом отправитель может получить информацию о том, сможете ли вы получить снова.

«TCP Window Full» не является ошибкой - Wireshark окрашивает его в черный цвет только для того, чтобы указать, что если у вас есть проблемы с передачей, это может быть то, что вы, возможно, захотите посмотреть. Другим примером такой раскраски являются ретрансляции TCP.

Подводя итог - вы должны получить данные из сокета. Если вы уже делаете это, но в этом случае нечего читать (например, select указывает на отсутствие данных для чтения), то это может указывать на некоторые другие проблемы в вашем конкретном случае.

...