Добрый день. Разрабатываем устройство собирающее данные в режиме реального времени непрерывно и выдающее по TCP в локалку поток (хитрый Ethernet - ADC 500kHz). Для этого используем LPC1786, поначалу нам казалось что у него достаточно памяти для буферов ethernet, окна TCP, и фифо буфера данных АЦП. Но возникла проблема что когда данное устройство работает в крупных сетях и на него начинают приходить слишком много широковещательных пакетов то буфер приёма переполняется и часть пакетов теряется что приводит к сбоям по TCP - входящий поток управления подвисает на 200-500мс пока не произойдет перепосылка потерянного блока, что критично. После разбора логов было выяснено что большинство широковещательных пакетов это ARP запросы на определение IP адреса. Т.к. устройство работает только в режиме одного соединения с одним сервером - то возникла идея игнорировать все приходящие ARP пакеты и любые другие не IP пакеты и обрабатывать только IP если соединение уже установлено и так делать до дисконекта.
Но не понятно - будет ли нормально работать такой режим когда при установленном соединении игнорируются все не IP пакеты? И как ещё можно бороться с переполнением буфера приёма для устройств с малым объёмом ОЗУ (64кбайта)?
|