Mengisi alamat IP secara manual pada satu mesin hanya butuh beberapa menit. Masalahnya muncul ketika perangkat yang datang dan pergi berjumlah puluhan setiap hari: laptop karyawan, ponsel tamu, dan printer tanpa layar. Tidak ada yang sanggup mencatat dan menyetel semuanya dengan tangan tanpa salah tulis atau salah pilih alamat kembar. DHCP (Dynamic Host Configuration Protocol) memindahkan pekerjaan itu ke server jaringan, dan pada Chapter ini kita bedah cara kerjanya dari sisi klien maupun sisi server.

Masalah Konfigurasi Manual #

Konfigurasi manual memaksa kita mengulang lima informasi yang sama di setiap mesin: alamat IP, netmask, gateway, alamat DNS, dan nama host. Setiap informasi adalah kesempatan untuk salah — satu angka yang keliru bisa membuat mesin tidak bisa dihubungi sama sekali, dan alamat kembar membuat dua mesin saling melempar koneksi satu sama lain. Buku catatan alamat yang dijaga seorang admin pun cepat kedaluwarsa karena perangkat hilang dan diganti.

DHCP membalik pendekatannya: mesin datang tanpa membawa apa pun, lalu meminjam seluruh konfigurasi dari jaringan. Admin hanya mengelola satu daftar aturan di satu tempat — rentang alamat, gateway, dan DNS — dan setiap perangkat menyusun konfigurasinya sendiri saat menyala. Inilah alasan hampir semua jaringan rumah, kafe, dan kantor memakai DHCP secara default.

DORA: Empat Langkah Memperoleh Alamat #

Klien yang baru menyala belum tahu alamat server DHCP, jadi klien tidak bisa mengirim paket terarah. Protokol ini memakai broadcast — paket yang dikirim ke semua host di jaringan setempat — sebagai pengantar awal. Keduanya berbicara lewat UDP pada dua port khusus yang tercatat di /etc/services:

bash
grep -E '^(bootps|bootpc)[[:space:]]' /etc/services

Output yang Dihasilkan:

text
bootps		67/udp
bootpc		68/udp

bootps (boot protocol server) di sisi pemberi alamat dan bootpc di sisi peminta. Urutan tanya-jawabnya dikenal sebagai DORA — empat pesan yang selalu berurutan:

text
DISCOVER  klien  -> broadcast  : "ada server DHCP di sini?"
OFFER     server -> klien     : "alamat 192.0.2.105 tersedia untukmu"
REQUEST   klien  -> server    : "saya ingin memakai 192.0.2.105"
ACK       server -> klien     : "disetujui — berikut gateway, DNS, dan masa sewa"

Klien kadang menerima beberapa OFFER bila ada lebih dari satu server; klien memilih satu dan menegaskan pilihannya lewat REQUEST, sehingga server yang lain tahu alamatnya tidak jadi dipakai. ACK adalah momen konfigurasi lengkap diserahkan: alamat, gateway, server DNS, hingga lama masa sewa.

Sewa Alamat dan Pembaruannya #

Alamat dari DHCP bukan milik selamanya melainkan lease — pinjaman berbatas waktu. Server mencatat siapa memakai alamat berapa sampai kapan; bila batas waktu lewat tanpa diperpanjang, alamat dikembalikan ke kolam dan bisa dipinjam perangkat lain. Klien tidak menunggu habis: pembaruan terjadi otomatis pada dua titik waktu yang diturunkan dari lama sewa:

bash
lease=86400
printf 'lease penuh  : %d detik\n' "$lease"
printf 't1 (50%%)   : %d detik\n' $(( lease / 2 ))
printf 't2 (87.5%%) : %d detik\n' $(( lease * 7 / 8 ))

Output yang Dihasilkan:

text
lease penuh  : 86400 detik
t1 (50%)   : 43200 detik
t2 (87.5%) : 75600 detik

Mari kita bedah baris demi baris:

  1. Baris 1 (lease=86400): variabel lease menyimpan masa sewa contoh — 86400 detik atau tepat 24 jam, angka yang umum di jaringan kantor.
  2. Baris 2: menghitung T1, titik 50% masa sewa. Pada detik ke-43200 (jam ke-12), klien menghubungi server asal secara langsung dan meminta perpanjangan — percakapan singkat yang tidak terasa oleh pengguna.
  3. Baris 3: menghitung T2, titik 87.5% masa sewa. Bila server asal masih tidak menjawab, klien menyiarkan REQUEST ke jaringan; server mana pun yang menjawab bisa mengambil alih.
  4. Bila sewa tetap habis, klien melepas alamat dan proses DORA dimulai dari awal.

Titik T1 dan T2 inilah sebabnya laptop yang tidur semalaman biasanya masih memakai alamat lama: sebelum habis, pembaruan sudah berjalan diam-diam.

Sisi Server: dhcpd dan Reservasi #

Sisi server menyimpan aturan peminjaman dalam satu file konfigurasi. Format klasiknya milik dhcpd dari ISC, dan varian sintaksnya diikuti hampir semua implementasi lain termasuk DHCP di router rumah. Kita pelajari formatnya lewat salinan:

bash
printf 'subnet 192.0.2.0 netmask 255.255.255.0 {\n  range 192.0.2.100 192.0.2.200;\n  option routers 192.0.2.1;\n  option domain-name-servers 192.0.2.53;\n  default-lease-time 86400;\n  max-lease-time 172800;\n}\n\nhost printer-kantor {\n  hardware ethernet 00:11:22:33:44:55;\n  fixed-address 192.0.2.20;\n}\n' > dhcpd.conf
cat dhcpd.conf

Output yang Dihasilkan:

text
subnet 192.0.2.0 netmask 255.255.255.0 {
  range 192.0.2.100 192.0.2.200;
  option routers 192.0.2.1;
  option domain-name-servers 192.0.2.53;
  default-lease-time 86400;
  max-lease-time 172800;
}

host printer-kantor {
  hardware ethernet 00:11:22:33:44:55;
  fixed-address 192.0.2.20;
}

Blok subnet mendefinisikan satu jaringan tempat alamat dipinjamkan:

  1. range 192.0.2.100 192.0.2.200: kolam alamat dinamis — 101 alamat yang boleh dipinjam perangkat mana pun.
  2. option routers dan option domain-name-servers: gateway dan DNS yang ikut diserahkan pada pesan ACK, sehingga klien memperoleh seluruh konfigurasi dalam satu kali bicara.
  3. default-lease-time dan max-lease-time: masa sewa normal dan batas maksimal bila klien meminta lebih lama.

Blok host di bawahnya adalah reservasi: kartu jaringan dengan alamat MAC 00:11:22:33:44:55 selalu menerima 192.0.2.20, tidak pernah masuk kolam dinamis. Printer dan server internal adalah kandidat klasik — keduanya perlu alamat tetap, tetapi kita tidak ingin mengelola file konfigurasi statis di mesinnya. Catatan sewa berjalan disimpan server di direktori /var/lib/dhcp/, file yang pertama ditunjuk admin saat ada dua perangkat saling mengklaim alamat yang sama.

Klien DHCP di Sistem Modern #

Klien tertua di Debian adalah dhclient: konfigurasinya dibaca dari /etc/dhcp/dhclient.conf, dan daftar sewa yang sedang dipegang dicatat di /var/lib/dhcp/ — file pertama yang dibuka saat kita ingin tahu alamat mana yang benar-benar sedang dipinjam mesin. Dua perintahnya yang paling sering dipakai:

text
dhclient -r          # lepaskan alamat yang sedang dipinjam
dhclient enp3s0      # minta alamat baru untuk interface enp3s0

Saat ini dhclient makin jarang dipanggil langsung karena pengelola koneksi modern — NetworkManager dan systemd-networkd — membawa klien DHCP sendiri di dalam daemon-nya. Begitu kabel tercolok atau profil wifi aktif, klien tersebut menjalankan DORA tanpa perintah tambahan dari kita. Justru itu topik berikutnya: bagaimana NetworkManager mengatur seluruh siklus hidup koneksi, dari profil tersimpan hingga pemilihan wifi, dari satu tempat.

Referensi lanjut: wiki Arch tentang DHCP untuk implementasi klien dan server di Linux, serta wiki Debian DHCP Client untuk perilaku klien bawaan di Debian.