реализация управления потоком - как

Я отправляю 1k данных, используя TCP/IP (используя FreeRTOS + LwiP). Из документов я понял, что протокол TCP/IP имеет управление потоком внутри самого стека, но это управление потоком зависит от сетевых буферов. Я не уверен, как это может быть обработано в моем сценарии, описанном ниже.

  1. Получение данных размером 1 КБ с использованием TCP/IP от Wi-Fi (эта скорость передачи данных будет в 20 Мбит/с)

  2. Полученные данные Wi-Fi помещаются в очередь из блоков размером 10 КБ, каждый блок имеет размер 1 КБ.

  3. Из очереди берется каждый блок и отправляется на другой интерфейс с более низкой скоростью 1 Мбит/с.

Итак, в этом сценарии мне нужно вручную реализовать управление потоком между данными из очереди Wi-Fi ‹->? Как я могу этого добиться?


person Sorcrer    schedule 16.12.2014    source источник


Ответы (1)


Нет, вам не нужно реализовывать управление потоком самостоятельно, алгоритм TCP позаботится об этом внутри.

В основном происходит следующее: когда сегмент TCP получен от вашего отправителя, LwIP отправит обратно ACK, который включает доступное пространство, оставшееся в его буферах (размер окна). Поскольку данные поступают быстрее, чем вы можете их обработать, стек в конечном итоге отправит обратно ACK с нулевым размером окна. Это говорит стеку отправителя отступить и повторить попытку позже, что он сделает автоматически. Когда вы приступите к извлечению большего количества данных из сетевых буферов, стек должен повторно подтвердить последний полученный сегмент, только на этот раз он открывает окно, чтобы сказать, что он может получить больше данных.

Чего вам следует избегать, так это того, что называется синдромом глупого окна, потому что это может оказать сильное влияние на вашу сеть. использование и производительность. Попробуйте считывать данные из сети большими порциями, если можете. Избегайте плотных циклов, которые заполняют буфер по 1 байту за раз.

person Andy Brown    schedule 16.12.2014