Как избежать потери пакетов при ретрансляции TCP пакетов из быстрого интерфейса в медленный?
==============================================================================================

 Проблема:  

При передачи данных через канал связи, включающий в себя ретранслятор пакетов из быстрого интерфейса в медленный, теряются пакеты. Протокол TCP производит повторную отправку этих пакетов, но скорость передачи падает.  

Передача в обратную сторону происходит без ошибок.  

  

Канал связи:  

[ PC, Windows ]------EthOverUSB------>[ STM32, LWIP ]-------PPPoS------->[ ARM, Linux ]  

EthOverUSB - FullSpeed USB (12 Mbit/s)  

PPPoS - RS422 (921600 bit/s)  

  

Детали:  

Протокол TCP производит повторную отправку потерянных пакетов, при этом падает скорость на ~5%. При этом на стороне приемника (Linux) фиксируется 3.7% битых пакетов.  

  

Причины:  

Отправитель шлет пакеты в быстрый интерфейс (USB), но медленный (PPP) не успевает передавать пакеты с такой скоростью и они копятся в буфере на ретрансляторе (STM32). При переполнении этого буфера и теряется пакет.  

  

Пути решения:  

1. Первое, что приходит в голову - понизить скорость USB, но в STM32 LowSpeedUSB (1.5 Mbit/s) не поддерживается, а другой способ ограничить скорость я не нашел. Может быть он есть?  

2. Как-то настроить параметр Window Size протокола TCP. Но как? и где?  

3. ???  

  

Мне кажется, что эта проблема должна как-то нормально решаться. Но пока найти это решение не могу.  

Буду благодарен за помощь. 

 как то так  

[https://networkguru.ru/kakie-parametri-vliyaut-na-...](https://networkguru.ru/kakie-parametri-vliyaut-na-proizvoditelnost-prilozheniy/)  

посылаешь размер окна приема размером в твой буфер приема и источник пошлет данных только в размер окна и потом будет ждать подтверждение приема. 

 MTU? 

 Непонятно, какого типа передача.  

Но на вскидку , поиграться с mss в стеке TCP.  

Увеличить буферы.