Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как быстро передавать данные через Ethernet
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Fast Ethernet/Gigabit Ethernet/FibreChannel
Страницы: 1, 2
doom13
Цитата(jur @ Nov 5 2015, 20:26) *
А как насчет ARP-пакетов? Они ведь останутся? Ведь, насколько я понял, клиенту MAC-адрес вынь да положь? Спускаться на уровень Ethernet-фреймов или как-то иначе?

Реализуйте в устройстве поддержку ARP и ICMP и оно будет нормально определятся в сети. На основании ARP система заполняет ARP-таблицу, где IP-адресу ставится в соответствие MAC-адрес, т.е. для передачи сообщений система должна знать какой MAC-адрес соответствует IP-адресу. Даже если посылается UDP пакет с правильными полями MAC и IP, система будет отправлять вашему устройству (и остальным) ARP запрос пока не получит соответствующий ARP ответ, чтобы заполнить ARP-таблицу.

Цитата(jur @ Nov 5 2015, 20:45) *
Они постоянно валят, заразы...

После ARP-ответа такого не будет, реализуйте поддержку ARP!

Выше советовали пример от альтера с железным udp_offloader, если его используете, то там ещё должна быть софтварная поддержка минимального IP-стека (ARP, ICMP) на Nios II.
dxp
QUOTE (jur @ Nov 6 2015, 00:18) *
Да читал я... В "букварях" не описываются тонкости взаимодействия интерфейсов. К тому же, я хотел бы использовать UDP протокол.

Как уже советовали, используйте для соединения со своим устройством отдельную карту. Запретите на этом интерфейсе всё, кроме IPv4. Если нету (пока) поддержки ARP в дивайсе, то можно руками прописать МАС адрес в таблицу (команда arp). Всё это здорово убавит "шум" в интерфейсе. Ну, и в шарке же можно легко настроить фильтр, чтобы показывал только пакеты от коннекта с вашим дивайсом.
jur

Продолжаю продираться через препоны к назначенной цели :-)

Сначала столкнулся с проблемой, что при включении моего отдельного сегмента вырубается основная сеть. В смысле, сеть есть, а связи с Интернетом нет. Потом допетрил ("Семен Семеныч!" (С)) и сделал этот отдельный сегмент другой подсетью (основная 192.168.1.1, отдельная - 192.168.147.1(2)). Все стало работать нормально: Кесарю - кесарево, слесарю - слесарево.

Спасибо, друзья, за подсказку! Позадавал и там, и там IP<->MAC с помощью команды arp. Запускаю мою пару клиент-сервер. Работает, передает, но все-равно остаются паузы между посылкой данных клиентом и их приемом сервером. Почитал еще раз про winsock и узнал, что данные командой sendto() не передаются, а буферируются системой. То же относится и к recvfrom(). Это убедило меня в необходимости дальнейшего углубления в winsock. Не знаю, поможет ли команда select(), но подозреваю, что должна быть возможность задать немедленную посылку данных. Что-то вроде флага "send immediately".

В общем, продолжаю погружение...

P.S. Для этих двух Ethernet-карт позапрещал все, кроме TCP/IP. Думал, что можно доустановить протокол UDP/IP, но система сказала: "Давай диск". Отказался...

krux
гуглите функцию setsockopt и опции сокетов, например SO_SNDBUF, SO_SNDLOWAT, SO_SNDTIMEO и т.д.
jur

Цитата(krux @ Nov 9 2015, 18:25) *
гуглите функцию setsockopt и опции сокетов, например SO_SNDBUF, SO_SNDLOWAT, SO_SNDTIMEO и т.д.

Спасибо за подсказку! Мне как раз всякие дополнительные моменты понадобятся, т.к. я приступаю к разработке тестовой пары передатчик-приемник. Тут мне понадобятся всякие прибамбасы с ивентами и т.п.

А паузы я поборол! :-) Спасибо за помощь! "Собака порылась" в очень простой вещи: в NetBIOS-се. Я эту штуку на карте отдельного сегмента сети вырубил, а на основной карте она осталась. И получалось, что после приема пакета от клиента Wireshark показывал еще 5-6 пакетов NBNS от основной карты, и только потом отправляемый обратно мой пакет.

P.S. Еще небольшая непонятка. Основной интерфейс (192.168.1.50) каждые ~35 секунд посылает широковещательный пакет. Это выглядит так:

Код
No.     Time           Source                Destination           Protocol Length Info
    111 896.507917000  192.168.1.50          255.255.255.255       UDP      82     Source port: 1025  Destination port: 1947
    112 930.686786000  192.168.1.50          255.255.255.255       UDP      82     Source port: 1025  Destination port: 1947
    113 965.080060000  192.168.1.50          255.255.255.255       UDP      82     Source port: 1025  Destination port: 1947

Если я что-то передаю по тестовому сегменту, то широковещательные пакеты все равно вклиниваются:

Код
No.     Time           Source                Destination           Protocol Length Info
    266 1275.393877000 192.168.147.2         192.168.147.1         UDP      142    Source port: 1666  Destination port: 1666    <- От клиента
    267 1275.394245000 192.168.147.1         192.168.147.2         UDP      142    Source port: 1666  Destination port: 1666    -> Эхо клиенту
    268 1275.489097000 192.168.1.50          255.255.255.255       UDP      82     Source port: 1025  Destination port: 1947
    269 1275.719379000 192.168.147.2         192.168.147.1         UDP      142    Source port: 1666  Destination port: 1666
    270 1275.719754000 192.168.147.1         192.168.147.2         UDP      142    Source port: 1666  Destination port: 1666

Погуглил насчет порта UDP/1025 - какой-то WIN-RPC (Windows RPC) (к чему он тут?), про порт UDP/1947 - вообще что-то невразумительное ("1947/TCP HASP SRM Работа и с сетевым, и с локальным ключами HASP происходит через локальный демон или службу по TCP/1947", но я-то вижу пакет UDP).

Как это понимать? Наплевать и забыть?

a123-flex
Цитата(jur @ Nov 9 2015, 19:06) *
Продолжаю продираться через препоны к назначенной цели :-)

Парень. Главная препона в том, что о поставленной задаче ты не знаешь абсолютно ничего, а она довольно велика...
В твоей теме сидят уже 2 или 3 человека, которые имеют готовые решения, и терпеливо терпят всю твою пионерскую чушь, в надежде что ты все-таки поймешь в итоге, что нужно правильное делать.

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

При этом ты все равно будешь главным, не сорвешь все сроки, прослывешь очень большим техническим экспертом, и опытным руководителем, и получишь потом целую гору шоколада от руководства.

Альтернатива в твоем состоянии - потратить на все ето дело год-другой, и завалить дело целиком.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.