一、DNS 是啥?
DNS 是洋文“Domain Name System”的縮寫,直譯過來就是“域名系統”。
二、DNS 有啥用?
咱們每天打交道的這個互聯網,其底層的基石是“IP”。IP 是“Internet Protocol”的縮寫,中文就“互聯網協議”(光看名字就知道這玩意兒很重要)。咱們日常用的那些互聯網軟件(瀏覽器、聊天工具、下載工具、等等)在工作時,必須依靠【IP地址】才能進行網絡數據傳輸。
“IP地址”是設計給軟件用滴——雖然軟件很容易處理,但對于人類而言,卻很難記憶。于是,后來又發明了 DNS。有了 DNS,人類就不需要記住長長的一串 IP地址,而只需記住“域名”(域名通常更短,也更具有可讀性,例如www.g.cn)。
比如你上網的時候,只需在地址欄輸入網站的“域名”,而不用輸入網站的“IP地址”。然后電腦系統會利用 DNS 來把“域名”翻譯成“IP地址”。這個翻譯的過程術語叫“域名解析/DNS解析”。
三、域名的結構是咋樣?
域名是按照“樹形結構”組織的。不懂得啥是“樹形結構”的同學,可以對照一下電腦硬盤上的目錄結構。域名的結構和目錄結構很類似,目錄結構是用“斜杠”作分隔符,而域名是用小數點作分隔符。兩者的主要區別在于:目錄結構名稱的形式是從左到右(上級在左,下級在右),而域名是從右到左(上級在右,下級在左)。
以網易的域名為例:
3g.163.com 的上級域名是 .163.com
163.com 的上級域名是 .com
這里的 .com 就被稱為頂級域名(Top-Level Domain,簡稱 TLD),跟 .com 類似的那些 .net .org .gov 也是頂級域名。還有那些以國家/地區的代碼命名的(比如 .cn .tw .hk .jp 等等)也是頂級域名。
四、“域名解析”是咋實現?
如果你曾經配置過電腦的網卡,應該記得上面除了有IP地址、掩碼等設置,還有一項設置是“DNS服務器/域名服務器”。這項設置就是用來幫助你的電腦進行域名解析的。你可以把這個“DNS服務器”想象成114查號臺。每當電腦需要翻譯某個域名,就找這個域名服務器查詢,然后域名服務器會告訴你的電腦,要查詢的域名對應的IP地址是啥。
下面簡單說一下,你的電腦進行域名解析的過程。
為了敘述方便,以網易為例。當你在瀏覽器的地址欄中輸入 www.163.com,然后敲回車,這時候電腦軟件會進行如下一系列事情。
1. 首先根據輸入的網址,提取出域名(
2. 如果你在系統中配置了 Hosts 文件,那么電腦會先查詢 Hosts 文件,看這個www.163.com 否已經在 Hosts 里面有了對應的記錄。如果有,直接就可以拿到該記錄中的 IP地址,過程就結束了。
3. 如果 Hosts 里面沒有這個別名,那么電腦會看你有沒有設置域名服務器(DNS 服務器)。如果你的系統沒有設置域名服務器,那電腦就沒轍了,瀏覽器直接會報錯,說網站的域名無法解析。過程就結束了。
4. 如果你設置過“域名服務器”,那么電腦會向這個域名服務器發送一個域名查詢(DNS query)的請求,然后等候域名服務器的回應。
5. 如果域名服務器始終沒有回應(比如域名服務器掛了,或域名服務器的IP填錯了,或請求被 攔截了),那么電腦還是沒轍(瀏覽器會報錯)。
6. 如果域名服務器回應了,那么你的電腦就可以根據域名服務器的應答信息,得到該域名的 IP地址。之后瀏覽器就會向這個 IP地址 對應的 Web 端口發送 HTTP 請求。
通常情況下,電腦拿到的(DNS服務器)應答信息是正確的——也就是說,應答中的 IP地址 確實對應那個域名——這種情況下,你的網絡軟件就可以正常工作了。
但是在某些國家,例如CHAOXIAN,電腦拿到的 DNS 應答有可能是【錯的】。為啥會這樣捏,本文的后半部,俺會介紹一下“域名劫持”和“域名污染”。
五、域名服務器如何知道這些信息?
(一)域名的緩存
大伙兒平時使用的域名服務器,技術術語叫“遞歸域名服務器”。“遞歸服務器”是面向普通網友的。剛才介紹“域名解析”的時候提到的服務器就是“遞歸服務器”。
“遞歸服務器”的內部通常會有一個 DNS記錄 的緩存——這個緩存是為了提高查詢效率的。當某臺電腦向遞歸服務器發起域名查詢時,遞歸服務器首先看自己的緩存中有沒有該域名的記錄,如果有,直接就回復該記錄給查詢的電腦。
萬一對方想要查詢的域名沒找到,咋辦捏?這時候就要進行緩存的同步。
(二)緩存的同步
下面就拿網易的域名為例,說說這種情況的處理流程。
1. 對方查詢3g.163.com 這個域名,“遞歸服務器”發現自己的緩存中沒有
2. “遞歸服務器”會先去找“根域名服務器”幫忙,“根服務器”會告訴“遞歸服務器”說:這個域名屬于 com 這個分支之下,你去找 com 這個域名的“權威服務器”,這個權威服務器的 IP地址 是 xxx。
3. 然后“遞歸服務器”根據拿到的這個 xxx地址,又去找“com 域名的權威服務器”。“com 域名的權威服務器”告訴它:你應該去找“163.com 域名的權威服務器”,這個權威服務器的 IP地址 是 yyy
4. 然后“遞歸服務器”又屁顛屁顛地去找“163.com 域名的權威服務器”。這時候“163.com 域名的權威服務器”才會告訴它,3g.163.com 這個域名的 IP地址 到底是多少。
大伙兒看到沒有?整個過程如同“踢皮球”,效率是很低的。所以俺前面提到,“遞歸域名服務器”必須得有一個緩存,以此來優化效率(不用每次查詢都來一次“踢皮球”)。
(三)同步的周期
說完了“域名的同步”,順便提一下“同步的周期”。
因為互聯網上的域名信息是有可能發生變化的。比如增加了某個新域名,注銷了某個舊域名,或者某個域名對應的 IP地址 變了。所以,“遞歸服務器”上保留的緩存中,每一條域名記錄都有一個生命周期(可能是幾分鐘,也可能是幾小時)。如果某條記錄的生命周期過了,就會被刪除,然后重新同步。
六、啥是“域名劫持”?
剛才說了,域名服務器上都會保存一大堆的域名記錄(每條記錄包含“域名”和“IP地址”)。當收到域名查詢的時候,域名服務器會從這堆記錄中找到對方想要的,然后回應給對方。
如果域名服務器上的某條記錄被【人為修改】了(改成錯的),那么一旦要查詢這條記錄,得到的就是錯誤的結果。這種情況稱之為“域名劫持”。
★誰有“域名劫持”的企圖?
“域名劫持”通常是電信運營商(ISP)干的好事兒。很多寬帶用戶用的域名服務器就是 ISP 提供給你的。
舉例:
前幾年曾經出現過:某個 ISP 跟某網站勾結,把維基百科的流量重定向到XX。具體搞法是:該 ISP 篡改自己的域名服務器的記錄,把里面跟維基百科 相關的域名記錄的 IP地址 修改為XX的 IP地址。如此一來,假設你用的是這個 ISP 的域名服務器,當你在瀏覽器輸入 http://zh.wikipedia.org/的時候,你的電腦查詢到的 IP地址 其實是XX的 IP地址,所以瀏覽器打開的是“XX”的主頁。
★如何對付“域名劫持”?
剛才說了,“域名劫持”的根源在于:域名服務器上的記錄被人給改了。要對付這種耍流氓,最直接的辦法就是不要使用這種流氓 ISP 提供的域名服務器,改用國外那些比較靠譜的。目前口碑最好的,大概是 Google 提供的兩個域名服務器,IP地址 分別是 8.8.8.8 和 8.8.4.4 ——這倆不光是地址好記,更重要的是,不會耍流氓。
七、啥是“域名污染”?
先提醒一下:“域名污染”這個詞還有其它幾個別名,分別是“域名欺騙”、“域名緩存投毒”(洋文叫:DNS cache poisoning)。今后看到這幾個別名,要曉得是同一個意思。
“域名污染”的原理,簡單說來是這樣滴:當你的電腦向域名服務器發送了“域名查詢”的請求,然后域名服務器把回應發送給你的電腦,這之間是有一個時間差的。如果某個攻擊者能夠在域名服務器的“DNS應答”還沒有到達你的電腦之前,先偽造一個錯誤的“DNS應答”發給你電腦。那么你的電腦收到的就是錯誤的信息,并得到一個錯誤的 IP地址。
★誰有“域名污染”的企圖?
從技術上講,只要攻擊者能夠位于“你”和“域名服務器”的傳輸線路中間,那么攻擊者就有機會搞“域名污染”。能夠做到這點的,可能是一個黑客/駭客,也可能是 ISP。
★某國家防火墻的兩種“域名污染”
剛才俺解釋了“域名污染”的原理,那種形式不妨稱為“直接污染”。由于某國家防火墻的特殊性,它不但可以做到“直接污染”,還可以做到“間接污染”。而普通的駭客頂多只能做到“直接污染”,難以做到“大范圍的間接污染”。
那么這兩種污染有啥區別捏?且聽俺細細道來。
◇某國家防火墻部署在哪?
首先有必要先掃盲一下“某國家防火墻(其實是一種IDS,也就是入侵檢測系統)的部署位置”。X國互聯網只有少數幾個國際出口(名氣較大的是:A出口、B出口、C出口)。如果你要訪問國外網站,你的網絡數據流就必定會經過其中的某個“國際出口”。
◇某國家防火墻的直接污染
因為某國家防火墻部署在國際出口。如果你用的是【國外的】域名服務器,你的“DNS請求”必定會經過國際出口;同樣,域名服務器的“DNS應答”必定也會經過國際出口才能到你的電腦。這一來一回就給某國家防火墻 提供了機會。
這種污染就是俺所說的“直接污染”。
◇某國家防火墻 的間接污染
剛才介紹了“使用國外域名服務器會被直接污染”。那如果你用的是【國內的】域名服務器捏?就會被“間接污染”。過程如下:
1. 比方說你用的是電信的 DNS服務器,然后你想要訪問某個被不受歡迎的網站。
2. 對于不受歡迎的網站,其網站服務器必定在國外,而且網站的域名肯定也不會使用 CN 之下的域名。所以,被封鎖的網站,其上級域名的“權威域名服務器”肯定也是在國外。
3. 當你向“電信的DNS服務器”查詢反共網站的域名,這臺“電信的DNS服務器”就會去找這個不受歡迎的網站的上一級域名對應的“權威域名服務器”去進行“域名查詢”。
4. 因為是從國外進行域名查詢,相關的數據流必定要經過國際出口。一旦經過國際出口,就會被 某國家防火墻 污染。
5. 如此一來,“電信的域名服務器”拿到的是已經被污染的域名記錄(里面的IP是錯的)。而且“電信的域名服務器”會把這條錯誤的記錄保存在自己的域名緩存中。
6. 下次如果有另一個網友也找這臺“電信的域名服務”查詢這個不受歡迎的網站,也會查到錯誤的結果。
上述過程不斷重復,最終會導致:全國所有的域名服務器,它們的緩存中只要是包含了不受歡迎的網站的記錄,記錄中的 IP地址 必定是錯的(這個錯誤的 IP地址 也就是 某國家防火墻 偽造的那個)。所以說“間接污染”是很牛逼的,可以把錯誤的域名記錄擴散到全國。
剛才俺說了,“域名污染”也叫“域名緩存投毒”。“投毒”一詞真的非常形象——就好象在某條河流的源頭下毒,從而把整條河流的水都污染。“域名污染”直接破壞了互聯網的基礎設施。
新聞熱點
疑難解答