인터넷은 우리가 알고 있는 대로 기능할 수 있도록 하는 많은 흥미로운 아이디어와 함께 풍부한 개념적 기반을 갖추고 있습니다. 정말 멋진 것 중 하나는 DNS입니다. 그것이 발명되기 전에는 인터넷상의 모든 사람들(당시에는 그리 많지 않았지만)은 스탠포드 연구소에서 관리하는 HOSTS.TXT라는 공유 파일에 의존했습니다. 이 파일은 FTP를 통해 수동으로 동기화되었으며 호스트 수가 증가함에 따라 변경 속도와 시스템 실행 불가능성도 증가했습니다. 1983년에 Paul Mockapetris는 문제에 대한 장기적인 해결책을 찾기 시작했고 계속해서 DNS를 설계하고 구현했습니다. 그의 창조물이 수천 대의 컴퓨터에서 오늘날 우리가 알고 있는 인터넷에 이르기까지 확장될 수 있었다는 것은 그의 천재성에 대한 증거입니다.
DNS에 대한 깊은 이해를 얻고, Rust를 사용하여 흥미로운 작업을 수행하고, 내 자신의 가려운 부분을 해결하려는 목표를 가지고 원래는 내 자신의 DNS 서버를 구현하기 시작했습니다. 이 문서는 그 여정에 대한 진실된 기록이 아니라, 오히려 내가 택하게 된 모든 우회 과정을 거치지 않은 이상화된 버전입니다. 우리는 첫 번째 원칙부터 시작하여 점차적으로 완전한 DNS 서버를 구현할 것입니다.
각 장에는 가이드의 해당 지점까지의 전체 코드를 포함하는 sample1.rs
부터 sample5.rs
까지의 해당 샘플이 있습니다. 첫 번째 장에서는 cargo run --example sample1
사용하여 실행할 수 있습니다.
read_qname
의 보안 취약성을 수정했습니다. 현재의 녹 방지 관행에 맞게 코드를 현대화하고 다양한 추악한 비효율성을 수정했습니다.