Назад | Перейти на главную страницу

Непонимание DHCP / DNS - Какой IP у машины до DHCPOFFER / DHCPREQUEST

Насколько я понимаю, DHCP позволяет динамически назначать IP-адреса клиентским машинам в сети с DHCP-сервера. Клиент передает пакет DHCPDISCOVER, за которым следует DHCPOFFER от сервера обратно клиенту, за которым может следовать DHCPREQUEST и так далее.

Итак, если IP-адрес формально «назначается» после того, как сервер получает клиентский пакет DHCPREQUEST, существует ли какое-то общее правило для назначения IP до этого момента? Сделано маршрутизатором, коммутатором или сетевой картой?

Мне любопытно, потому что я знаю, что у меня довольно много недопониманий о том, как работают сети, а также потому, что я пытаюсь использовать wirehark для просмотра некоторых пакетов DHCPOFFER и DHCPREQUEST, и wirehark, конечно, перечисляет IP-адреса источника и назначения, но у меня есть понятия не имею, что это будет до того, как весь этот процесс завершится. Все, о чем я знаю, это MAC-адрес клиента, потому что /var/log/messages буквально просто говорит: DHCPDISCOVER from [MAC ADDRESS]

Есть один фундаментальный момент, который должен быть кристально ясным, чтобы правильно понять, что происходит с DHCP: вы в сети Ethernet... поверх которых проходят IP-пакеты, внутри которых инкапсулируются UDP-пакеты, внутри которых отправляются / принимаются сообщения DHCP. Короче говоря, вы должны учитывать весь стек протоколов и не ограничиваться DHCP.

Ты говоришь: "Клиент передает пакет DHCPDISCOVER, за которым следует DHCPOFFER от сервера обратно клиенту, за которым может следовать DHCPREQUEST и т. Д."

Для "Клиент передает", вы должны учитывать, что в сети Ethernet два хоста могут" разговаривать "друг с другом только благодаря MAC-адреса. Это адреса, которые записываются производителем оборудования в физическом сетевом адаптере на уникальной основе. Например, сетевой адаптер ПК, который я использую сейчас, имеет этот MAC: «a4: ba: db: 98: fc: a4».

Если вы думаете, MAC-адреса не могут быть определены / назначены на «случайной» основе. Фактически каждому поставщику был назначен фиксированный «набор» адресов, и благодаря этому вполне возможно узнать, что мой сетевой адаптер были построены DELL

Итак, теперь мы знаем, что адресация в сетях Ethernet основана на MAC-адресах (а не IP-адресах). Это означает, что для эффективной маршрутизации IP-пакетов в сетях Ethernet нам нужно что-то, чтобы получить MAC-адрес хоста назначения. Что-то вроде: "Я хочу отправить сообщение хосту с IP-адресом a.b.c.d; Мне нужен его MAC-адрес; как только я получу такой MAC-адрес, я правильно инкапсулирую свой IP-пакет и отправлю его на этот MAC-адрес".

Вы можете спросить:

  1. что делать, если я не знаю MAC-адрес целевого хоста?

или более высокий уровень в стеке протоколов:

  1. что делать, если я не знаю IP-адрес хоста назначения?

Ключевой концепцией здесь является ВЕЩАНИЕ. И Ethernet, и IP предоставляют специальные адреса, которые должны использоваться именно тогда, когда нам нужно связаться с кем-то, чей адрес нам неизвестен.

В Ethernet специальный MAC-адрес: ff: ff: ff: ff: ff: ff (48 бит, все в 1) - это широковещательная передача. Протоколы Ethernet предусматривают, что если вы являетесь адаптером Ethernet, вы ДОЛЖНЫ извлекать и читать:

  • пакеты, адресованные на ваш собственный MAC-адрес (a4: ba: db: 98: fc: a4, в случае моего ноутбука);
  • пакеты, адресованные широковещательному адресу (ff: ff: ff: ff: ff: ff).

Это означает, что:

  • если я хозяин, это еще нет настроен с IP-адресом и ...
  • Я настроен на запрос IP-адреса на основе протокола DHCP и ...
  • Обычно я не знаю MAC-адрес DHCP-сервера, чтобы спросить

затем

  • Я могу отправить DHCP-запрос в кадре Ethernet, адресованный широковещательному адресу Ethernet (ff: ff: ff: ff: ff: ff).

Делая это:

  • каждый хост Ethernet в моей локальной сети получит мой запрос;
  • все хосты, на которых не запущен DHCP-сервер, просто проигнорируют его;
  • DHCP-сервер поймет, что это сообщение DHCP, и обработает его соответствующим образом.
  • DHCP-сервер ответит (с кадром Ethernet), используя свой собственный MAC-адрес в качестве «исходного MAC-адреса» и свой собственный IP-адрес в качестве «исходного IP-адреса» (так, для меня, чтобы отправить следующий кадр непосредственно ему, и не более через широковещательная передача) и использование моего MAC-адреса в качестве MAC-адреса назначения (мой MAC-адрес был указан в моем исходном кадре в поле source_MAC).

Возвращаясь к вашему вопросу, вас интересовали IP-адреса.

Теперь, когда мы знаем, что сообщения DHCP-discover отправляются на широковещательный MAC-адрес Ethernet, нам нужно напомнить, что в кадре Ethernet есть инкапсулированный пакет IPv4. Такой пакет IPv4 ДОЛЖЕН содержать адрес SOURCE_IP и адрес DESTINATION_IP. В этом конкретном случае (сообщение об обнаружении DHCP) хост-отправитель не знает ни одного из двух:

  • он не знает своего собственного IPv4-адреса, поскольку именно он начинает запрашивать. Таким образом, поле адреса источника будет установлено в 0.0.0.0;

  • он не знает IPv4-адрес DHCP-сервера. Таким образом, поле адреса назначения будет установлено на 255.255.255.255 (угадайте, что? 32 бита, установлено значение 1. Вы замечаете сходство?)

Обратите внимание, что в этом конкретном случае (DHCP-обнаружение) оба таких адреса ... в основном бесполезны: MAC-адреса имеют значение (опять же: в этом кадре DHCP-обнаружения).

Позвольте мне добавить последнее замечание. Вы написали: "Я пытаюсь использовать wirehark, чтобы посмотреть на некоторые пакеты DHCPOFFER и DHCPREQUEST, а wirehark, конечно, перечисляет IP-адреса источника и назначения". Wireshark, как и любой анализатор пакетов, работающий в сетях Ethernet, сообщает вам ЛОТЫ вещей, в том числе Mac-адрес источника и Mac-адрес назначения.

На самом деле Wireshark действительно поможет вам понять процесс инкапсуляции, потому что вы увидите именно Ethernet-Layer (Layer 2), адресованный MAC-адресами, содержащий внутри Layer 3 (IPv4), содержащий IP-пакет. Кроме того, в IP вы увидите пакет UDP с внутри DHCP-сообщения.

Я ожидаю, что вы запустили захват wirehark без любой фильтр. Это потому, что если вы используете фильтры, вы рискуете не захватить все, что вам нужно (напомнить о широковещательных и безадресных кадрах / пакетах).


P.S .: Прошу прощения у всех техников, читающих это сообщение: я знаю, что был _extremely_ общие и множество нестрого-формальных понятий. Я знаю. Я думал, что это нужно, чтобы помочь @ krb686 войти в мир сетевых технологий, который мне так нравится :-)

У него нет IP до того, как у него есть IP.

An пример пакета DHCP Discover устанавливает исходный IP-адрес на 0.0.0.0, а целевой - 255.255.255.255 для широковещательной рассылки на каждый хост в локальной сети.

В ответ с сервера переходит на MAC-адрес клиента. Когда ты говоришь All I know about is the client's MAC address - это все, о чем знает DHCP-сервер, и этого достаточно.

Однако существует стандарт, по которому хосты назначают себе IP-адрес, что обычно происходит в случае сбоя запроса DHCP. Эти IP-адреса находятся в диапазоне 169.254.0.0/16.

http://packetlife.net/blog/2008/sep/24/169-254-0-0-addresses-explained/

Когда хост не может динамически получить адрес, он может дополнительно назначить себе локальный для канала IPv4-адрес в соответствии с RFC 3927. Термин Microsoft для этого - автоматическая адресация частного интернет-протокола (APIPA).

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

(И это не имеет отношения к DNS)

У клиента нет IP-адреса, пока подтверждение DHCP не завершится успешно.

Причина, по которой это работает, и вы не сталкиваетесь с проблемой «курица и яйцо», заключается в том, что IP-адрес не нужен двум хостам для связи в одной подсети - это можно сделать, используя только MAC-адреса.

DHCP выполняется через UDP, что означает, что да, он использует IP-адреса. Пункт назначения является широковещательным, а источник - 0.0.0.0 для клиента или IP-адрес сервера для ответов сервера.