1. 程式人生 > 實用技巧 >DNS篇(詳解DNS)

DNS篇(詳解DNS)

*文章來源:https://blog.egsec.cn/archives/601

*本文將主要說明:本文主要敘述什麼是DNS、域名的層級、DNS 解析過程、DNS的快取時間、DNS 的記錄型別、DNS 報文結構、DNS劫持與HTTP劫持以及手動清理本地快取的方法。

DNS屬於應用層。DNS即域名系統,其作用是將字串域名解析成相對於的伺服器IP地址,免除人們記憶IP地址的單調和苦惱,屬於為使用者排憂解難之舉,因此劃歸為應用層。DNS不屬於協議,它是域名解析。

什麼是DNS

DNS是 Domain Name System 的縮寫,也就是 域名解析系統,它的作用非常簡單,就是根據域名查出對應的 IP地址。

你可以把它想象成一本巨大的電話本,比如當你要訪問域名www.egsec.cn,首先要通過DNS查出它的IP地址是118.31.61.137。

域名層級

DNS 的解析過程中,需要對域名的層級有了解:

  • 根域名 :.root或者.,通常是省略的
  • 頂級域名,如.com,.cn等
  • 次級域名,如baidu.com裡的baidu,這個是使用者可以進行註冊購買的
  • 主機域名,比如baike.baidu.com裡的baike,這個是使用者可分配的
主機名.次級域名.頂級域名.根域名
baike.baidu.com.root

DNS 解析過程

咱們以訪問www.egsec.cn這個域名為例,來看一看當你訪問 www.egsec.cn 時,會發生哪些事:

  1. 先查詢本地 DNS 快取(自己的電腦上),有則返回,沒有則進入下一步
  2. 檢視本地 hosts 檔案有沒有相應的對映記錄,有則返回,沒有則進入下一步
  3. 向本地 DNS 伺服器(一般都是你的網路接入伺服器商提供,比如中國電信,中國移動)傳送請求進行查詢,本地DNS伺服器收到請求後,會先查下自己的快取記錄,如果查到了直接返回就結束了,如果沒有查到,本地DNS伺服器就會向DNS的根域名伺服器發起查詢請求:請問老大,www.egsec.cn的ip是啥?
  4. 根域名伺服器收到請求後,看到這是個.cn的域名,就回信說:這個域名是由.cn老弟管理的,你去問他好了,這是.cn老弟的聯絡方式(ip1)。
  5. 本地 DNS 伺服器接收到回信後,照著老大哥給的聯絡方式(ip1),馬上給.cn這個頂級域名伺服器發起請求:請問.cn大大,www.egsec.cn的ip 是啥?
  6. .cn頂級域名伺服器接收到請求後,看到這是egsec.cn的域名,就回信說:這個域名是.egsec.cn老弟管理的,你就去問他就行了,這是他的聯絡方式(ip2)
  7. 本地 DNS 伺服器接收到回信後,按照前輩的指引(ip2),又向.egsec.cn這個權威域名伺服器發起請求:請問egsec.cn大大,請問www.egsec.cn的ip是啥?
  8. egsec.cn權威域名伺服器接收到請求後,確認了是自己管理的域名,馬上查了下自己的小本本,把www.egsec.cn的ip告訴了 本地DNS伺服器。
  9. 本地DNS伺服器接收到回信後,非常地開心,這下總算拿到了www.egsec.cn的ip了,馬上把這個訊息告訴了要求查詢的客戶(就是你的電腦)。由於這個過程比較漫長,本地DNS伺服器為了節省時間,也為了儘量不去打擾各位老大哥,就把這個查詢結果偷偷地記在了自己的小本本上,方便下次有人來查詢時,可以快速回應。

總結起來就是三句話:

  • 從"根域名伺服器"查到"頂級域名伺服器"的NS記錄和A記錄(IP地址)
  • 從"頂級域名伺服器"查到"次級域名伺服器"的NS記錄和A記錄(IP地址)
  • 從"次級域名伺服器"查出"主機名"的IP地址

DNS的快取時間

上面的幾個步驟裡,可以看到有兩個地方會快取 DNS 的查詢記錄,有了快取,在一定程度上會提高查詢效率,但同時在準確率上會有所損失。

因此我們在配置 DNS 解析的時候,會有一個 TTL 引數(Time To Live),意思就是這個快取可以存活多長時間,過了這個時間,本地 DNS 就會刪除這條記錄,刪除了快取後,你再訪問,就要重新走一遍上面的流程,獲取最新的地址。

DNS 的記錄型別

當我們在阿里雲買了一個域名後,可以配置我們主機域名解析規則,也就是記錄。

阿里雲域名雲解析(不管是哪個服務商都一樣):

常見的 DNS 記錄型別如下

  • A:地址記錄(Address),返回域名指向的IP地址。
  • NS:域名伺服器記錄(Name Server),返回儲存下一級域名資訊的伺服器地址。該記錄只能設定為域名,不能設定為IP地址。
  • MX:郵件記錄(Mail eXchange),返回接收電子郵件的伺服器地址。
  • CNAME:規範名稱記錄(Canonical Name),返回另一個域名,即當前查詢的域名是另一個域名的跳轉,詳見下文。
  • PTR:逆向查詢記錄(Pointer Record),只用於從IP地址查詢域名,詳見下文。

DNS報文結構

  1. 事務 ID:DNS 報文的 ID 標識。對於請求報文和其對應的應答報文,該欄位的值是相同的。通過它可以區分 DNS 應答報文是對哪個請求進行響應的。
  2. 標誌:DNS 報文中的標誌欄位。
  3. 問題計數:DNS 查詢請求的數目。
  4. 回答資源記錄數:DNS 響應的數目。
  5. 權威名稱伺服器計數:權威名稱伺服器的數目。
  6. 附加資源記錄數:額外的記錄數目(權威名稱伺服器對應 IP 地址的數目)

DNS劫持與HTTP劫持

通過上面的講解,我們都知道了,DNS 完成了一次域名到 IP 的對映查詢,當你在訪問 www.egsec.cn 時,能正確返回給你 我網站首頁的 ip。

但如果此時 DNS 解析出現了一些問題,當你想要訪問 www.egsec.cn 時,卻返回給你 www.baidu.com 的ip,這就是我們常說的 DNS 劫持。

與之容易混淆的有 HTTP 劫持。

什麼是 HTTP 劫持?

你一定見過當你在訪問 某個網站時,右下角也突然彈出了一個扎眼的廣告彈窗。這就是 HTTP 劫持。

藉助別人文章裡的例子,它們倆的區別就好比是

  • DNS劫持是你想去機場的時候,把你給丟到火車站。
  • HTTP劫持是你去機場途中,有人給你塞小廣告。

DNS劫持 是如何產生的?

下面大概說幾種DNS劫持方法:

1.本機DNS劫持

攻擊者通過某些手段使使用者的計算機感染上木馬病毒,或者惡意軟體之後,惡意修改本地DNS配置,比如修改本地hosts檔案,快取等

2. 路由DNS劫持

很多使用者預設路由器的預設密碼,攻擊者可以侵入到路由管理員賬號中,修改路由器的預設配置

3.攻擊DNS伺服器

直接攻擊DNS伺服器,例如對DNS伺服器進行DDOS攻擊,可以是DNS伺服器宕機,出現異常請求,還可以利用某些手段感染dns伺服器的快取,使給使用者返回來的是惡意的ip地址

如何在本地查詢 DNS 解析結果?

nslookup命令:

命令格式:nslookup[查詢的域名][指定DNS伺服器]

你也可以指定公網的域名伺服器進行查詢,比如常見的 114.114.114.114

手動清理DNS快取

MacOS:

sudo dscacheutil -flushcache
$ sudo killall -HUP mDNSResponder

Windows:

$ ipconfig /flushdns

Linux:

使用NSCD的DNS快取
$ sudo /etc/init.d/nscd restart # 伺服器或者路由器使用DNSMASQ
$ sudo dnsmasq restart

  


DNS詳解篇完

轉發請註明出處(EG Blog:blog.egsec.cn),謝謝!