Почему DHCP использует UDP-порты 67 и 68 для связи между клиентом и сервером?


7

Я знаю, что DHCP используется для назначения IP-адреса клиенту и, следовательно, единственный возможный способ установить соединение - это прослушивание определенного порта. Но есть ли какая-то конкретная причина выбора 67 и 68?


4
Вероятно, единственные люди, которые могут на самом деле, теоретически ответить на это, будут люди, которые разработали BOOTP ( RFC 951 ) в 1985 году (или ранее). Все остальное будет спекуляцией. И хотя просто любопытство иногда является веской причиной, я не понимаю, какую проблему решает этот вопрос.
CVn

2
Потому что им нужно было что-то выбрать ? На самом деле за номерами портов нет никакой рифмы или причины.
Дэвид

Почему нет........? :)
emirjonb

Ответы:


10

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

Предположим, что хост A использует клиент BOOTP на временном порту 1883, а хост B (который находится в той же сети) использует клиент MQTT на том же порту. Теперь, когда сервер BOOTP отправляет широковещательное ответное сообщение с широковещательным IP-адресом 255.255.255.255 и номером порта назначения. 1883, то хост A примет правильное сообщение на своем DHCP-клиенте на прикладном уровне. Но клиент MQTT, работающий на прикладном уровне хоста B, получит неверное сообщение. Использование хорошо известного порта (в нашем случае 68) предотвращает использование тех же двух номеров портов назначения и, следовательно, запрещает другим протоколам использовать тот же порт, который уже используется другим протоколом. Проще говоря, это предотвращает получение приложением сообщения по совершенно другому протоколу.

Для более подробной информации я бы порекомендовал вам пройти RFC 2131 .


Другими словами, различие между клиентом и сервером недопустимо для UDP, и при получении «ответов» компьютер пользователя должен прослушивать их, как если бы это был сервер. Но это не просто ответы. Современные DHCP-серверы отправляют push-обновления, которые происходят через несколько часов, а иногда и дней после согласования аренды. Это делает прослушивание на порту 68 настоящей серверной работой. Кстати, исходящий порт всегда 67, предположительно, чтобы код пользовательского пространства не мог его подделать.
Зденек

12

DHCP основан на BOOTP, который был создан в 1985 году.

BOOTP использует TFTP в качестве протокола передачи файлов.

TFTP был создан в 1981 году и использует порт 69, поэтому речь шла об использовании ближайших неиспользуемых портов (68 и 67).


Спасибо за ответ. Я также немного исследовал и пришел к выводу, что неиспользуемый порт 68 используется на стороне клиента, так что приложение, работающее на уровне 5, не получает сообщение от другого протокола.
Валафар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.