Фон:

Я на самом деле начинающий Arduino и учусь подключать один к Интернету через Ethernet.

Я не использую более широко используемый (гораздо более простой) Ethernet-щит (на основе микросхем Wiznet W5100/W5200), но использующий чип ENC28J60 - разница в обработке TCP (?)'должно быть сделано программно, в то время как чипы W5100/W5200 имеют встроенную аппаратную поддержку).

Я использую библиотеки, которые выполняют основную работу с кодом. Я не совсем понимаю, но уже преуспел в настройке Arduino в качестве веб-сервера, а также веб-клиента.

Проблема:

Моя проблема в последовательности. Чаще всего модуль Arduino+Ethernet не обнаруживается маршрутизатором и, следовательно, не будет работать, поскольку он не получает IP-адрес. Это не проблема кабеля локальной сети; когда я подключаю его к компьютеру, он отображается в таблице клиентов маршрутизатора, но когда я подключаю его к устройству (например, Arduino через модуль Ethernet), он не отображается.

Мой вопрос: как маршрутизатор обнаруживает компьютер / подключенное устройство? Поиск в Google дал мне результаты для "как компьютер определяет маршрутизатор?"Я хочу это наоборот.

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

Я совершенно не осведомлен о технических особенностях работы с сетями, но я знаком с понятиями PING-ing и DHCP против фиксированных IP-адресов - все это исключается наличием фактического соединения - вот где мой камень преткновения. Я был бы признателен за любые объяснения дилетанта или, по крайней мере, некоторые советы по устранению неполадок, чтобы узнать, где проблема на самом деле.

3 ответа3

1

Все маршрутизаторы имеют как минимум два сетевых интерфейса. Для ответа на этот вопрос предположим типичную домашнюю настройку, где у маршрутизатора есть только два интерфейса - Ethernet WAN и LAN + беспроводная сеть Ethernet (обычно соединенные вместе, так что это фактически единый интерфейс).

Происходит следующее: маршрутизатор выдает запрос DHCP на своем интерфейсе WAN, а затем DHCP-сервер провайдера отвечает публичной информацией IP. Затем маршрутизатор использует это для настройки IP-адреса интерфейса WAN.

Сам маршрутизатор обычно запускает собственный DHCP-сервер, который раздает IP-адреса тем, которые подключены через локальную сеть. Он вообще не дает IP интерфейсу WAN.

Альтернативой является APIPA, где устройство выбирает случайный IP-адрес в диапазоне APIPA, выдает ARP, чтобы увидеть, использует ли его кто-либо еще, и затем начинает использовать его, если никто не отвечает. Это плохо, если вы хотите использовать любую подсеть, кроме подсети APIPA.

Автоконфигурация IPv6 работает аналогично.

У меня нет большого опыта работы с Ardunio, но, похоже, вам нужна функциональность DHCP-клиента где-то там.

0

Маршрутизатор почти наверняка имеет функцию DHCP - динамическое назначение IP-адресов. DHCP-клиент отправляет широковещательную рассылку без какого-либо адреса, а DHCP-сервер в локальной сети видит, что он отвечает, возвращая отправителю пакет, содержащий IP-адрес. (Это возможно, потому что локально Ethernet использует MAC-адреса, которые жестко закодированы в каждом устройстве)

У вашего роутера, вероятно, есть таблица, показывающая назначения DHCP MAC-адресам - появляется ли там ваш Arduino?

0

Маршрутизаторы не обнаруживают компьютеры и компьютеры не обнаруживают маршрутизаторы (компьютеры IPV6 обнаруживают маршрутизаторы).

Маршрутизаторы не знают ни о каком компьютере в сети, пока не отправят трафик на маршрутизатор (шлюз по умолчанию). Теперь, если ваш маршрутизатор настроен как сервер DHCP, каждый раз, когда компьютер настроен на использование DHCP (по умолчанию - true), он будет отправлять запрос DHCP. Этот запрос принимается маршрутизатором, и IP-адрес предоставляется компьютеру. В этом состоянии маршрутизатор знает о компьютере.

Если вы загружаете свой Arduino, и он не получает IP-адрес, и он не указан в качестве DHCP-клиента на вашем маршрутизаторе, значит, что-то не так с Arduino или его сетевым подключением, если предположить, что все остальное в сети не имеет проблем ,

Я хотел бы предложить вам подключиться к Arduino и попытаться обновить IP-адрес. Также посмотрите на статус eth0 или eth1, который скажет вам, если он подключен к сети.

https://serverfault.com/questions/15776/how-to-check-the-physical-status-of-an-ethernet-port-in-linux

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .