概念地圖・DNS 解析鏈
分類:系統
這一頁不只是把一個概念解釋一遍——一張自己畫的結構圖,加上拿台灣情境從頭走一次的實例演練、這個框架什麼時候會騙你,以及它接回 P.A.I.N. 之後長什麼樣。一頁必須交付的三層 →
DNS 解析鏈:三層問到底,同一條路只走一次
打開一個網址,畫面還沒動之前,你的電腦已經替你問了三輪話。第一輪問根伺服器,它只回一句「去找 tw 那一層」;第二輪問 tw 的頂級域伺服器,它回「去找這個網域自己登記的那台」;第三輪問到權威伺服器,才拿到真正的位址。三段加起來 57 毫秒——而下一次同樣的網址,這三輪一段都不必再走。DNS 解析鏈畫的就是這件事:一個問題怎麼被逐層轉手,答案又怎麼原路帶回來、就地留下。
三層節點,各自只知道什麼
這條鏈之所以要分層,是因為沒有任何一台機器背得下全世界的網域。每一層只保管一件事,然後把你交給下一層。
| 節點 | 手上保管的 | 回答得出來的 | 回答不出來的 |
|---|---|---|---|
| 根伺服器 | 一份頂級域的名冊 | tw 這一段該找誰 | 單一網域的下落 |
| 頂級域伺服器 | 該頂級域底下所有網域的登記 | 這個網域登記在誰名下 | 主機真正的位址 |
| 權威伺服器 | 這個網域自己的紀錄 | 真正的位址 | 別人家的網域 |
| 本機快取 | 剛拿到的答案與它的存活時間 | 存活時間內的同一題 | 過期之後的任何一題 |
三層裡有兩層的工作是把你推走。根伺服器 4 毫秒就把球交出去,頂級域伺服器再花 18 毫秒交一次,真正掏得出位址的權威伺服器花掉 35 毫秒——最慢的那一段,也是唯一有東西可以給的那一段。三段加起來 57 毫秒。而第四列那個快取,是這條鏈留下的收據:同樣一題在 3600 秒內再問,只要 0.4 毫秒,連一支箭頭都不必畫。
你那條查詢鏈,卡在哪一段
把 DNS 那六支箭頭換成六通電話,你手上那條打聽鏈就開始長得跟它一樣。底下四個自問,用來指認你卡在第幾支。
一、第一站手上有答案嗎。護理站接得起電話,手上卻只有床位組的分機。這條鏈的前兩通,本來就打給只知道下一站是誰的人——會慢,但慢得有道理。真正該檢查的是:有沒有人被迫從第一站開始,而他其實可以直接撥第三站。自問:我這條問題鏈的第一站,手上有答案,還是只有下一站的號碼?
二、每一段各自花多久。三通電話 3、7、11 分鐘,合計 21 分鐘。多數人只記得「等了快半小時」,記不得第三通就吃掉一半。時間標到每一段上,才看得出該補的是哪一段——是總機接得慢,還是專科護理師得一床一床去查。沒有分段數字的抱怨,改起來只能猜。自問:我這條鏈上最長的那一段是哪一段?上一次量它是什麼時候?
三、答案回來以後有沒有落在紙上。解析鏈最省事的動作發生在最後:答案回到手上,順手寫進快取,前後不到 1 毫秒。醫院那邊的對應動作是把「八東 12 床」寫上交班白板——小到不值得排進流程,省下來的卻是下一個人的 21 分鐘。多數團隊把力氣花在讓每一站更快,卻沒有人負責把答案接住。自問:上一個人問到的答案,現在放在哪?我找得到嗎?
四、那張白板上的字能撐多久。DNS 給每一筆快取一個存活時間,這張圖用的是 3600 秒;時間一到就作廢,下一次乖乖重走三層。白板那筆的有效期是 2 小時,理由很土:床位會變。存活時間設短了,等於天天重走那 21 分鐘;設長了,你會非常有效率地送出一個過期的答案。自問:我手上這筆答案,過了多久就該當它不算數?
一通問空床的電話,三層跟一次
底下這家台灣中部的區域醫院,是為了把這個結構講清楚而編出來的示意情境,沒有指涉任何真實機構。時間是週三下午,急診壓了三個要住院的病人,住院醫師手上只有一支電話。
- 第一通:打給護理站(3 分鐘):他問「哪裡還有空床」,護理站翻不到全院的表,只回一句「去問床位組」。三分鐘換到一個正確的下一站
- 第二通:打給床位組(7 分鐘):床位組看得到全院分區,看不到單一床位的當下狀態,回的是「八樓東側,去問專科」。範圍從全院縮到一層樓
- 第三通:打給八樓東側(11 分鐘):專科護理師一床一床確認,才吐出「12 床,下午三點清空」。十一分鐘,全院最不想接的那一通
- 寫上白板(不到 1 分鐘):住院醫師把「八東 12 床,三點清空,有效到五點」寫在交班白板上。這一步沒有算進 21 分鐘
- 下一個人來問(40 秒):抬頭看一眼白板,走人。同一條路沒有再走一次
21 分鐘裡,真正在找床的只有第三通那 11 分鐘;前面 10 分鐘買的是「該問誰」。這件事在解析鏈上長得一模一樣——4 毫秒與 18 毫秒買的是方向,35 毫秒才換到答案本身。醫院多數的改善會往「讓總機更快」使力,可是那一段本來就只有 3 分鐘,再快也擠不出什麼。真正的槓桿在白板:寫下那一筆,下一個人的 21 分鐘變成 40 秒,而寫的動作不到 1 分鐘。代價也一起寫上去了——白板有效期 2 小時,過了得有人去擦掉,否則第三個人會拿著一張很快、很錯的答案直接上樓。以上為說明結構用的示意情境,僅供理解框架之用。
這條解析鏈什麼時候會騙你
- 57 毫秒是順利那一次的成績。這條鏈的每一層都可能不回話,而 DNS 的預設反應是等——等到逾時,再換一台重問。圖上畫的是六支箭頭全部命中;實務上光是第三層換一台重問一次,總時間就從 57 毫秒跳到好幾百。所以拿 57 這個數字去跟人承諾之前,先問清楚它是平均值,或者只是最順的那一次。中位數漂亮的系統,尾巴常常很醜。
- 快取把對的答案存一小時,也把錯的存一小時。存活時間是對稱的,它不管你這筆剛好在搬家。換了主機、改了位址之後,最惱人的就是這 3600 秒——你這邊全部正確,世界上一部分人手上還握著舊答案,而你沒有辦法伸手把它從別人的機器裡拿回來。這也是為什麼要搬家的人會提前幾天先把存活時間調短,讓那張白板的有效期縮成幾分鐘。
- 這張圖只保證問到,不保證問對。權威伺服器說什麼,整條鏈就信什麼——它的名字叫權威,指的是它握有這個網域的最終紀錄,至於那份紀錄對不對,這條鏈從頭到尾沒有查過。誰能改那台伺服器上的紀錄,誰就能改變全世界對你的位址的認知,而這條鏈會非常忠實地把新答案送到每一個人手上。
痛點視角怎麼讀那句「等一下」
一條問答鏈的成本,會記在最後一個人頭上。
P.A.I.N. 的第一個字問的是誰在痛。這條鏈上每一站都很輕鬆:根伺服器 4 毫秒交差,頂級域 18 毫秒交差,權威伺服器最久也只有 35 毫秒。痛全部堆在最前面那個人身上——他等的長度,是後面所有轉手的總和。住院醫師那 21 分鐘也一樣,沒有任何一站失職,每一站都盡責地把他送到下一站,21 分鐘照樣發生了。這張圖畫得出每一段花了幾毫秒,畫不出使用者在第幾毫秒決定關掉分頁。它也畫不出更貴的那件事:同一個問題,你的組織一天被問幾次。DNS 撐得住全世界,關鍵在絕大多數查詢根本沒有走上這張圖——它們在第一步就被快取接住了。今晚可以做的:挑一個這個月被問過三次以上的問題,把上一次的答案寫在所有人都看得到的地方,後面補一句「這筆有效到什麼時候」。
關於 DNS 解析,常見問題
DNS 為什麼要拆成根、頂級域、權威三層?
因為沒有任何一台機器裝得下全世界的網域,也沒有人願意讓一台機器決定所有人的位址。分層之後,根伺服器只需要保管頂級域的名冊,頂級域只需要保管自己底下的登記,各家網域的細節由自己的權威伺服器管。代價是一次查詢要多走兩趟:4 毫秒與 18 毫秒都花在問路上。換來的是每一層都可以獨立換人、獨立擴充,而且沒有一台機器掛掉會讓整個網際網路失明。
快取的存活時間該設多久?
看那個答案的保鮮期。位址半年不動的服務,設 3600 秒甚至更長都合理,多數查詢會在 0.4 毫秒內結束。要搬機器的前幾天要反過來,把它降到幾分鐘,讓舊答案很快作廢——像醫院給白板上的床位只留 2 小時,因為床會被收走。判準是同一個:這筆答案在世界上還成立多久,就給它多久,不要拿一小時去蓋一個十分鐘就會變的事實。
第一次查詢 57 毫秒,算快還是慢?
以三段往返來說算順利的。真正該看的是它在整體體驗裡的比重:57 毫秒之後,瀏覽器才開始連線、握手、要資料,後面那些通常是好幾百毫秒。所以把 DNS 從 57 毫秒壓到 45 毫秒,使用者多半感覺不到;把「每一次都要重問」變成「一小時只問一次」,感覺得到。優先順序是先讓答案被記住,再去追每一段的毫秒。
換了主機,為什麼有人還是連到舊的地方?
他手上那份快取還沒過期。你改的是權威伺服器上的紀錄,但世界各地的解析器在你改之前就拿走了舊答案,並且照存活時間留著它——設 3600 秒,就要等最久一小時。這段期間新舊並存屬於正常現象——兩邊的機器都照著規則在做事。想縮短它,只能在搬家之前先把存活時間調小;已經搬完才想起來,剩下的就只是等。
算一次你那個答案能放多久不必重問,再看它現在被寫在哪裡、誰負責擦掉。同樣是一層一層往下問,快速簡約樹問到夠用就停手、不再往下追;默克爾樹驗證則是拿同一種樹狀結構,去確認資料沒被動過手腳。
喜歡這篇文章嗎?
每週幫你拆二本好書,把判斷力、好書金句、好問題,直送你的信箱。
不適合你可隨時退訂 · 每週兩封,陪你把書讀進生活。
送出即表示同意我們依隱私權政策使用你的 email。