В большинстве клиент-серверных приложений номер порта сервера является хорошо известным номером, тогда как клиент использует текущий доступный номер порта. DHCP другой. Здесь и клиент, и сервер используют хорошо известный порт: UDP-порт 67 для DHCP-сервера и UDP-порт 68 для DHCP-клиента.
Почему они так спроектированы и имеют фиксированный номер клиентского порта?
Это необходимо, поскольку клиент может не иметь IP-адреса при использовании DHCP (он использует DHCP для получения адреса).
Сервер и клиент обмениваются данными посредством широковещательной рассылки, поэтому сервер транслирует IP-адрес клиента на UDP-порт 68. Другого пути для доступа сервера к клиенту нет. И это единственный способ для клиента получить ответ на свой запрос, поскольку у него нет IP-адреса.
Если я назначаю временный номер порта, скажем 10000, DHCP-клиенту, я должен назначить один и тот же номер порта всем клиентам в сети.
DHCP-сервер не знает IP-адрес клиента, ему известен номер порта DHCP-клиента. Таким образом, DHCP-сервер передает пакет с номером порта клиента, равным 10000. Если всем DHCP-клиентам не назначен номер порта 10000 для приложения DHCP, возможно, что некоторые клиенты запускают другое приложение на порту с номером 10000. Пакет от DHCP-сервер будет доставлен не тому клиентскому приложению. Следовательно, для DHCP лучше использовать хорошо известные номера портов.