Насколько я понимаю, 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-адрес".
Вы можете спросить:
или более высокий уровень в стеке протоколов:
Ключевой концепцией здесь является ВЕЩАНИЕ. И Ethernet, и IP предоставляют специальные адреса, которые должны использоваться именно тогда, когда нам нужно связаться с кем-то, чей адрес нам неизвестен.
В Ethernet специальный MAC-адрес: ff: ff: ff: ff: ff: ff (48 бит, все в 1) - это широковещательная передача. Протоколы Ethernet предусматривают, что если вы являетесь адаптером Ethernet, вы ДОЛЖНЫ извлекать и читать:
Это означает, что:
затем
Делая это:
Возвращаясь к вашему вопросу, вас интересовали 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-адрес сервера для ответов сервера.