Network
DNS & HTTP
DNS คืออะไร
เข้าใจว่า DNS คืออะไร ทำงานอย่างไร และทำไมถึงสำคัญสำหรับการทำงานของ Internet — จาก domain name สู่ IP address
1. Core Idea: DNS คืออะไร
DNS (Domain Name System) คือระบบที่แปลง "ชื่อ" ที่มนุษย์อ่านได้ เช่น google.com ให้เป็น IP address เช่น 142.250.x.x ที่คอมพิวเตอร์ใช้จริง ทุกครั้งที่คุณพิมพ์ URL ลงในเบราว์เซอร์ — DNS ทำงานอยู่เบื้องหลังเพื่อหา IP ที่ตรงกัน ถ้าไม่มี DNS คุณต้องจำ IP address ของทุกเว็บไซต์ที่ต้องการเข้าถึง
- DNS เป็นระบบกระจาย (distributed) — ไม่มีเซิร์ฟเวอร์เดียวที่รู้ทุก domain
- มี DNS server หลายชั้น: Root DNS → TLD DNS → Authoritative DNS
- คำตอบถูก cache ไว้ตาม TTL เพื่อให้ตอบสนองเร็ว
- ทำงานเป็นหลักบน UDP port 53 (ถ้าข้อมูลใหญ่จะใช้ TCP)
2. Mental Model: สมุดโทรศัพท์ของ Internet
ก่อนมือถือ เวลาจะโทรหาใครคุณต้องเปิดสมุดโทรศัพท์หาชื่อแล้วได้เบอร์ DNS ทำงานแบบเดียวกัน: - ชื่อ (google.com) = ชื่อคนในสมุดโทรศัพท์ - IP address (142.250.x.x) = เบอร์โทรศัพท์ - DNS Server = สมุดโทรศัพท์ที่ค้นได้เร็วมาก ความต่างคือ DNS เป็นระบบกระจายขนาดใหญ่ที่มีสำเนาอยู่ทั่วโลก และอัปเดตอัตโนมัติ
DNS Resolution ค้นหาจาก cache ใกล้ที่สุดก่อน ถ้าไม่มีค่อยถามชั้นถัดไป
3. ชั้นของ DNS — Hierarchy
| ชั้น | ชื่อ | บทบาท | ตัวอย่าง |
|---|---|---|---|
| 1 (บนสุด) | Root DNS Server | รู้จัก TLD ทั้งหมด (.com, .org, .th ฯลฯ) มี 13 กลุ่มทั่วโลก | a.root-servers.net |
| 2 | TLD DNS Server | รู้ nameserver ของ domain ใน TLD นั้น | เซิร์ฟเวอร์ .com, .org, .th |
| 3 | Authoritative DNS | รู้ IP จริงของ domain ที่ตัวเองดูแล | ns1.google.com, ns2.cloudflare.com |
| ตัวกลาง | Recursive Resolver | รับ query จาก client แล้วถามแทน cache ไว้ | 8.8.8.8, 1.1.1.1, ISP resolver |
4. DNS Record Types ที่ Developer ควรรู้
| Record | ย่อมาจาก | หน้าที่ | ตัวอย่าง |
|---|---|---|---|
| A | Address | domain → IPv4 address | google.com → 142.250.x.x |
| AAAA | IPv6 Address | domain → IPv6 address | google.com → 2404:6800:... |
| CNAME | Canonical Name | alias ชี้ไปอีก domain | www.example.com → example.com |
| MX | Mail Exchange | ระบุ mail server | example.com MX mail.example.com |
| TXT | Text | ข้อความอิสระ ใช้ verify, SPF, DKIM | v=spf1 include:... |
| NS | Name Server | ระบุ authoritative DNS ของ domain | example.com NS ns1.example.com |
| PTR | Pointer | reverse DNS: IP → domain | 142.250.x.x → google.com |
5. Worked Example: พิมพ์ google.com ในเบราว์เซอร์
- 1) Browser ตรวจ cache ของตัวเอง — เคยเปิด google.com ไหม? ถ้ามีและยัง valid → ใช้ได้เลย
- 2) ถ้าไม่มี → ถาม OS (ตรวจ /etc/hosts ก่อน จากนั้น OS DNS cache)
- 3) ถ้ายังไม่มี → ถาม Recursive Resolver (เช่น 8.8.8.8 ของ Google)
- 4) Resolver ตรวจ cache ของตัวเอง — ถ้ามีคำตอบ → ตอบทันที
- 5) Resolver ถาม Root DNS → Root บอกว่า .com อยู่ที่ไหน
- 6) Resolver ถาม TLD DNS (.com) → TLD บอก nameserver ของ google.com
- 7) Resolver ถาม Authoritative DNS ของ Google → ได้ IP 142.250.x.x
- 8) Resolver ส่ง IP กลับให้ Browser และ cache ไว้ตาม TTL
- 9) Browser เปิด TCP connection ไปยัง 142.250.x.x:443 เพื่อโหลดหน้าเว็บ
6. TTL (Time To Live)
TTL คือจำนวนวินาทีที่ resolver สามารถ cache คำตอบ DNS ไว้ได้ เมื่อ TTL หมด resolver ต้องถามใหม่เพื่อให้ได้ข้อมูลล่าสุด
| TTL | ข้อดี | ข้อเสีย | ใช้เมื่อ |
|---|---|---|---|
| สูง (เช่น 86400s = 1 วัน) | load บน DNS น้อย, ตอบเร็ว | เปลี่ยน IP ช้า | IP นิ่งไม่เปลี่ยน |
| ต่ำ (เช่น 60s = 1 นาที) | เปลี่ยน IP ได้เร็ว | load มากขึ้น | กำลัง migrate server |
| 300s (5 นาที) | balance ดี | — | ส่วนใหญ่ใช้ค่านี้ |
เคล็ดลับ: ถ้าวางแผน migrate server — ลด TTL ให้ต่ำ (เช่น 60s) ล่วงหน้า 1–2 วัน เมื่อเปลี่ยน IP แล้ว การเปลี่ยนแปลงจะมีผลเร็วขึ้น จากนั้นค่อยขึ้น TTL กลับ
7. Practical Notes: จุดสับสนของมือใหม่
- DNS ≠ hosting — DNS แค่แปลงชื่อเป็น IP, hosting คือที่เก็บไฟล์เว็บ
- เปลี่ยน DNS แล้วรอนาน → ดู TTL เดิม อาจต้องรอถึง TTL หมดก่อน
- flush DNS cache บน macOS: sudo dscacheutil -flushcache · Linux: systemd-resolve --flush-caches
- dig คำสั่งที่ดีที่สุดสำหรับ debug DNS — ดู TTL, record type, resolver ที่ตอบ
- DNS over HTTPS (DoH) และ DNS over TLS (DoT) เข้ารหัส DNS query เพื่อ privacy
8. Recap + เชื่อมไปบทถัดไป
- DNS แปลง domain name เป็น IP address — ทำงานแบบ hierarchical และ distributed
- ขั้นตอน: Browser cache → OS cache → Resolver cache → Root → TLD → Authoritative
- Record types สำคัญ: A, AAAA, CNAME, MX, TXT, NS
- TTL กำหนดว่า cache อยู่ได้นานแค่ไหน — ลด TTL ก่อน migrate
- บทถัดไปจะเจาะกระบวนการ DNS resolution ทีละขั้นตอนแบบละเอียด