我們?cè)谏暇W(wǎng)時(shí)如果想要訪問(wèn)到另一臺(tái)機(jī)器上的內(nèi)容,通常只需要直接輸入一串地址,例如:www.upyun.com,就能夠準(zhǔn)確訪問(wèn)到自己想要訪問(wèn)的網(wǎng)站。但是實(shí)際上這只是方便我們記憶的字符形式網(wǎng)絡(luò)標(biāo)識(shí),真正讓我們的機(jī)器和另一臺(tái)機(jī)器進(jìn)行溝通的是 IP 地址。只不過(guò) IP 地址無(wú)論是輸入還是記憶都非常麻煩,因此才誕生了域名系統(tǒng)。那么域名是怎么連接到那個(gè)服務(wù)器的 IP 呢?這就和我們今天要說(shuō)的域名系統(tǒng) DNS 有關(guān)了。
DNS 是什么?
因?yàn)橛幸饬x的名字可以表示主機(jī)的賬號(hào)、工作性質(zhì)、所屬的地域和組織等,從而便于記憶和使用。所以用戶會(huì)更傾向于用名字來(lái)標(biāo)識(shí)主機(jī),DNS 就是為這種需要而開發(fā)的。DNS 代表域名系統(tǒng)(Domain Name System)。該系統(tǒng)會(huì)將域名(example.com)翻譯成實(shí)際的 IP 地址。
DNS 的邏輯結(jié)構(gòu)是一個(gè)分層的域名樹,由 Internet 網(wǎng)絡(luò)信息中心(InterNIC)管理著域名樹的根,稱為“根域”,根域用句號(hào)“.”表示,不過(guò)這個(gè)通常是省略的。需要注意的是全世界一共只有 13 臺(tái) IPv4 根域名服務(wù)器。
根域下面是頂級(jí)域(TLD),分為國(guó)家頂級(jí)域(ccTLD)和通用頂級(jí)域(gTLD)。國(guó)家頂級(jí)域使用國(guó)家和地區(qū)縮寫代碼,例如“cn”代表中國(guó)。通用頂級(jí)域就是我們常見的 com/net/org 等。

頂級(jí)域下面是二級(jí)域,這是正式注冊(cè)給組織和個(gè)人的唯一名稱,例如 www.upyun.com 中的 upyun 就是又拍云注冊(cè)的域名。在二級(jí)域之下,組織機(jī)構(gòu)還可以劃分子域,用于各分支部門使用。但是標(biāo)準(zhǔn)規(guī)定,一個(gè)域名的長(zhǎng)度通常不超過(guò) 63 個(gè)字符,最多不能超過(guò) 255 個(gè)字符。
當(dāng)然了,DNS 不僅僅能指向 IP 地址,同時(shí)還支持其他形式的記錄。常見的 DNS 記錄形式有:
A 記錄:域的 IPv4 地址的記錄。
AAAA 記錄:域的 IPv6 地址的記錄。
CNAME 記錄:別名,將一個(gè)域或子域轉(zhuǎn)發(fā)到另一個(gè)域,不提供 IP 地址。
MX 記錄:將郵件定向到電子郵件服務(wù)器。
TXT 記錄:可使管理員在記錄中存儲(chǔ)文本注釋。
NS 記錄:存儲(chǔ) DNS 條目的名稱服務(wù)器。
一個(gè)有特色的域名,可以讓用戶將公司品牌“深深印在腦海里”。盡管域名可能是永恒不變的,但記錄指向的地址及使用的 DNS 服務(wù)器卻會(huì)因?yàn)樾枨蠼?jīng)常變動(dòng)。有時(shí)我們也會(huì)遇到修改了 DNS 記錄后,實(shí)際訪問(wèn)到的地址卻沒有更新的情況,這就涉及到了 DNS 傳播。
什么是 DNS 傳播?
一般我們對(duì)網(wǎng)站的域名解析記錄或 DNS 服務(wù)提供商進(jìn)行更改后,全球所有的服務(wù)器都需要一段時(shí)間才能采用新的記錄值,這段時(shí)間可能是幾小時(shí),也可能是幾天,這個(gè)過(guò)渡階段就是 DNS 傳播。
DNS 傳播因 DNS 服務(wù)器的負(fù)載情況而異。服務(wù)器越舊所需要更新時(shí)間就越長(zhǎng),因此在過(guò)渡期間,會(huì)出現(xiàn)其他提供商已經(jīng)使用了新的地址,但一些舊服務(wù)器的服務(wù)商可能還未更新的。這是因?yàn)槌掷m(xù)查詢新的地址會(huì)導(dǎo)致負(fù)載過(guò)高,所以 DNS 服務(wù)器不會(huì)將更新信息臨時(shí)存儲(chǔ)在緩存中,只有當(dāng)所有服務(wù)器都更新了此緩存,才會(huì)在所有地方同步上新新地址。
除了服務(wù)器負(fù)載,還有一些因素也會(huì)影響 DNS 傳播。
影響 DNS 傳播的因素
DNS 區(qū)域和 TTL 值
DNS 被分成許多不同的區(qū)域,是 DNS 命名空間的一部分,由特定組織或管理員加以管理。區(qū)域文件是存儲(chǔ)在 DNS 服務(wù)器中的純文本文件,它包含區(qū)域的實(shí)際表示,和區(qū)域內(nèi)每個(gè)域的所有記錄。
我們可以為域名區(qū)域文件中的每個(gè) DNS 設(shè)置 TTL。TTL 代表“生存時(shí)間”,是服務(wù)器緩存 DNS 信息的時(shí)間段。它可以定義設(shè)置臨時(shí)緩存、存儲(chǔ)多久以及何時(shí)進(jìn)行更新。TTL 值對(duì)于 DNS 傳播是很關(guān)鍵的,如果 TTL 值為 24 小時(shí),則更改后需要 1 天才能生效。當(dāng)然,為了更新可以更快生效,我們可以調(diào)整 TTL 值。但是,此調(diào)整必須在更新之前進(jìn)行,因?yàn)檎{(diào)整 TTL 也屬于 DNS 傳播,也需要一段時(shí)間才能生效。另外注意切勿將 DNS TTL 設(shè)置為 0,因?yàn)闃?biāo)準(zhǔn)中沒有定義數(shù)字 0,它可能會(huì)導(dǎo)致 DNS 信息被忽略或拒絕。
如果使用云解析修改域名的解析記錄,最終生效時(shí)間取決于各地運(yùn)營(yíng)商的 DNS 服務(wù)器緩存刷新時(shí)間,一般情況下等同于設(shè)置解析時(shí)的 TTL 時(shí)間。例如解析設(shè)置中 TTL 值為 10 分鐘,修改解析后將在 10 分鐘內(nèi)實(shí)現(xiàn)全球生效。

如果是修改 DNS 服務(wù)器,那么生效時(shí)間取決于本地 DNS 緩存的域名 DNS 服務(wù)器名稱的 TTL 時(shí)間,例如“.com”頂級(jí)域是 48 小時(shí),“.cn”是 24 小時(shí)。因?yàn)椴煌敿?jí)域 DNS 服務(wù)器的 TTL 時(shí)間是不同的,所以理論上修改域名 DNS 服務(wù)器全球解析生效時(shí)間最長(zhǎng)需要 48 小時(shí)。
ISP(Internet 服務(wù)提供商)
另一個(gè)影響 DNS 傳播持續(xù)時(shí)間的因素是使用的 Internet 服務(wù)提供商(ISP)。ISP 會(huì)將 DNS 數(shù)據(jù)緩存在本地,每次請(qǐng)求是在緩存檢索數(shù)據(jù)而非 DNS 服務(wù)器。這種做法的好處是響應(yīng)更快,同時(shí)也減少了數(shù)據(jù)流量的產(chǎn)生。但是,這可能會(huì)對(duì) DNS 傳播產(chǎn)生影響。此外,一些 ISP 會(huì)直接忽略 TTL 設(shè)置,并且固定每?jī)傻饺觳鸥乱淮尉彺嬗涗洝?/p>
服務(wù)器的位置
服務(wù)器的位置也會(huì)對(duì) DNS 傳播產(chǎn)生影響。記錄的更改短時(shí)間內(nèi)可以在就近的 DNS 服務(wù)器生效,但到世界另一端的服務(wù)器通常需要更久。因?yàn)椴煌姆?wù)器需要一個(gè)接一個(gè)地通知對(duì)方記錄有更改。而且就像第二條里提到的,由于一些服務(wù)器可能僅在特定的時(shí)間間隔內(nèi)更新,這就導(dǎo)致全部更新會(huì)需要很長(zhǎng)時(shí)間。
DNS 傳播的時(shí)間
那實(shí)際的 DNS 傳播需要多長(zhǎng)時(shí)間?本地服務(wù)器通常會(huì)在幾分鐘或幾小時(shí)內(nèi)更新。但是,要讓全球所有服務(wù)器都知曉這些更改,并使其生效可能需要相當(dāng)長(zhǎng)的時(shí)間,通常 1 至 2 天內(nèi)才生效都是可能的。而且根據(jù)服務(wù)提供商的設(shè)置,還可能出現(xiàn) 72 小時(shí)之后才全部更新的情況。因此,當(dāng)需要更改或切換記錄時(shí),提前安排 DNS 傳播非常重要。
在某些情況下,DNS 傳播會(huì)對(duì)網(wǎng)站的訪問(wèn)產(chǎn)生影響,這是沒辦法完全避免的,不過(guò)可以通過(guò)一些方法最小化持續(xù)時(shí)間。比如在更改 DNS 服務(wù)器之前,我們可以修改解析記錄中的 TTL 值,將其設(shè)置得小一點(diǎn)。等TTL值更新后,再修改 DNS 服務(wù)器。不過(guò)就算未傳播完,也不影響域名解析記錄的修改。即便 DNS 服務(wù)器仍然是舊的,但是解析記錄會(huì)實(shí)時(shí)更新,網(wǎng)站內(nèi)容也會(huì)是最新的。
當(dāng)然了,若解析記錄修改之后,過(guò)了 TTL 時(shí)間發(fā)現(xiàn)還是訪問(wèn)到舊的記錄,可以嘗試清除一下本地 DNS 緩存?;虮镜匦薷臑楣?DNS (114.114.114.114/8.8.8.8)后再試一下。
DNS 傳播檢查
如果沒有工具來(lái)確定網(wǎng)站的 DNS 傳播是否已完成??梢酝ㄟ^(guò)幾種對(duì)本地的 DNS 進(jìn)行 DNS 傳播檢查的方法來(lái)確認(rèn)。例如,Windows、macOS 和 Linux 默認(rèn)安裝了 nslookup,它可以顯示當(dāng)前 DNS 服務(wù)器的解析狀態(tài)。Dig 工具也是一個(gè)不錯(cuò)的選擇。

除了本地查詢,其他外部 DNS 檢查需要通過(guò)選擇隨機(jī)服務(wù)器并在那里查詢 DNS 信息來(lái)測(cè)試。由于服務(wù)器分布在世界各地,因此不能 100% 確定 DNS 傳播已在所有地方完成,但至少可以確認(rèn)大致的傳播情況。例如,使用 Myssl 的 DNS 檢測(cè)工具(https://myssl.com/dns_check.html#dns_check),可以快速查出不同地區(qū)不同網(wǎng)絡(luò)下域名解析的速度,及域名 DNS 信息。

讀到這里,大家是不是對(duì) DNS 修改后不生效的問(wèn)題有了答案呢?進(jìn)行 DNS 服務(wù)器或與域名系統(tǒng)相關(guān)的更改時(shí),還是要優(yōu)先考慮到 DNS 傳播。盡管可以通過(guò) TTL 縮短傳播時(shí)間,但由于一些不穩(wěn)定因素,仍然需要一些時(shí)間才能使全球的每臺(tái)服務(wù)器都更改為最新狀態(tài)。