porty 0 Posted April 20, 2011 · Report post Добрый день. Разрабатываем устройство собирающее данные в режиме реального времени непрерывно и выдающее по TCP в локалку поток (хитрый Ethernet - ADC 500kHz). Для этого используем LPC1786, поначалу нам казалось что у него достаточно памяти для буферов ethernet, окна TCP, и фифо буфера данных АЦП. Но возникла проблема что когда данное устройство работает в крупных сетях и на него начинают приходить слишком много широковещательных пакетов то буфер приёма переполняется и часть пакетов теряется что приводит к сбоям по TCP - входящий поток управления подвисает на 200-500мс пока не произойдет перепосылка потерянного блока, что критично. После разбора логов было выяснено что большинство широковещательных пакетов это ARP запросы на определение IP адреса. Т.к. устройство работает только в режиме одного соединения с одним сервером - то возникла идея игнорировать все приходящие ARP пакеты и любые другие не IP пакеты и обрабатывать только IP если соединение уже установлено и так делать до дисконекта. Но не понятно - будет ли нормально работать такой режим когда при установленном соединении игнорируются все не IP пакеты? И как ещё можно бороться с переполнением буфера приёма для устройств с малым объёмом ОЗУ (64кбайта)? Quote Ответить с цитированием Share this post Link to post Share on other sites
andrewlekar 0 Posted April 21, 2011 · Report post А вам широковещательные пакеты вообще нужны? Поставьте в EMAC фильтр на multicast и broadcast. С переполнением буфера можно бороться, увеличивая этот буфер. :) Увеличьте количество буферов в DMA на приём. Если памяти не хватает, то уменьшите их размер, но увеличьте количество. Quote Ответить с цитированием Share this post Link to post Share on other sites
porty 0 Posted April 21, 2011 · Report post А вам широковещательные пакеты вообще нужны? Поставьте в EMAC фильтр на multicast и broadcast. С переполнением буфера можно бороться, увеличивая этот буфер. :) Увеличьте количество буферов в DMA на приём. Если памяти не хватает, то уменьшите их размер, но увеличьте количество. Уже увеличен, пропускать широковещательные пакеты тоже умею, мне нужно знать - повлияет ли это на логику работы TCP стека, не будет ли ошибки в таком случае, например в случаях обрыва соединения или зависания и тд? Интересно то разрешена ли такая уловка согласно стандартам ARP, IP, TCP? Quote Ответить с цитированием Share this post Link to post Share on other sites