Проблема с роутингом UDP

Мистер_Пэ
У меня все идеи кончились, поэтому принимаются любые идеи.

Есть устройства, работающие по Ethernet и обменивающиеся для работы пакетами UDP с компьютером управления. Пакеты микроскопические, не больше сотни байт. Пакеты посылаются редко. Даже не раз в минуту, реже.
Есть устройства с контроллером Ethernet на чипе W5100, есть на следующем поколении W5100S.

В локальной сети всё работает без проблем. Как угодно.

Как только возникает необходимость передавать пакеты между сетями возникает такая жопа: устройства на W5100 работают нормально, а W5100S не могут передать ответное сообщение обратно на комп.

Я не понимаю, в чем собственно проблема - в моих устройствах, или в маршрутизаторах. У нас используются CISCO, и я в них нихрена не понимаю.

Причем проблема вылазит как в локальном масштабе, в рамках объекта, так и в межрегиональном.
Я спокойно могу с компа в Питере пообщаться с устройством на W5100, которое работает на объекте в Карачаево-Черкесии. И наоборот, с компа в КЧР посмотреть что на устройстве в Питере.
А с W5100S обратные сообщения не идут. В сторону устройства все идет, оно даже выполняет команды.

В общем посоветуйте. Даже не в какую сторону копать... Чем копать? Может есть какие-то программы, которые показывают что в сети ходит?...


Больше всего вымораживает тот факт что W5100S выдает фейл при посылке UDP пакета. То есть у него там внутри срабатывает ошибка и поднимается флаг "таймаут".
Как вообще возможен таймаут при посылке UDP?...

Да, есть другое устройство. Мультипортовка MOXA, такая вся крутая и с вебмордой. Работает без проблем.

Egolf
Это наверняка проблемы роутинга на L2.

Когда устройство отвечает в другую подсеть, оно либо пытается ARP-иться на удалённый ip компьютера, либо не знает MAC шлюза, в итоге получает TIMEOUT.

Проверяется за 5 минут Wireshark'ом на компьютере. Смотри ARP. Если устройство спрашивает "who has ip компьютера", а не "who has ip gateway", значит оно шлёт мимо маршрутизатора.

Надо задать верный ip, маску и gateway на устройстве.
Посмотреть что ответы уходят через шлюз, а не напрямую на удалённый ip.

Ну и заработает всё.

Egolf
А, начёт таймаута UDP

Конечно, это таймаут не протокола, а таймаут попытки доставить кадр на канальном уровне (ARP / MAC).

То есть:
чип пытается отправить UDP
не может определить MAC-адрес получателя / не может отправить кадр через шлюз
после нескольких попыток поднимает флаг TIMEOUT

Всё. Секрет раскрыт.

Мистер_Пэ
Разобрался уже.
Egolf
Это наверняка проблемы роутинга на L2.
Нет, проблема оказалась в самом контроллере.
Egolf
Проверяется за 5 минут Wireshark'ом на компьютере. Смотри ARP. Если устройство спрашивает "who has ip компьютера", а не "who has ip gateway", значит оно шлёт мимо маршрутизатора.
пользовался tcpdump, благо второй комп на линуксе.
Egolf
То есть:
чип пытается отправить UDP
не может определить MAC-адрес получателя / не может отправить кадр через шлюз
после нескольких попыток поднимает флаг TIMEOUT
Да, именно так все и происходит.
Работающее устройство шлет ARP на адрес шлюза.
Глючащее устройство в локалке шлет ARP правильно, а если запрос из подсети, то почему-то шлет запрос ARP на 0.0.0.0

Лекарство оказалось достаточно странным.
При инициализации W5100S нужно обязательно что-то записать в регистр количества

Egolf
после нескольких попыток
вот этих самых попыток.

Причем совершенно не важно, что ты туда пишешь. 0х00, 0XFF или любое значение между ними приводят к тому что начинает работать правильно.

По дефолту количество попыток 0x08. Действительно шлет 8 запросов.
Но, поскольку в даташите написано что там по дефолту 8 - типа ты такой думаешь "да не буду я этот регистр инициализировать, меня устраивает дефолт".
Тем более что у старого W5100 в этом месте всё то же самое и он нормально работает.

Меня просто напрягло что 8 попыток, типа засирает экран tcpdump, я просто так (!!!) решил снизить количество попыток до 3, а оно взяло и заработало.

Просто повезло.

Но все равно спасибо за участие. Про wireshark не знал. Оно в XP будет работать?
Просто tcpdump в моей версии линуха уже было, никаких дополнительных телодвижений, просто запустить и разобраться с настройками.

Egolf
Мистер_Пэ
Про wireshark не знал. Оно в XP будет работать?
Будет, но в старой версии.
Вот тут https://wiki.wireshark.org/Development/LifeCycle пишут что нужна версия 1.10.14

Качнуть можно здесь https://www.wireshark.org/down...n32-1.10.14.exe

А вообще имхо гораздо удобнее сделать загрузочный usb диск с убунтой, для (но не ограничиваясь) wireshark. Или виртуалку поднимать.

https://www.wireshark.org/download.html


Мистер_Пэ
Нет, проблема оказалась в самом контроллере.
Ага. Я ж про него и пишу.
L2 - это Level 2, канальный уровень OSI, как раз MAC адреса роутит.


Мистер_Пэ
Просто tcpdump в моей версии линуха уже было
tcpdump за глаза хватает, он просто менее удобный (вкусовщина опять же).
Мистер_Пэ
Egolf
Вот тут wiki.wireshark.org пишут что нужна версия 1.10.14

Качнуть можно здесь wireshark.org

О! Спасибо! Попробую глянуть что за зверь.
Мистер_Пэ
Egolf
версия 1.10.14
Попробую скачать здесь
Мистер_Пэ
Скачал, поставил, работает.
Правда вылетает если тупо оставить включенным на захват трафика надолго. При вылете настройки не сохраняются 😞 Поэтому надо после установки настроек выйти и зайти, для страховки. И захватывать трафик короткими кусками.

В очередной раз 😊 победил проблему с непрохождением пакетов у W5100S.

Дело, оказывается, не столько в том что и куда записывать, а больше в том, КОГДА.

Устройство после запуска, вероятно, инициализируется. И этот процесс занимает достаточно заметное время.
Если записать установки прямо сразу - оно не работает вообще, поскольку записанные установки переписываются на дефолтные во время инициализации.

Если выдержать паузу и потом записывать настройки, то поведение устройства начинает зависеть от длительности паузы. Очевидно что какие-то регистры, которые необходимы для работы в локальной сети сохраняют значение, а те, что нужны для работы с маршрутизацией - либо полностью, либо частично перезаписываются т.к. процесс инициализации еще продолжается.

Если паузу увеличить - устройство начинает адекватно работать и при маршрутизации.

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