Как устроен DHCP

«Как устроен DHCP» — вопрос из категории Сети, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

DHCP (Dynamic Host Configuration Protocol) автоматически назначает IP-адреса и другие сетевые параметры устройствам в сети. Работает по модели клиент-сервер через UDP (порты 67/сервер, 68/клиент).

Основные этапы:

  1. DISCOVER — клиент ищет сервер (broadcast).
  2. OFFER — сервер предлагает IP.
  3. REQUEST — клиент подтверждает выбор.
  4. ACK — сервер фиксирует аренду.

Пример кода (упрощённый DHCP-клиент на Go):

package main

import (
    "net"
    "log"
)

func main() {
    conn, err := net.ListenPacket("udp4", ":68")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    buf := make([]byte, 1024)
    n, _, err := conn.ReadFrom(buf)
    if err != nil {
        log.Fatal(err)
    }
    log.Printf("Received DHCP packet: %x", buf[:n])
}

Нюансы:

  • Аренда адресов (lease time).
  • Резервирование IP по MAC.
  • Опции (DNS, шлюз, маска).