Пока скажу только основные моменты. Наша фирма разработала устройство которое с датчиков снимается информацию, которая обрабатывается контроллером, и через сетевой интерфейс контроллер ENC28J60 фирмы Microchip подключается к роутеру dir-120, который в свою очередь подключается к АДСЛЬ модему. Роутер настроен таким образом, что при обрыве канала он автоматически поднимает интеренет.
Стек простенький на основе доступных исходников которые лежат в сети, из всего используется только ARP, ICMP, UDP.
Также к роутеру подключен нетбук для контроля интернет соединения.
Реализация уровня арп следующая.
1. Во время включения нашего устройства в сеть выдаётся 3 раза беспричинный арп. Они доходят через роутер до ноутбука, на котором стоит сниф.
2. Так как ип адрес шлюза он же роутер статическая, то устройство посылает арп запрос с пустым маком но ИП адрес роутера, на что роутер с удовольствием отвечает и подписывает своим маком. Сохраняем мак роутера и все последующие пакеты идут подписаны маком роутера.
3. Следующих шаг убеждаемся что есть интернет, для этого отсылаем пинг на наш сервер в нете который потом будет обрабатывать пакеты, ответ понг возвращается нормально.
4. Дальше снимаем информацию с датчиков и формируем удп пакеты и на сервер в интернет в виде удп пакета на шлюз.
Всё бы ничего, но если вытянуть и вставить сетевой шнур от модема до роутера то при обрыве коннекта, или просто при обрыве связи, роутер поднимает снова интернет, но адрес внешний уже другой, что самое интересно на наш сервер доходят пакеты, но обратный адрес у них старый, соответственно отсылка происходит на старый ИП, и обратно пакеты не возвращаются. Похоже, что роутер просто подставляет старый ип, а не новый почему-то. Если отключить наше устройство минут так на 10, то, как я понял таблица роутинга очищается и новый коннект происходит нормально и всё работает как надо, или перезагрузка роутера тоже помогает.
Ноутбук продолжает работать при этом нормально без сбоев как будто ничего небыло.
Может быть, что роутер при смене внешнего ИП отсылает какие-то известия клиентам по какому-то другому протоколу, и ноутбук с его виндой на борту правильно их обрабатывает, а наше устройство их игнорирует.
Пожскажите как быть, какой протокол искать.
|