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 实践,并修复了各种丑陋的低效率问题。