Почему мой Pi всегда имеет один и тот же IP-адрес?

22

Мой маршрутизатор использует DHCP, и всякий раз, когда я переформатирую свой raspberry pi, даже при использовании другой карты microSD, он всегда имеет один и тот же IP-адрес локальной сети. Я не совсем уверен, как назначаются IP-адреса, но я предполагаю, что устройство имеет уникальный идентификатор в сети, который распознает мой маршрутизатор?


источник
Как это произошло? Я задаю вопрос о SE, и она имеет положительное количество голосов! И это очень много голосов.

Ответы:

36

Ваш Raspberry Pi имеет уникальный идентификатор, называемый MAC-адрес, точнее, два. Каждый сетевой адаптер имеет один из них. Таким образом, у адаптера Wi-Fi есть один уникальный идентификатор, а у адаптера Ethernet - один.

И именно поэтому ваш Raspberry Pi получает тот же IP-адрес. Для вашего роутера не важно, что именно вы делаете с устройством. Он просто распознает MAC и предоставляет тот же IP, что и раньше.

Редактировать: Как указал Beege, IP-адрес все еще может меняться, так как «D» в DHCP означает «динамический». Но если ваше устройство получает тот же IP, что и раньше, через DHCP, то из-за распознаваемого MAC.

ItsKiddow
источник
9
Хорошее объяснение. Я думаю, что стоит упомянуть, что один и тот же MAC-адрес не всегда получает один и тот же IP-адрес от DHCP-сервера - это все еще «динамическая» служба, поэтому возможно, что IP-адрес будет получен другим устройством, и ваш Pi получит другой Назначение IP.
Беж
3
@ Да, конечно, спасибо! Можно выбрать зарезервировать определенный IP-адрес для Pi, когда требуется постоянный IP-адрес, например, при запуске на нем сервера. Но это должно быть включено специально с маршрутизатором (или любым другим устройством, которое предоставляет DHCP-сервис в сети)
ItsKiddow
2
actually two to be precise- принимая pi3b или 3b +
Jaromanda X
7
Тот факт, что IP-адрес одинаков, НЕ из-за MAC. MAC - это идентификатор, к которому маршрутизатор имеет доступ. Маршрутизатор можно настроить так, чтобы он пытался выдать вам тот же IP-адрес при возобновлении аренды, или он может случайным образом назначить вам другой. Ваш маршрутизатор настроен (изготовителем), чтобы сделать первое. Это на самом деле предотвращает множество проблем в сети, вызванных проблемами, связанными с динамическим IP (вспоминаются порты IP-печати). Возможность получить тот же IP-адрес обусловлена ​​MAC, но я могу легко настроить DHCP на маршрутизаторе, чтобы дать куче разных устройств один и тот же IP-адрес.
Нельсон
1
Качественная реализация DHCP будет кешировать предыдущие MAC-адреса и IP-адреса. Когда он видит кэшированный MAC-адрес, он снова будет предлагать тот же IP-адрес (если он доступен). Он также будет сопротивляться присвоению IP-адреса другому MAC-адресу, если только у него не осталось свободных адресов. Поскольку это зависит от конкретной реализации ... и качество домашних маршрутизаторов повсюду ... поведение не обязательно будет согласованным в зависимости от модели вашего маршрутизатора.
Тим Кэмпбелл
16

В дополнение к уже приведенным ответам я приведу дополнительную справочную информацию.

В общем, протокол DHCP сделан для максимального уменьшения динамических изменений. Это аспект стабильности. В небольших домашних сетях это не имеет большого значения, но для больших сетей с коммутаторами и маршрутизаторами требуется некоторое время, чтобы перейти в оптимизированное состояние. Коммутаторы должны изучать своих соседей, а маршрутизатор должен изучать маршруты. Сильные изменения IP-адресов не годятся для этого состояния.

Большинство людей могут подумать, что DHCP-сервер просто дает IP-адрес клиенту и все. Но это только половина правды. Вот типичное DHCP-рукопожатие:

(client) DHCPREQUEST for 192.168.10.75 from b8:27:eb:0e:3c:6f (raspi3) via wlan0
(server) DHCPACK on 192.168.10.75 to b8:27:eb:0e:3c:6f (raspi3) via wlan0

Как вы можете видеть, клиент, идентифицированный по его mac-адресу b8: 27: eb: 0e: 3c: 6f, запрашивает определенный IP-адрес, который он предпочитает. Он знает, какой у него IP-адрес раньше, также после нового запуска. DHCP-сервер только подтверждает это. То, что он дает клиенту, называется арендой . Он содержит тайм-аут (вместе со многими другими важными опциями), как долго клиент может использовать IP-адрес без повторного запроса. Время ожидания зависит от настроек и в основном устанавливается на несколько часов. DHCP-сервер хранит аренду в своем кэше и резервирует его как можно дольше для того же клиента, даже если он выключен. Таким образом, он просто подтвердит клиенту аренду, когда он снова загрузится. Только когда у сервера нет других неиспользованных договоров аренды, которые он может предоставить клиентам, он возьмет использованный. Тогда рукопожатие будет выглядеть так:

(client) DHCPREQUEST for 192.168.10.75 from b8:27:eb:0e:3c:6f (raspi3) via wlan0
(server) DHCPNAK on 192.168.10.75 to b8:27:eb:0e:3c:6f via wlan0
(client) DHCPDISCOVER from b8:27:eb:0e:3c:6f via wlan0
(server) DHCPOFFER on 192.168.10.99 to b8:27:eb:0e:3c:6f via wlan0
(client) DHCPREQUEST for 192.168.10.99 from b8:27:eb:0e:3c:6f (raspi3) via wlan0
(server) DHCPACK on 192.168.10.99 to b8:27:eb:0e:3c:6f (raspi3) via wlan0

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

Инго
источник
4
+1 ИМХО это правильный ответ. Это просто способ работы протокола DHCP.
Иос