Internet memiliki landasan konseptual yang kaya, dengan banyak ide menarik yang memungkinkannya berfungsi seperti yang kita ketahui. Salah satu yang keren banget adalah DNS. Sebelum ditemukan, semua orang di internet - yang memang jumlahnya tidak banyak pada saat itu - mengandalkan file bersama bernama HOSTS.TXT, yang dikelola oleh Stanford Research Institute. File ini disinkronkan secara manual melalui FTP, dan seiring bertambahnya jumlah host, laju perubahan dan ketidaklayakan sistem juga meningkat. Pada tahun 1983, Paul Mockapetris berupaya mencari solusi jangka panjang terhadap masalah tersebut dan kemudian merancang dan mengimplementasikan DNS. Ini merupakan bukti kejeniusannya bahwa ciptaannya telah mampu berkembang dari beberapa ribu komputer hingga Internet seperti yang kita kenal sekarang.
Dengan tujuan gabungan untuk mendapatkan pemahaman mendalam tentang DNS, melakukan sesuatu yang menarik dengan Rust, dan mengatasi rasa gatal saya sendiri, saya awalnya mulai mengimplementasikan server DNS saya sendiri. Dokumen ini bukanlah kronik sebenarnya dari perjalanan tersebut, namun merupakan versi ideal dari perjalanan tersebut, tanpa harus mengambil jalan memutar apa pun. Kami akan menerapkan server DNS lengkap secara bertahap, dimulai dari prinsip pertama.
Setiap bab memiliki sampel terkait yang berisi kode lengkap hingga titik tersebut dalam panduan, diberi nama sample1.rs
hingga sample5.rs
. Ini dapat dijalankan menggunakan, untuk bab pertama, cargo run --example sample1
.
read_qname
yang memungkinkan paket berbahaya memicu loop tak terbatas. Memodernisasi kode agar sesuai dengan praktik karat saat ini, dan memperbaiki berbagai inefisiensi yang buruk.