扒一扒 DNS 的前世今生
今天給大家科普一下關(guān)于DNS的相關(guān)知識(shí),講一講一個(gè)網(wǎng)址背后發(fā)生的一些故事。
簡單來說,DNS(域名系統(tǒng))就是域名和各種數(shù)據(jù)之間的一個(gè)映射表。最常見的映射就是把像 chatgpt.com 這樣的域名轉(zhuǎn)換成電腦能懂的IP地址。
當(dāng)你把 chatgpt.com 敲進(jìn)瀏覽器時(shí),DNS 就會(huì)出馬,找到并返回這個(gè)域名綁定的 IP 地址:
圖片
當(dāng)然啦,這背后發(fā)生了很多事。在這篇文章里,我們就來扒一扒它到底是怎么運(yùn)作的。
我希望這篇文章能比 ChatGPT 或者 DeepSeek 講得還好懂,要是連它們都能寫得比我好,那我就太失敗了!
好了,閑話少說,咱們開始吧。
DNS 誕生之前
在深入 DNS 之前,咱先看看它出現(xiàn)之前是啥情況。
在 80 年代現(xiàn)代互聯(lián)網(wǎng)出現(xiàn)之前,有個(gè)叫ARPAnet的玩意兒。它是當(dāng)時(shí)第一個(gè)分組交換網(wǎng)絡(luò),算是現(xiàn)代互聯(lián)網(wǎng)的老祖宗。
ARPAnet 用一個(gè)叫HOSTS.TXT的文件,把服務(wù)器的域名和網(wǎng)絡(luò)地址(也就是 IP 地址)對(duì)應(yīng)起來。
這個(gè)文件大概長這樣:
# 官方 ARPANET 主機(jī)表 (hosts.txt)
# 格式:<IP 地址> <主機(jī)名> [別名] # [注釋]
10.0.0.6 mit-ai # MIT 人工智能實(shí)驗(yàn)室
10.0.0.7 sri-nic # SRI 網(wǎng)絡(luò)信息中心
10.0.0.11 ucla-seismo # 加州大學(xué)洛杉磯分校 地震學(xué)系
10.0.0.13 berkeley # 加州大學(xué)伯克利分校
10.0.0.14 stanford # 斯坦福大學(xué)
# 別名 (可選項(xiàng),跟在主機(jī)名后面)
10.0.0.6 mit mit-ai
這個(gè)“主” HOSTS.TXT 文件就一份,由斯坦福研究所 (SRI) 獨(dú)家維護(hù)。這慢慢就出問題了,為啥呢?
- 流量和服務(wù)器壓力山大:所有設(shè)備都得找 SRI 的服務(wù)器查名字,SRI 服務(wù)器快被壓垮了。
- 名字撞車越來越頻繁:網(wǎng)絡(luò)變大了,大家想用的好名字就那些,沖突越來越多。
- 文件變得巨胖:文件大小漲到了 100-200KB。現(xiàn)在看這點(diǎn)數(shù)據(jù)不算啥,但在 80 年代的基礎(chǔ)設(shè)施條件下,這已經(jīng)是個(gè)大瓶頸了。
這些問題可太要命了,直接催生了 DNS 的誕生。
DNS登場
DNS 架構(gòu)
DNS (域名系統(tǒng))最好理解成一個(gè)分布式的和層次化的系統(tǒng)。
啥意思呢?
- 分布式:意思是 DNS 運(yùn)行在好多臺(tái)互相連接的服務(wù)器(也就是 DNS 服務(wù)器)上。
- 層次化:DNS 組織成一個(gè)樹狀結(jié)構(gòu),上面的服務(wù)器管著下面的服務(wù)器。等會(huì)兒講到 DNS 區(qū)域時(shí)再細(xì)說。
DNS 記錄
現(xiàn)在我們知道了,DNS 就是一堆服務(wù)器按樹狀結(jié)構(gòu)組織起來,互相通信。那這些服務(wù)器存啥呢?
DNS 服務(wù)器存的就是DNS 記錄。看個(gè)例子:
# DNS 記錄結(jié)構(gòu)
# 域名 TTL(秒) 類別 類型 數(shù)據(jù)
example.com. 3600 IN A 93.184.216.34
www.example.com. 3600 IN CNAME example.com.
example.com. 3600 IN MX 10 mail.example.com.
mail.example.com. 3600 IN A 93.184.216.50
example.com. 3600 IN TXT "hello world"
來詳細(xì)掰扯掰扯每個(gè)字段是啥意思:
- 域名:就是互聯(lián)網(wǎng)上的域名,比如 chatgpt.com。注意結(jié)尾那個(gè)點(diǎn) . 表示根域(通常可以省略)。
- TTL:生存時(shí)間(單位秒)。意思是這個(gè)記錄你能在本地緩存多久,過期了就得去問權(quán)威服務(wù)器要新的。
- 類別:這玩意兒基本總是IN,代表“互聯(lián)網(wǎng)” (Internet)。還有別的類,像CH或HS,但現(xiàn)在基本不用了。
- 類型:代表這條記錄存的是哪類數(shù)據(jù)。最常見的類型有:
A:代表一個(gè)IPv4 地址。
AAAA:代表一個(gè)IPv6 地址。
CNAME:意思是規(guī)范名稱,就是給另一個(gè)域名起個(gè)別名。
MX:郵件交換器,指定誰來收這個(gè)域名的郵件(后面跟優(yōu)先級(jí),數(shù)字越小越優(yōu)先)。
TXT:文本記錄,可以存任意文本(比如驗(yàn)證信息、安全策略啥的)。
- 數(shù)據(jù):你要查的那個(gè)信息的真身。具體是啥完全取決于類型字段。
DNS 區(qū)域
還記得我們說 DNS 是個(gè)大樹嗎?
那么,一個(gè) DNS 區(qū)域就可以代表整棵樹、樹的一個(gè)分支、或者樹里的一個(gè)節(jié)點(diǎn)。
在下面的示意圖里,我圈出了兩個(gè)分支,標(biāo)為區(qū)域1和區(qū)域2。不過區(qū)域怎么劃分其實(shí)挺隨意的。
圖片
關(guān)鍵點(diǎn)在于:位于一個(gè)區(qū)域根部的那個(gè) DNS 服務(wù)器,負(fù)責(zé)管理它下面的所有服務(wù)器。比如,example.com 這個(gè)服務(wù)器就管著 hello 和 world(如果它們是子域的話)。
DNS 服務(wù)器
“DNS 服務(wù)器”這個(gè)詞用得很寬泛,這也是我學(xué) DNS 時(shí)最暈乎的地方之一。
簡單說,任何運(yùn)行 DNS 軟件的服務(wù)器都可以叫 DNS 服務(wù)器。但有四種核心角色你必須知道:
- 權(quán)威域名服務(wù)器:這些服務(wù)器存著它們負(fù)責(zé)的DNS 區(qū)域里所有域名的官方 DNS 記錄。比如 .com 的權(quán)威服務(wù)器就存著所有以 .com 結(jié)尾網(wǎng)站的記錄。
- 遞歸解析器:一個(gè)專門幫客戶(比如你的電腦)查找 DNS 信息的程序,還會(huì)把結(jié)果緩存起來。比如客戶說“我要訪問 www.example.com”,遞歸解析器就把復(fù)雜的查詢過程全包了,最后直接給你返回 example.com 的正確 IPv4 地址(A 記錄)。你的路由器或 ISP(像電信、聯(lián)通)提供的 DNS 服務(wù)器通常就干這個(gè)活。
- 緩存服務(wù)器:專門用來存之前查過的 DNS 結(jié)果,這樣下次再問就能飛快地給答案。
- 轉(zhuǎn)發(fā)器:它自己不去查,而是把收到的 DNS 查詢請(qǐng)求 轉(zhuǎn)給另一個(gè)能查的服務(wù)器(通常就是個(gè)遞歸解析器)去處理。
一臺(tái)物理上的 DNS 服務(wù)器可以同時(shí)干好幾樣活。比如,一個(gè)遞歸解析器通常也自帶緩存功能(也就是緩存服務(wù)器)。
DNS 查詢實(shí)例
術(shù)語講夠了,讓我們看個(gè)動(dòng)圖(腦補(bǔ)一下)!看看這一切是怎么配合工作的,舉個(gè)栗子??:一個(gè)客戶端第一次查詢 hello.world.com 的 IP 地址(A 記錄)。
圖片
請(qǐng)求內(nèi)容是:A hello.world.com? (意思就是:hello.world.com 的 IP 是啥?)
注意:存根解析器(Stub Resolver)不算真正的 DNS 服務(wù)器,它就是你電腦操作系統(tǒng)里一個(gè)簡單的 DNS 客戶端,負(fù)責(zé)跟你配置的 DNS 服務(wù)器(通常是路由器或 ISP 的)對(duì)話。路由器這時(shí)通常就扮演轉(zhuǎn)發(fā)器的角色。
接下來,就要進(jìn)行遞歸 DNS 查詢了。過程大概是這樣的:
- 客戶端問路由器/本地DNS:“嘿,hello.world.com 的 IP 是啥?” (本地沒緩存)。
- 本地DNS(遞歸解析器)開始干活:
- 先看看自己緩存里有沒有,沒有。
- 跑去問根域名服務(wù)器:“.com 該找誰管啊?”
- 根服務(wù)器回復(fù):“.com 的事歸這些 TLD 服務(wù)器(頂級(jí)域服務(wù)器)管,地址是 X.X.X.X”。
- 問 .com TLD 服務(wù)器:“world.com 該找誰管啊?”
- .com TLD 服務(wù)器回復(fù):“world.com 歸這些權(quán)威服務(wù)器管,地址是 Y.Y.Y.Y”。
- 問 world.com 權(quán)威服務(wù)器:“hello.world.com 的 IP 是啥?”
- world.com 的權(quán)威服務(wù)器回復(fù):“在這兒呢,hello.world.com 的 A 記錄是143.54.1.8”。
- 結(jié)果返回與緩存:
- 遞歸解析器拿到最終答案 143.54.1.88,開心地把它返回給客戶端(一路經(jīng)過路由器)。
- 這個(gè)結(jié)果會(huì)一路被緩存:ISP 的解析器會(huì)緩存它,你的路由器(如果支持)也可能會(huì)緩存,你的電腦操作系統(tǒng)也會(huì)緩存。緩存多久?看記錄的 TTL 值,通常幾小時(shí)到幾天不等(比如 1 到 72 小時(shí))。
- 連接建立:客戶端瀏覽器拿到 IP 地址 143.54.1.88,終于可以向這個(gè)地址發(fā)送 HTTP 請(qǐng)求加載網(wǎng)頁了。
圖片
結(jié)語
DNS 這玩意兒挺繞的,倒不是因?yàn)樗旧矶嚯y,而是因?yàn)橐愣臇|西實(shí)在有點(diǎn)多。
即使有了這些概念解釋和實(shí)例演示,我們也只是掀開了 DNS 世界的一角。它在現(xiàn)實(shí)世界中能干的事和帶來的影響,遠(yuǎn)比我們這里講的要豐富和深遠(yuǎn)得多。