> For the complete documentation index, see [llms.txt](https://weerasak-chongnguluam.gitbook.io/sedoc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://weerasak-chongnguluam.gitbook.io/sedoc/grokking-modern-system-design-for-software-engineers-and-managers/how-the-domain-name-system-works.md).

# How the Domain Name System Works

DNS คือระบบที่ช่วยให้เราค้นหา IP จริงๆของ host จาก domain name

### DNS Hierarchy

infrastructure ของ DNS จะทำงานกันเป็นชั้นๆ โดยแต่ละชั้นก็มีหน้าที่ส่ง query ต่อไปอีกชั้นจนกว่าจะได้ IP ออกมา

* **DNS Resolver** คือ service แรกที่รับ query แล้วส่งต่อให้ name server ในชั้นถัดไปคือ Root level name servers ซึ่ง Resolver เองอาจจะทำ caching ไว้ด้วยทำให้ตอบ IP ได้เลยโดยไม่ต้องส่งต่อถ้ามีข้อมูลใน cache แล้ว cache นั้นยังไม่หมดอายุ
* **Root-level name servers** จะเอา request มาดูว่า domain นั้นใช้ top level domain name อะไร (top level ก็พวกหลัง dot เช่น `.co.th`, `.com`, `.io` จากนั้นก็จะส่งต่อไปให้ Top Level Domain name servers ที่รับผิดชอบสำหรับ top level domain name นั้นๆ ต่อไป
* **Top-level domain (TLD) name servers** สำหรับ TLD server ก็จะมาค้นหาต่อว่า domain name ที่ต้องการค้นหา IP นั้นจดไว้กับ Authoritative name servers ไหน หมายความว่า จดไว้กับองค์กรไหน ที่ได้รับสิทธิ์ตั้ง Authoritative name servers นั่นเอง แล้วก็จะส่ง request ต่อไปยัง authoritative name servers นั้นๆ
* **Authoritative name servers** ชั้นนี้เป็นชั้นสุดท้ายแล้วที่เก็บข้อมูล mapping ระหว่าง domain name กับ IP แล้ว เป็น server ขององค์กรที่ได้รับสิทธ์ให้รับจดโดเมนนั่นเอง
