DNS協議詳解

DNS協議詳解

簡介

DNS(Domain Name System)域名系統,主要實現的功能是將域名轉換成ip地址的一個服務。它是由一個分層DNS服務器實現的分佈式數據庫,同時。他也是一個使得主機可以查詢分佈式數據庫的應用層協議。DNS服務器一般是一個運行BIND(Berkeley Internet Name Domain)軟件的UNIX機器。DNS協議運行在UDP之上,使用53號端口。 DNS是一個應用層協議,其緣由在於:算法

  • 使用客戶端-服務器模式運行在通訊的端系統之間。
  • 在通訊的端系統之間經過下面的端到端運輸協議來傳送DNS報文。

DNS的分層

Host文件

在講DNS的分層以前,先說一下host文件,以window系統爲例,在目錄C:\Windows\System32\drivers\etc下有一個host文件,這個文件中記錄了一個ip和域名的字典,當在瀏覽器中訪問域名時,系統會默認先訪問host文件查看是否存在訪問域名的映射關係,若是不存在時,纔將請求的域名發送給DNS系統進行解析獲取對應的ip地址。數據庫

DNS分層

DNS的分層結構以下所示:數組

graph TB A[根DNS服務器]-->B[com DNS服務器] A-->C[org DNS服務器] A-->D[edu DNS服務器] B-->E[yahoo.com DNS服務器] B-->F[amazon.com DNS服務器] A-->J[...] A-->K[...] C-->G[pbs.org DNS服務器] D-->H[poly.edu DNS服務器] D-->I[umass.edu DNS服務器] E-->L[...] E-->M[...]

爲了支持擴展性,DNS使用了大量的DNS服務器分佈部署在各地,在各級DNS服務器子級又能夠繼續擴展出本地DNS服務器。這些DNS服務器大體能夠分爲三類:瀏覽器

  • 根DNS服務器
  • 頂級域(Top-lecel Domain,TLD)DNS服務器
  • 權威DNS服務器

DNS緩存

DNS的緩存是爲了改善DNS解析的延遲性問題,同時減小因特網上的DNS報文數量。有了緩存以後,DNS服務器能夠記住經過本身所解析的域名地址,並將他們緩存起來(緩存不是永久有效的,緩存時會有一個緩存時間設置TTL),同時,本地服務器也能夠緩存TLD服務器的ip地址,從而在查詢解析時繞過根DNS服務器,直接訪問TLD服務器。緩存

DNS記錄和報文

資源記錄

共同實現DNS分佈式數據庫的全部DNS服務器存儲了資源記錄(Resource Record, RR),RR提供了主機名到IP地址的映射。每一個DNS的響應報文都會包含一條或多條RR.資源記錄是一個包含了下列字段的4元數組:
(Name,Value.Type,TTL)
其詳細含義爲:服務器

  • TTL記錄了生存時間,即緩存中資源記錄的過時時間。
  • Type=A:此時Name是主機名,Value是主機名對應的Ip地址。
  • Type=NS:Name是個域(此處是相似foo.com的域不是域名),Value是一個DNS服務器的主機名,這個DNS服務器能夠獲取到(直接或者間接)Name域中主機IP地址。
  • Type=CNAME:Value是別名爲Name的主機對應的規範主機名。即Name爲主機別名和Value主機實際名稱的映射
  • Type=MX:Value是別名爲Name的郵件服務器的規範主機名

範例
假如一臺edu TLD服務器不是主機gaia.cs.umass.edu的權威DNS服務器,則該服務器將包含一條包括主機cs.umass.edu的域記錄。如(umass.edu,dns.umass.edu,NS);該edu TLD服務器還將包含一條類型A的記錄,如(dns.umass.edu,128.119.40.111,A),該記錄將名字dns.umass.edu映射爲一個IP地址。網絡

DNS報文

報文格式以下所示分佈式

標識符 標誌
問題數 回答RR數
權威RR數 附加RR數
問題(問題的變量數)
回答(資源記錄的變量數)
權威(資源記錄的變量數)
附加信息(資源記錄的變量數)

詳細解釋:url

  • 前三行共12個字節是首部區域
    • 第一個字段(標識符)是一個16比特的數,用於標識該查詢,這個標識符會被複制到對查詢的回答報文中,做爲請求報文的惟一標識,16個比特中有1比特是標識是查詢報文(0)仍是回答報文(1)
  • 問題區域包含着正在進行的查詢信息。該區域包括:
    • 名字字段,表示正在被查詢的主機名字。
    • 類型字段,表示有關更名字的正被詢問的問題類型,例如類型A:主機地址是與一個名字相關聯;類型MX表示主機地址域郵箱服務器相關聯。
  • 回答區域包含了對最初請求的名字的資源記錄。回答報文的回答區域中能夠包含多條RR,所以一個主機名可以有多個IP地址。
  • 權威區域包含了其餘權威服務器的記錄
  • 附加區域包含了其餘有幫助的記錄。

DNS數據庫中插入記錄

DNS數據庫中插入記錄,須要向專門的註冊登記機構,註冊域名,由註冊登記機構驗證域名的惟一性。想註冊登記機構提供域名是還須要向該機構提供你的基本和輔助權威DNS服務器的名字和IP地址。而後註冊登記機構會將如下兩條資源記錄插入該DNS系統中(以註冊networkutopia.com爲例)spa

  • (networkutopoa.com,dns1.networkutopia.com,NS)
  • (dns1.netwworkutopia.com,212.212.212.1,A)
    以後其餘用戶就能夠訪問networkupopia.com這個域名,DNS請求會到達dns1這個DNS服務器解析ip地址。

DNS通訊流程

假設本地機器訪問域名networkutopoa.com其詳細的協議通信過程以下:

  1. 瀏覽器地址欄中輸入networkutopoa.com
  2. 瀏覽器從url地址中獲取域名networkutopoa.com,而後將域名傳遞給本機的DNS應用的客戶端。
  3. DNS客戶端向本地DNS服務器發送一個包含域名networkutopoa.com)的請求。
  4. 本地DNS服務器先查看本地緩存有沒有要查詢的域名,若是沒有在查看本地緩存中的TLD服務器有沒有與域名匹配的服務器地址,若是有直接向TLD服務器發送請求。若是沒有則向根服務器請求TLD服務器地址。
  5. TLD服務器直接向本地DNS服務器發送回答。回答中包含了域名對應的ip地址。
  6. 瀏覽器收到ip地址以後,將請求發送到對應的ip地址上。

遞歸查找,迭代查找

DNS解析域名時主要有兩種查詢方式:

  • 遞歸查詢
  • 迭代查詢

迭代查詢算法

迭代查詢的核心時全部的請求都是直接返回給本地的DNS服務器,而後本地DNS服務器去對應的權威服務器等請求解析地址。整個過程當中,只有請求主機到本地DNS服務器的查詢時遞歸的,其他都是迭代的。

graph TB A[請求主機]-->|1| B[本地DNS服務器] B-->|8|A B-->|2|C[根DNS服務器] C-->|3|B B-->|4|D[TLD DNS服務器] D-->|5|B B-->|6|E[權威DNS服務器] E-->|7|B

遞歸查詢算法

遞歸的查詢算法全部的查詢都是遞歸的,詳細流程以下所示。

graph TB A[請求主機]-->|1| B[本地DNS服務器] B-->|8|A B-->|2|C[根DNS服務器] C-->|7|B C-->|3|D[TLD DNS服務器] D-->|6|C D-->|4|E[權威DNS服務器] E-->|5|D

DDoS

分佈式拒絕服務(DDos)帶寬洪範攻擊,是一種常見的DNS攻擊方式,其主要途徑是向每一個DNS根/權威服務器發送大量分組,是的大多數合法的DNS請求得不到答案,

DNS提供的其餘服務

DNS除了完成將域名翻譯成ip的任務外,還提供瞭如下輔助功能

  • 主機別名(host aliasing):DNS除了維護域名和Ip的關係外,還能夠維護一套域名和別名的映射關係。好比,域名爲www.relay1.west-coast.enterprise.com的主機,咱們能夠給他起一個別名叫,www.enterprise.com。當咱們訪問www.enterprise.com的時候,DNS服務器能夠自動的跳轉到域名www.relay1.west-coast.enterprise.com對應的地址上。
  • 負載分配(load distribution):加入一個域名後面對應多個ip地址。當請求DNS客戶端的請求過來以後,DNS服務器能夠按照必定的策略對多個ip實行負載分配

TIP

Windows環境下清空DNS緩存的命令是 ipconfig/flushdns 也能夠經過重啓DNS client 和 DHCP client 兩項服務清空DNS緩存 Windows環境下能夠用命令 ipconfig /displaydns 來查看DNS緩存的內容 nslookup 命令能夠用來查看域名對應的IP地址,好比 nslookup jocent.me

參考資料

《計算機網絡自頂向下方法》

相關文章
相關標籤/搜索