我們在上網(wǎng)時(shí)如果想要訪問到另一臺機(jī)器上的內(nèi)容,通常只需要直接輸入一串地址眷篇,例如:www.upyun.com,就能夠準(zhǔn)確訪問到自己想要訪問的網(wǎng)站荔泳。但是實(shí)際上這只是方便我們記憶的字符形式網(wǎng)絡(luò)標(biāo)識蕉饼,真正讓我們的機(jī)器和另一臺機(jī)器進(jìn)行溝通的是 IP 地址。只不過 IP 地址無論是輸入還是記憶都非常麻煩玛歌,因此才誕生了域名系統(tǒng)昧港。那么域名是怎么連接到那個(gè)服務(wù)器的 IP 呢?這就和我們今天要說的域名系統(tǒng) DNS 有關(guān)了支子。
DNS 是什么创肥?
因?yàn)橛幸饬x的名字可以表示主機(jī)的賬號、工作性質(zhì)、所屬的地域和組織等瓤的,從而便于記憶和使用休弃。所以用戶會更傾向于用名字來標(biāo)識主機(jī),DNS 就是為這種需要而開發(fā)的圈膏。DNS 代表域名系統(tǒng)(Domain Name System)塔猾。該系統(tǒng)會將域名(example.com)翻譯成實(shí)際的 IP 地址。
DNS 的邏輯結(jié)構(gòu)是一個(gè)分層的域名樹稽坤,由 Internet 網(wǎng)絡(luò)信息中心(InterNIC)管理著域名樹的根丈甸,稱為“根域”,根域用句號“.”表示尿褪,不過這個(gè)通常是省略的睦擂。需要注意的是全世界一共只有 13 臺 IPv4 根域名服務(wù)器。
根域下面是頂級域(TLD)杖玲,分為國家頂級域(ccTLD)和通用頂級域(gTLD)顿仇。國家頂級域使用國家和地區(qū)縮寫代碼,例如“cn”代表中國摆马。通用頂級域就是我們常見的 com/net/org 等臼闻。
頂級域下面是二級域,這是正式注冊給組織和個(gè)人的唯一名稱囤采,例如 www.upyun.com 中的 upyun 就是又拍云注冊的域名述呐。在二級域之下,組織機(jī)構(gòu)還可以劃分子域蕉毯,用于各分支部門使用乓搬。但是標(biāo)準(zhǔn)規(guī)定,一個(gè)域名的長度通常不超過 63 個(gè)字符代虾,最多不能超過 255 個(gè)字符进肯。
當(dāng)然了,DNS 不僅僅能指向 IP 地址褐着,同時(shí)還支持其他形式的記錄坷澡。常見的 DNS 記錄形式有:
A 記錄:域的 IPv4 地址的記錄。
AAAA 記錄:域的 IPv6 地址的記錄含蓉。
CNAME 記錄:別名,將一個(gè)域或子域轉(zhuǎn)發(fā)到另一個(gè)域项郊,不提供 IP 地址馅扣。
MX 記錄:將郵件定向到電子郵件服務(wù)器。
TXT 記錄:可使管理員在記錄中存儲文本注釋着降。
NS 記錄:存儲 DNS 條目的名稱服務(wù)器差油。
一個(gè)有特色的域名,可以讓用戶將公司品牌“深深印在腦海里”。盡管域名可能是永恒不變的蓄喇,但記錄指向的地址及使用的 DNS 服務(wù)器卻會因?yàn)樾枨蠼?jīng)常變動发侵。有時(shí)我們也會遇到修改了 DNS 記錄后,實(shí)際訪問到的地址卻沒有更新的情況妆偏,這就涉及到了 DNS 傳播刃鳄。
什么是 DNS 傳播?
一般我們對網(wǎng)站的域名解析記錄或 DNS 服務(wù)提供商進(jìn)行更改后钱骂,全球所有的服務(wù)器都需要一段時(shí)間才能采用新的記錄值叔锐,這段時(shí)間可能是幾小時(shí),也可能是幾天见秽,這個(gè)過渡階段就是 DNS 傳播愉烙。
DNS 傳播因 DNS 服務(wù)器的負(fù)載情況而異。服務(wù)器越舊所需要更新時(shí)間就越長解取,因此在過渡期間步责,會出現(xiàn)其他提供商已經(jīng)使用了新的地址,但一些舊服務(wù)器的服務(wù)商可能還未更新的禀苦。這是因?yàn)槌掷m(xù)查詢新的地址會導(dǎo)致負(fù)載過高勺择,所以 DNS 服務(wù)器不會將更新信息臨時(shí)存儲在緩存中,只有當(dāng)所有服務(wù)器都更新了此緩存伦忠,才會在所有地方同步上新新地址省核。
除了服務(wù)器負(fù)載,還有一些因素也會影響 DNS 傳播昆码。
影響 DNS 傳播的因素
DNS 區(qū)域和 TTL 值
DNS 被分成許多不同的區(qū)域气忠,是 DNS 命名空間的一部分,由特定組織或管理員加以管理赋咽。區(qū)域文件是存儲在 DNS 服務(wù)器中的純文本文件旧噪,它包含區(qū)域的實(shí)際表示,和區(qū)域內(nèi)每個(gè)域的所有記錄脓匿。
我們可以為域名區(qū)域文件中的每個(gè) DNS 設(shè)置 TTL淘钟。TTL 代表“生存時(shí)間”,是服務(wù)器緩存 DNS 信息的時(shí)間段陪毡。它可以定義設(shè)置臨時(shí)緩存米母、存儲多久以及何時(shí)進(jìn)行更新。TTL 值對于 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定庵,它可能會導(dǎo)致 DNS 信息被忽略或拒絕。
如果使用云解析修改域名的解析記錄践美,最終生效時(shí)間取決于各地運(yùn)營商的 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”頂級域是 48 小時(shí)绎晃,“.cn”是 24 小時(shí)。因?yàn)椴煌敿売?DNS 服務(wù)器的 TTL 時(shí)間是不同的杂曲,所以理論上修改域名 DNS 服務(wù)器全球解析生效時(shí)間最長需要 48 小時(shí)庶艾。
ISP(Internet 服務(wù)提供商)
另一個(gè)影響 DNS 傳播持續(xù)時(shí)間的因素是使用的 Internet 服務(wù)提供商(ISP)。ISP 會將 DNS 數(shù)據(jù)緩存在本地擎勘,每次請求是在緩存檢索數(shù)據(jù)而非 DNS 服務(wù)器咱揍。這種做法的好處是響應(yīng)更快,同時(shí)也減少了數(shù)據(jù)流量的產(chǎn)生棚饵。但是煤裙,這可能會對 DNS 傳播產(chǎn)生影響。此外噪漾,一些 ISP 會直接忽略 TTL 設(shè)置硼砰,并且固定每兩到三天才更新一次緩存記錄。
服務(wù)器的位置
服務(wù)器的位置也會對 DNS 傳播產(chǎn)生影響欣硼。記錄的更改短時(shí)間內(nèi)可以在就近的 DNS 服務(wù)器生效题翰,但到世界另一端的服務(wù)器通常需要更久。因?yàn)椴煌姆?wù)器需要一個(gè)接一個(gè)地通知對方記錄有更改诈胜。而且就像第二條里提到的豹障,由于一些服務(wù)器可能僅在特定的時(shí)間間隔內(nèi)更新,這就導(dǎo)致全部更新會需要很長時(shí)間耘斩。
DNS 傳播的時(shí)間
那實(shí)際的 DNS 傳播需要多長時(shí)間沼填?本地服務(wù)器通常會在幾分鐘或幾小時(shí)內(nèi)更新。但是括授,要讓全球所有服務(wù)器都知曉這些更改,并使其生效可能需要相當(dāng)長的時(shí)間,通常 1 至 2 天內(nèi)才生效都是可能的荚虚。而且根據(jù)服務(wù)提供商的設(shè)置薛夜,還可能出現(xiàn) 72 小時(shí)之后才全部更新的情況。因此版述,當(dāng)需要更改或切換記錄時(shí)梯澜,提前安排 DNS 傳播非常重要。
在某些情況下渴析,DNS 傳播會對網(wǎng)站的訪問產(chǎn)生影響晚伙,這是沒辦法完全避免的,不過可以通過一些方法最小化持續(xù)時(shí)間俭茧。比如在更改 DNS 服務(wù)器之前咆疗,我們可以修改解析記錄中的 TTL 值,將其設(shè)置得小一點(diǎn)母债。等TTL值更新后午磁,再修改 DNS 服務(wù)器。不過就算未傳播完毡们,也不影響域名解析記錄的修改迅皇。即便 DNS 服務(wù)器仍然是舊的,但是解析記錄會實(shí)時(shí)更新衙熔,網(wǎng)站內(nèi)容也會是最新的登颓。
當(dāng)然了,若解析記錄修改之后红氯,過了 TTL 時(shí)間發(fā)現(xiàn)還是訪問到舊的記錄框咙,可以嘗試清除一下本地 DNS 緩存〔绷ィ或本地修改為公共 DNS (114.114.114.114/8.8.8.8)后再試一下扁耐。
DNS 傳播檢查
如果沒有工具來確定網(wǎng)站的 DNS 傳播是否已完成〔澹可以通過幾種對本地的 DNS 進(jìn)行 DNS 傳播檢查的方法來確認(rèn)婉称。例如,Windows构蹬、macOS 和 Linux 默認(rèn)安裝了 nslookup王暗,它可以顯示當(dāng)前 DNS 服務(wù)器的解析狀態(tài)。Dig 工具也是一個(gè)不錯的選擇庄敛。
除了本地查詢俗壹,其他外部 DNS 檢查需要通過選擇隨機(jī)服務(wù)器并在那里查詢 DNS 信息來測試。由于服務(wù)器分布在世界各地藻烤,因此不能 100% 確定 DNS 傳播已在所有地方完成绷雏,但至少可以確認(rèn)大致的傳播情況头滔。例如,使用 Myssl 的 DNS 檢測工具(https://myssl.com/dns_check.html#dns_check)涎显,可以快速查出不同地區(qū)不同網(wǎng)絡(luò)下域名解析的速度坤检,及域名 DNS 信息。
讀到這里期吓,大家是不是對 DNS 修改后不生效的問題有了答案呢早歇?進(jìn)行 DNS 服務(wù)器或與域名系統(tǒng)相關(guān)的更改時(shí),還是要優(yōu)先考慮到 DNS 傳播讨勤。盡管可以通過 TTL 縮短傳播時(shí)間箭跳,但由于一些不穩(wěn)定因素,仍然需要一些時(shí)間才能使全球的每臺服務(wù)器都更改為最新狀態(tài)潭千。