深刻理解 DNS

深刻理解 DNS

簡介

DNS(Domain Name System)域名系統,它是一個將域名和 IP 地址相互映射的一個分佈式數據庫,把容易記憶的主機名轉換成主機 IP 地址。html

DNS使用 TCP 和 UDP 端口 53。當前,對於每一級域名長度的限制是 63 個字符,域名總長度則不能超過 253 個字符。git

DNS備份

爲防止服務中斷和網絡攻擊,全球共有13臺根DNS服務器,嚴格意義上來講不是13臺,而是13個服務集羣,爲何是13?github

專有名詞

  • FQDN:完整合法域名,也就是根域(絕對域名)
  • NS:權威域名服務器
  • 頂級域:用來指示某個國家 / 地區或組織使用的名稱的類型名稱,例如 .com
  • 二級域:我的或組織在因特網上使用的註冊名稱,例如 google.com
  • 子域:已註冊的二級域名派生的域名,通常就是網站名,例如 www.google.com
  • 主機名:標識網絡上的特定計算機,例如 h1.www.google.com

DNS的基本解析流程

  1. 以客戶端瀏覽器訪問 www.lbinin.com 域名爲例,首先,它會去檢查當前瀏覽器緩存,若是有,就直接響應,若是沒有,就繼續往下找
  2. 接着,操做系統會去檢查本身的 host 文件,若是從中沒找到對應關係,會再到系統 DNS 緩存中查,若是緩存中有,就直接返回該域名所對應的 IP
  3. 若是緩存中沒有,則會向咱們事先設置好的 DNS 服務器 [ 通常有兩個, 主 & 備 ] 去請求,即所謂的遞歸查詢,DNS 服務器首先會到自身解析數據庫中去查
  4. 若是 DNS 服務器在本身的解析庫中也沒找到,它就會自動幫咱們向根發送詢問請求
  5. 此時,根看到要請求的是 com 的後綴,就會把 com 所在的 ns 服務器告訴咱們的 DNS
  6. 而後,咱們的 DNS 服務器就會去請求 com 所在的 ns 服務器(權威域名服務器)
  7. 當請求到達 com ns 服務器時,com 一看域名是在 lbinin 這個域下的,就會把 lbinin 所在的 ns 服務器再告訴咱們的 DNS 服務器
  8. 再而後,咱們的 DNS 服務器就會去請求 lbinin 這個域的 ns 服務器
  9. lbinin 這個域的 ns 服務器一看是要訪問 www 就直接找到了 www 對應的「A記錄」的 IP,並把它丟給咱們的 DNS,上面逐個詢問的過程,即 迭代查詢
  10. 最後,咱們的 DNS 再把最終解析到的這個 IP 丟給咱們的客戶端,而後客戶端就直接拿着去訪問了。

流程總結

瀏覽器緩存 👉🏻 host 文件 👉🏻 系統 DNS 緩存 👉🏻 DNS 服務器進行「迭代查詢」web

其中上面 1-3 爲遞歸查詢。4-10 爲迭代查詢。數據庫

遞歸查詢和迭代查詢的區別

遞歸查詢

客戶端收到的是最終的查詢結果瀏覽器

遞歸查詢是一種 DNS 服務器的查詢模式,在該模式下 DNS 服務器接收到客戶機請求,必須使用一個準確的查詢結果回覆客戶機。若是 DNS 服務器本地沒有存儲查詢DNS 信息,那麼該服務器會詢問其餘服務器,並將返回的查詢結果提交給客戶機。緩存

迭代查詢

客戶端中途會收到下一臺服務器地址服務器

DNS 服務器另一種查詢方式爲迭代查詢,DNS 服務器會向客戶機提供其餘可以解析查詢請求的 DNS 服務器地址,當客戶機發送查詢請求時,DNS 服務器並不直接回複查詢結果,而是告訴客戶機另外一臺 DNS 服務器地址,客戶機再向這臺 DNS 服務器提交請求,依次循環直到返回查詢的結果爲止。微信

資源記錄類型

  • A 記錄 (Address Record)** **:FQDN -> ipv4
  • AAAA 記錄:FQDN -> ipv6
  • NS (Name Servers)** 記錄**:名稱服務器;標明當前區域的 NS 服務器是誰
  • MX (Mail Exchanger)** 記錄**:郵件服務器;標明當前域內誰是郵件服務器
  • PTR (Pointer Record)** 記錄**:IP -> FQDN,反向區域解析
  • SOA (State Of Authority Record)** 記錄**:起始受權機構;一個解析庫有且只有一個 SOA 記錄,且必須爲解析庫的第一條記錄
  • CNAME 記錄:別名,如:web.admin.org. IN CNAME www.admin.org. 表示當訪問 web.admin.org. 時就直接解析到 www.admin.org.

TTL

Time to Live 即生存時間,就是一條域名解析記錄在 DNS 服務器中的存留時間。網絡

當各地的 DNS 服務器接受到解析請求時,就會向域名指定的 NS 服務器(權威域名服務器)發出解析請求從而得到解析記錄;

在得到這個記錄以後,記錄會在 DNS 服務器(各地的緩存服務器,也叫遞歸域名服務器)中保存一段時間,這段時間內若是再接到這個域名的解析請求,DNS 服務器將再也不向 NS 服務器發出請求,而是直接返回剛纔得到的記錄;到期則重複請求過程。

DNS 劫持

DNS 劫持又稱「域名劫持」,是指在劫持的網絡範圍內攔截域名解析的請求,分析請求的域名,把審查範圍之外的請求放行,不然返回假的 IP 地址或者什麼都不作使請求失去響應,其效果就是對特定的網絡不能訪問或訪問的是假網址。其實本質就是對 DNS 解析服務器作手腳,或者是使用僞造的 DNS 解析服務器能夠經過下圖來展現。

解決辦法

不使用運營商的 NDS 解析,使用本身的或者著名的 DNS,如:114.114.114.1148.8.8.8

內容劫持

其實內容劫持一開始的出發點是好的,是運營商爲了加快用戶的訪問速度同時減小本身的流量損耗而作的一個緩存機制。

用戶在像服務器請求數據的時候運營商會把用戶的請求轉移到這個緩存池中,若是緩存中有就直接返回,沒有的話再去向服務器請求。而後運營商攔截並緩存服務端給用戶的回調數據,這樣一來能夠極大的下降運營商像服務器請求的次數,也能加快用戶的訪問,因此出發點是好的。

可是一些非法的商家對緩存池內部作一些處理就是直接對返回的內容進行修改,這樣一來咱們就會接受到錯誤的數據。

經常使用命令

  • nslookup 域名

參考資料

理解DNS - Code.CC - 博客園

DNS 深度理解 一 - klion’s blog 歡迎轉載,轉載請註明出處! 獨立域名博客:flywill.com 歡迎關注公衆微信號:Java小鎮V 分享本身的學習 & 學習資料 & 生活 想要交流的朋友也能夠加微信號備註入羣:EscUpDn

相關文章
相關標籤/搜索