跳至正文

什麼是DNS? 🌐

當你輸入網站地址時,如何能夠訪問該網站呢?這都要感謝DNS!我來詳細解釋DNS到底是什麼、為什麼需要它,讓初學者也能輕鬆理解!

用日常生活比喻DNS?

讓我們把DNS比作電話簿

電話簿的故事 📞

想給朋友打電話時:

沒有電話簿:
"得打02-1234-5678..."
→ 號碼難記 😓

使用電話簿:
搜尋"王小明"
→ 電話簿給出02-1234-5678
→ 自動撥通電話! ✅

DNS也一樣!

訪問網站:

沒有DNS:
"得訪問192.168.1.1..."
→ 數字IP不可能記住 😓

使用DNS:
輸入"google.com"
→ DNS給出172.217.175.46
→ 自動連接網站! ✅

DNS的定義

DNS (Domain Name System)

  • 將網域名稱轉換為IP位址的系統
  • 網際網路的"電話簿"
  • 將人類易讀的地址轉換為電腦理解的數字
google.com → 172.217.175.46
pchome.com.tw → 210.59.230.39

為什麼需要DNS?

問題:IP位址難以記憶

❌ 192.168.1.1
❌ 172.217.175.46
❌ 223.130.195.95

→ 只有數字無法知道是什麼網站
→ 不可能記住

解決:使用網域名稱

✅ google.com
✅ pchome.com.tw
✅ github.com

→ 有意義且易於記憶
→ 可以使用品牌名稱

DNS工作過程

1. 在瀏覽器中輸入地址

使用者:輸入"google.com"

2. 開始DNS查詢

瀏覽器 → DNS伺服器: "告訴我google.com的IP位址"

3. DNS伺服器層級結構

1. Root DNS(根)

2. TLD DNS(.com、.net等)

3. Authoritative DNS(擁有實際IP)

4. 返回IP位址

4. 用IP位址連接

DNS伺服器 → 瀏覽器: "是172.217.175.46"
瀏覽器 → 172.217.175.46: 連接請求
網站載入! ✅

DNS查詢詳細過程

1. 檢查快取
瀏覽器快取 → 作業系統快取 → 路由器快取
└─ 如果有就直接使用 ⚡

2. Recursive DNS(網路營運商DNS)
└─ 向ISP的DNS伺服器查詢

3. Root DNS伺服器
└─ 告訴".com去這裡"

4. TLD DNS伺服器(.com)
└─ 告訴"google.com去這裡"

5. Authoritative DNS
└─ "google.com的IP是172.217.175.46"

6. 快取結果
└─ 為以後儲存

DNS記錄類型

A記錄(Address)

網域 → IPv4位址

example.com → 192.168.1.1

AAAA記錄

網域 → IPv6位址

example.com → 2001:0db8:85a3::8a2e:0370:7334

CNAME記錄(Canonical Name)

別名 → 其他網域

www.example.com → example.com
blog.example.com → example.com

MX記錄(Mail Exchange)

指定郵件伺服器

example.com → mail.example.com(優先級10)

TXT記錄

儲存文字資訊
主要用於所有權驗證、SPF、DKIM等

example.com → "v=spf1 include:_spf.google.com ~all"

NS記錄(Name Server)

指定網域伺服器

example.com → ns1.example.com

DNS快取

快取層級

1. 瀏覽器快取
└─ 最快(1ms)

2. 作業系統快取
└─ 非常快(5ms)

3. 路由器快取
└─ 快(10ms)

4. ISP DNS快取
└─ 正常(50ms)

5. 實際DNS查詢
└─ 慢(200ms+)

TTL(Time To Live)

為每個DNS記錄設定有效期

TTL: 3600(1小時)
→ 1小時內使用快取
→ 1小時後重新查詢

優點:

  • 快速回應
  • 減少DNS伺服器負載

缺點:

  • IP變更時不能立即反映

DNS伺服器類型

1. Public DNS(公共DNS)

Google DNS:

主DNS: 8.8.8.8
備用DNS: 8.8.4.4

→ 快速且可靠

Cloudflare DNS:

主DNS: 1.1.1.1
備用DNS: 1.0.0.1

→ 最快速度
→ 注重隱私

Quad9:

9.9.9.9

→ 注重安全(阻擋惡意網站)

2. ISP DNS(網路營運商DNS)

由中華電信、台灣大哥大、遠傳電信等提供
→ 自動設定
→ 經常較慢

DNS安全

DNS欺騙(DNS Spoofing)

攻擊:

駭客操縱DNS回應
google.com → 駭客伺服器IP

使用者訪問假網站
→ 資訊竊取風險 🚨

防禦:

DNSSEC(DNS Security Extensions)
→ DNS回應的加密和驗證

DNS over HTTPS(DoH)

透過HTTPS加密DNS查詢
→ 網路營運商或駭客無法看到查詢內容
→ 隱私保護 🔒

DNS over TLS(DoT)

透過TLS加密DNS查詢
→ 與DoH類似但使用不同協定

變更DNS設定

Windows

1. 控制台 → 網路和網際網路
2. 網路連線 → 內容
3. 網際網路通訊協定第4版(TCP/IPv4)
4. 選擇"使用下列的DNS伺服器位址"
5. 慣用: 8.8.8.8
其他: 8.8.4.4

Mac

1. 系統偏好設定 → 網路
2. 進階 → DNS標籤
3. 用+按鈕新增DNS伺服器
8.8.8.8
8.8.4.4

路由器

1. 存取路由器管理頁面(通常是192.168.0.1)
2. 網路設定
3. DNS伺服器設定
主DNS: 8.8.8.8
備用DNS: 8.8.4.4

DNS故障排除

症狀:網站打不開

1. 清除DNS快取

Windows:

ipconfig /flushdns

Mac:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

Linux:

sudo systemd-resolve --flush-caches

2. 變更DNS伺服器

改為Google DNS(8.8.8.8)
→ 繞過ISP DNS問題

3. 用nslookup確認

nslookup google.com

→ 確認DNS查詢是否正常

實際使用範例

範例1:訪問網站

1. 在瀏覽器輸入"pchome.com.tw"
2. DNS查詢: pchome.com.tw → 210.59.230.39
3. 向210.59.230.39發送HTTP請求
4. PChome頁面載入! ✅

範例2:子網域

blog.example.com
mail.example.com
api.example.com

可以有不同的IP位址
→ 可在不同伺服器上託管

範例3:CDN

example.com → CDN伺服器IP

DNS根據使用者位置
返回最近的CDN伺服器IP
→ 快速載入 ⚡

網域購買和DNS設定

1. 購買網域

在GoDaddy、Namecheap、網路中文等購買
例: mywebsite.com(年費約300-600元)

2. 設定網域伺服器

變更為託管商的網域伺服器
例: 使用Cloudflare時
ns1.cloudflare.com
ns2.cloudflare.com

3. 新增DNS記錄

新增A記錄:
mywebsite.com → 伺服器IP位址

新增CNAME:
www → mywebsite.com

常見問題(FAQ)

Q1:DNS查詢需要多長時間?

A:

  • 快取命中: 1-10ms(非常快)
  • 快取未命中: 50-200ms(正常)
  • 慢的情況: 500ms+(ISP DNS問題)

Q2:為什麼要變更DNS?

A: 有幾個原因:

  • 速度提升(Google DNS比ISP DNS快)
  • 穩定性(繞過ISP DNS故障)
  • 安全性(阻擋惡意網站)
  • 隱私(使用DoH、DoT)

Q3:DNS快取會自動刪除嗎?

A: 會! TTL時間過後會自動刪除。

  • 瀏覽器: 幾分鐘
  • 作業系統: 幾小時
  • ISP: 1-2天

Q4:網域變更後為什麼不能立即生效?

A: 因為DNS傳播時間

  • 向全球DNS伺服器傳播的時間
  • 通常24-48小時
  • TTL設定短可以更快

Q5:有免費網域嗎?

A: 有限地有:

  • .tk、.ml、.ga(Freenom)- 免費
  • GitHub Pages: username.github.io
  • Vercel: project.vercel.app

DNS效能最佳化

1. DNS預取(Prefetching)

<link rel="dns-prefetch" href="//cdn.example.com">
<link rel="dns-prefetch" href="//api.example.com">

→ 頁面載入前預先查詢DNS

2. 使用快速DNS

Google DNS(8.8.8.8)
Cloudflare(1.1.1.1)
→ 比ISP DNS快

3. TTL最佳化

頻繁變化的記錄: TTL短(300秒)
固定記錄: TTL長(86400秒)

下一步 🚀

如果你理解了DNS:

  1. 了解URL結構 - 網域是URL的一部分
  2. 理解HTTP請求/回應 - DNS後的HTTP通訊
  3. HTTPS和SSL/TLS是什麼? - 安全通訊
  4. IP Lookup - 確認網域的IP

總結

DNS是網際網路的電話簿! 📞

要記住的要點:

  • DNS = 網域 → IP位址轉換
  • google.com → 172.217.175.46
  • 透過快取提升速度
  • 推薦Public DNS(8.8.8.8)
  • 用DNSSEC、DoH增強安全性

多虧了DNS,我們可以用有意義的名稱而不是數字來訪問網站! 🌐