Bagaimana klien DHCP mengetahui mana dari beberapa DHCPOFFERS yang harus diterima?

16

Bayangkan kita memiliki jaringan seperti pada gambar. Enam host pada satu jaringan layer 2, tanpa VLAN. Jaringan seharusnya dibagi menjadi dua subnet, dengan masing-masing satu server DHCP. Server DHCP memiliki alamat IP tetap, sehingga mereka tahu di mana subnet milik mereka, jelas.

Kemudian klien baru terhubung. Mereka tidak tahu apa-apa tentang subnet mana mereka seharusnya berada dan mengirim DHCPDISCOVER mereka ke siaran Ethernet 255.255.255.255, jadi itu masuk ke kedua server DHCP. Kedua server membalas dengan penawaran. Sekarang inilah pertanyaan saya: Bagaimana klien tahu, DHCPOFFER mana yang seharusnya dia terima?

Situasi DHCP

Michael Niemand
sumber
Bandingkan pertanyaan dan jawaban ini di sana.
Kamil Maciorowski
Ini pertanyaan terkait lainnya .
kasperd
1
"siaran ethernet 255.255.255.255" - Itulah alamat broadcast IP untuk jaringan lokal, bukan alamat Ethernet. Pesan DHCP DISCOVER awal juga sangat mungkin untuk menggunakan alamat broadcast Ethernet ff: ff: ff: ff: ff: ff, tetapi itu sebenarnya bukan hal yang sama.
ilkkachu

Jawaban:

26

Jawaban yang paling sederhana - first come first served.

Jika Anda memiliki banyak VLAN dan 10.10.10.0/24 menggunakan VLAN berbeda hingga 10.10.20.0/24 - siaran tidak akan melewati VLAN.

Jika DHCP Server berada di VLAN terpisah untuk klien, sebuah iphelper pada antarmuka perutean antara vlan akan mengarahkan siaran ke lokasi yang benar.

Dalam skenario Anda di mana Anda memiliki 2 jaringan terpisah dalam VLAN yang sama (atau ketiadaan) yang melayani subnet yang berbeda - ini adalah perlombaan.

DHCP Melayani menggunakan transaksi berikut:

  1. Penemuan DHCP (DHCPDISCOVER) - Siaran Klien - "Apakah ada Server DHCP di luar sana?"
  2. Penawaran DHCP (DHCPOFFER) - Server ke Klien - "Ya, saya di sini dan tersedia!"
  3. Permintaan DHCP (DHCPREQUEST) - Klien ke Server "Hebat, bisakah saya punya alamat?"
  4. Pengakuan DHCP (DHCPACK) - Server ke klien "Tentu, ini IP, mask, gateway, beberapa DNS / WINS Server, Time Server, dan semua hal lain yang dikonfigurasi untuk ruang lingkup Anda"

Semua ini terjadi pada Port UDP 67 untuk server dan 68 untuk klien.

Segera setelah Langkah 2 tercapai - klien akan berhenti "mendengarkan" tanggapan DHCP Server lainnya - dengan senang hati berurusan dengan Server pertama untuk memberinya perhatian.

Sebagai catatan - sebenarnya ada serangkaian serangan DoS (Denial of Service) yang terkenal yang menyalahgunakan hak ini. Penyerang menancapkan perangkat yang merespon dan mengirimkan paket DHCPOFFER dan kemudian tidak mengirim DHCPACK ketika ditanya ... berulang-ulang. Ada juga serangan DoS lain di mana Server DHCP "palsu" menawarkan alamat yang tidak dapat dialihkan atau yang bertentangan dengan IP lain yang disadap untuk mengacaukan jaringan.

Fazer87
sumber
16
Dan karena itu jawaban singkat untuk "Tapi bagaimana cara menjalankan beberapa subnet pada satu segmen Layer-2?" adalah " Anda tidak. " (Ya, ada beberapa cara, tetapi ini bukan sesuatu yang harus Anda lakukan secara umum. Satu layer-2 domain = satu subnet.)
user1686
Terima kasih kawan, itu benar-benar cocok dengan saya. Saya selalu bertanya-tanya bagaimana ini bisa terjadi, tetapi ternyata tidak. Jadi kesimpulannya adalah: Memiliki perute router / layer 3 antara subnet atau segmen dengan VLAN, apakah saya benar?
Michael Niemand
4
Secara umum, ya, Anda memerlukan VLAN atau segmentasi fisik. Berbagi domain L2 akan bisa dilakukan hanya jika kedua server DHCP Anda dibatasi untuk menangani "dikenal" klien (misalnya dengan daftar 'sewa statis' dengan alamat MAC diperbolehkan).
user1686
3
Saya pikir Anda bisa memberikan setiap server DHCP daftar putih alamat MAC dan mengontrol klien mana yang mendapatkan alamat dari server mana dengan cara itu.
Darren
@grawity, Anda dapat dengan mudah menjalankan beberapa subnet IP pada segmen layer-2 yang sama, jika subnet sama, dan Anda tidak peduli klien mana yang mendapatkan alamat dari subnet mana. Anda hanya memiliki satu server DHCP yang memberikan alamat dari kedua blok, dan satu router yang bertindak sebagai gateway untuk kedua blok (dengan alamat di masing-masing). Selesai Mengatakan "Anda tidak" jelas-jelas salah.
ilkkachu
9

The jawaban yang ada dari @ Fazer87 secara luas yang benar dalam praktek dan saya merekomendasikan upvoting dan menerimanya. Jawaban ini mengeksplorasi detail kecil sedikit lebih tepat.


Kedua server DHCP dapat merespons dengan pesan DHCPOffer.

Klien DHCP dapat menerimanya berdasarkan "datang pertama, dilayani pertama". Namun, tidak diperlukan untuk mengambil pendekatan itu.

RFC2131 menentukan:

Klien menerima satu atau lebih pesan DHCPOFFER dari satu atau lebih server. Klien dapat memilih untuk menunggu beberapa respons. Klien memilih satu server untuk meminta parameter konfigurasi, berdasarkan pada parameter konfigurasi yang ditawarkan dalam pesan DHCPOFFER.

Jadi, jika server DHCP kedua menawarkan reservasi alamat IP yang lebih lama, atau menawarkan server waktu di mana yang lain tidak, atau mungkin memiliki bidang khusus yang telah diprogram klien untuk disukai, mungkin menerima tawaran kedua.

Biasanya, pendekatan "pertama datang, pertama dilayani" akan memberi Anda tawaran yang belum melalui beberapa lompatan lintas perangkat (siaran ulang BOOTP) sehingga merupakan protokol yang baik untuk diikuti jika Anda tidak punya alasan untuk peduli.

Saya berada di satu proyek di mana perangkat khusus akan lebih memilih DHCPOffer yang termasuk server TFTP di mana firmware yang diperbarui dapat ditemukan.

Berpikir aneh
sumber
... atau jika satu server menawarkan alamat yang telah digunakan klien sebelumnya dan ingin menyimpannya
ilkkachu
@ilkkachu: Ya, secara teori, tetapi ada mekanisme yang lebih baik untuk ini (keduanya memperbarui reservasi sebelum berakhir dengan server DHCP yang lama, atau mengirimkan DHCPDiscovery yang meminta alamat IP yang lama) sehingga tidak mungkin berguna dalam praktiknya.
Oddthinking