DNS 與命名
DNS 快取(DNS caching)
如果每次造訪網站都觸發完整的「從根到授權」走訪,DNS 會很慢,而根伺服器會被壓垮。快取是解方:解析器一旦學到一個答案,就把副本保留一段時間並重複使用。它像你查過一次後把朋友的號碼記進自己的聯絡人——下次你只要從清單上讀出來,而不必再打給查號台。快取正是讓 DNS 每秒處理數十億次查詢而不熔毀的原因。
具體來說,當遞迴解析器解析完一個名稱,它把得到的記錄存在記憶體裡,並標上「可保留多久」(隨每筆記錄附帶的 TTL)。在那個 TTL 期間內,之後任何對同一名稱的查詢都直接由快取回答——不走訪、不聯絡授權伺服器。快取發生在好幾層:遞迴解析器中(它服務眾多使用者、命中最多)、你的作業系統中,甚至你的瀏覽器裡。一個熱門名稱(如大型網站)幾乎總是已經快取在離你很近的地方。
為什麼重要:快取是 DNS 能擴展的最大單一原因,也解釋了日常的速度差異:某網站的第一次查詢(稍慢)與之後每次查詢(瞬間)。誠實的取捨在於新鮮度:快取的答案可能過時。如果你更改某名稱的指向,解析器與用戶端會繼續提供舊位址,直到它們的快取副本到期——那段延遲就是 DNS 變更著名的「傳播緩慢」。在預定變更之前先把記錄的 TTL 調低,能縮短那段時間窗,代價是查詢更頻繁。
辦公室網路上第一個人造訪 example.com:他們的解析器做了完整走訪,並用 300 秒的 TTL 快取那筆 A 記錄。接下來的 5 分鐘內,辦公室裡其他造訪 example.com 的人,都從那份快取瞬間得到答案。
第一次查詢付出全部成本;其餘的免費搭快取便車。
快取也是為什麼 DNS 變更不會立刻生效。舊答案會滯留在快取裡,直到它的 TTL 用完,所以你更新後一個名稱仍可能在一段時間內解析到舊位址。
又稱
另見