يتمتع الإنترنت بأساس مفاهيمي غني، مع العديد من الأفكار المثيرة التي تمكنه من العمل كما نعرفه. أحد هذه الميزات الرائعة حقًا هو DNS. قبل اختراعه، كان كل من يستخدم الإنترنت - والذي لم يكن كثيرًا في تلك المرحلة - يعتمد على ملف مشترك يسمى HOSTS.TXT، يحتفظ به معهد ستانفورد للأبحاث. تمت مزامنة هذا الملف يدويًا من خلال بروتوكول نقل الملفات (FTP)، ومع تزايد عدد المضيفين، زاد معدل التغيير وعدم جدوى النظام. في عام 1983، شرع بول موكابتريس في إيجاد حل طويل الأمد للمشكلة واستمر في تصميم وتنفيذ DNS. إنها شهادة على عبقريته حيث أن ابتكاره كان قادرًا على التوسع من بضعة آلاف من أجهزة الكمبيوتر إلى الإنترنت كما نعرفه اليوم.
مع الهدف المشترك المتمثل في الحصول على فهم عميق لنظام DNS، والقيام بشيء مثير للاهتمام مع Rust، والتغلب على بعض الحكة التي أشعر بها، شرعت في الأصل في تنفيذ خادم DNS الخاص بي. هذه الوثيقة ليست سجلًا صادقًا لتلك الرحلة، بل هي نسخة مثالية منها، دون كل المنعطفات التي انتهى بي الأمر إلى اتخاذها. سنقوم تدريجيًا بتنفيذ خادم DNS كامل، بدءًا من المبادئ الأولى.
يحتوي كل فصل على عينة مقابلة تحتوي على الكود الكامل حتى تلك النقطة في الدليل، المسمى من sample1.rs
إلى sample5.rs
. يمكن تشغيلها باستخدام، في الفصل الأول، cargo run --example sample1
.
read_qname
والتي سمحت لحزمة ضارة بتشغيل حلقة لا نهائية. تم تحديث الكود ليتوافق مع ممارسات الصدأ الحالية، وإصلاح العديد من أوجه القصور القبيحة.