dnsguide
1.0.0
網路擁有豐富的概念基礎,有許多令人興奮的想法,使其能夠以我們所知的方式發揮作用。 DNS 是最酷的功能之一。在它被發明之前,網路上的每個人(誠然,當時的人數並不多)都依賴一個名為 HOSTS.TXT 的共享文件,該文件由史丹佛研究所維護。該檔案是透過FTP手動同步的,隨著主機數量的增加,變化的速度和系統的不可行性也在增加。 1983 年,Paul Mockapetris 著手尋找該問題的長期解決方案,並繼續設計和實作 DNS。他的創作能夠從數千台電腦擴展到我們今天所知的互聯網,證明了他的天才。
出於深入了解 DNS、用 Rust 做一些有趣的事情以及解決自己的一些問題的綜合目標,我最初開始實現自己的 DNS 伺服器。這份文件並不是那段旅程的真實編年史,而是它的理想化版本,沒有我最終走的所有彎路。我們將從首要原則開始逐步實現完整的 DNS 伺服器。
每章都有一個對應的範例,其中包含指南中截至該點的完整程式碼,名為sample1.rs
到sample5.rs
。對於第一章,這些可以使用cargo run --example sample1
來運行。
read_qname
中的安全漏洞,該漏洞允許惡意資料包觸發無限循環。程式碼進行了現代化改造,以符合當前的 Rust 實踐,並修復了各種醜陋的低效率問題。