跳至內容
返回

用戶是怎麼訪問到你的主機的?

發佈於:  at  05:30 下午

前言

上週的文章中我們提到了如何在Cloudflare上面買domain,這次我預計說明Domain Name是如何一步步訪問到我們架起的服務的,那麼我們開始吧。

首先,以我們當前的blog舉例:https://blog.clarkliu.com。在實際訪問到伺服器主機前,會經過以下步驟。

瀏覽器查快取

如果之前已經訪問過該網站,Browser或是OS就會保存相關的快取,如此一來下次訪問就不用再查一遍。

瀏覽器詢問Recursive Resolver(ISP 或 8.8.8.8)

我們會利用一個服務叫做Recursive Resolver,他的主要作用是替你負責不斷地輪詢主機,最後幫你把你要的答案,也就是Server的IP位址抓回來,預設主機的Recursive Resolver會是來自ISP提供的服務,例如說台灣的話就是中華電信、遠傳等等。

Recursive Resolver 詢問 Root Name Server

Recursive Resolver會首先查詢Root Name Server,用來取得 Top Level Domain(TLD NS) 的 IP。

Top Level Domain Name Server主要負責保存相關Top Level網域的資訊,比方說”.com”就是一個Top Level Domain,除此之外常見的TLD NS包含”jp”、“tw”等等。

Recursive Resolver 詢問 TLD Name Server

此時得知TLD的Recursive Resolver就會詢問TLD, 接著得到Authoritative NS的 IP,Authoritative NS就是雲端服務商的Domain Name Server,這裡保存著用戶Domain Name所對應的IP,如果你使用AWS去管理DNS 就會是 AWS Route 53,你如果是Cloudflare 就會是 Cloudflare的服務等等。

Recursive Resolver 詢問 Authoritative Name Server

假設我的domain部署在cloudflare,我就可以透過Cloudflare的Authoritative Name Server得到 伺服器主機的IP

Recursive Resolver結果回傳瀏覽器,並快取起來

你可以參考圖片來更理解流程。

DNS Lookup

以上的範例是 若從Cloudflare購買網域,且DNS也透過Cloudflare管理的情況。

實務上可能會更加複雜,舉例來說,你只是透過cloudflare買domain,實際上是使用AWS Route 53管理DNS的話,狀況就會變成訪問完Cloudflare後繼續訪問AWS Route 53…詳細可以看以下的DNS設定。

在DNS中,我們可以設定多種Type,最常見的就是A與CNAME了,這邊我使用AI一次列出各種DNS Type。

Record Type功能範例補充
A網域 → IPv4yoursite.com -> 104.21.1.1最常見
AAAA網域 → IPv6yoursite.com -> 2606:4700::...IPv6 版本的 A Record
CNAME網域別名 → 另一個網域www -> yoursite.com不能直接指向 IP
MX郵件伺服器yoursite.com -> mail.google.comEmail 收信用
TXT純文字資訊SPF / DKIM / 網域驗證很多 SaaS 都靠它驗證
NS指定 DNS 管理者ns1.cloudflare.com告訴全世界「去哪查這個網域」
SOADNS Zone 的管理資訊serial、refresh 等DNS 同步機制重要依據
SRV服務位置資訊_sip._tcp.example.com常見於 SIP、Minecraft、K8s 等

其中跟本文最相關的是 A 與 NS Record,A Record 決定最終的 IP,NS Record 決定誰是 Authoritative Server。

透過以上描述,你應該可以很清楚的知道DNS背後的運作可能相當複雜,而每一次的請求如果都需要這樣訪問,那速度可想而知將會非常慢,於是為了減少DNS解析需要消耗的時間,每筆 DNS 記錄都有一個 TTL(Time To Live),也就是快取的有效期限,單位是秒,到期後快取就會失效,需要重新查詢。

為了減少每次都要走完整個查詢流程,DNS 設計了多層快取:當中包含

總結來說DNS的功能相當複雜,希望我的內容是簡單好懂,那我們先到這邊,下週再會吧。


建議修改
在以下平台分享此文章:

上一篇
Leetcode 刷題記錄(2)
下一篇
買一個domain給自己有甚麼好處?