Почему DHCP-клиент прослушивает порт 68?

если предположим, что клиент не прослушивает порт 68, когда DHCP-сервер получает запрос, он может отправить его по адресу, с которого он получил запрос (с эфемерным портом, выбранным клиентом во время отправки), то почему протокол указывает клиенту прослушивать порт 68?

3 ответов


потому что это в RFC (запрос комментариев), который определяет, как ведет себя DHCP. RFC 2131-это документ, который определяет, как должны вести себя DHCP-клиент и сервер.

посмотреть здесь для получения дополнительной информации о DHCP (раздел 4.1, в частности). См.здесь для получения информации о том, что такое RFC.


основная причина заключается в том, что DHCP-сервер может транслировать "предложение DHCP" на уровне mac, вместо отправки его одноадресной рассылки на mac-адрес, который он получил запрос. Если порт не был постоянным, некоторые хосты, которые случайно прослушивают этот же случайный порт, примут пакет на уровень 5-уровень приложения. Другими словами, приложение получит сообщение из совершенно другого приложения, а не из здоровой ситуации.


Мне просто пришлось столкнуться с тем же вопросом, и после некоторых исследований я нашел следующее на RFC 2131, который описывает протокол DHCP, в разделе 1.6 цели проектирования:

  • DHCP должен предоставлять услуги существующим клиентам BOOTP

также на RFC 951, которые описывают протокол BOOTP, мы можем найти следующее:

заголовок UDP содержит номера портов источника и назначения. Этот Протокол BOOTP использует два зарезервированных номера портов, " клиент BOOTP "(68) и 'BOOTP server' (67). Клиент отправляет запросы с помощью ' BOOTP сервер ' в качестве порта назначения; обычно это трансляция. Этот сервер отправляет ответы, используя 'BOOTP client' в качестве порта назначения; в зависимости от возможностей ядра или драйвера на сервере это может или не может быть трансляции (это объясняется далее в разделе под названием "Вопросы курицы / яйца" ниже). Причина два зарезервированных порта являются используется, чтобы избежать "пробуждения" и планирования сервера BOOTP демоны, когда bootreply должен транслироваться клиенту. Поскольку сервер и другие хосты не будут прослушивать порт 'BOOTP client' , любые такие входящие трансляции будут отфильтрованы в ядре уровень. Мы не могли просто позволить клиенту выбрать "случайный" порт номер для поля порта источника UDP; так как ответ сервера может быть эфир, случайно выбранный номер порта может запутать других узлов что довелось слушать этот порт.

таким образом, ответ на вопрос приходит свыше. DHCP-клиентам необходимо использовать UDP-порт 68, чтобы DHCP был совместим с протоколом BOOTP, а протокол BOOTP требует определенного порта для клиента, поскольку BOOTPREPLIES могут быть переданы, и если случайный порт был выбран для клиента, это может привести к путанице других хостов, слушающих тот же порт.