DNS基礎及域名系統架構


本文出自   http://blog.csdn.net/shuangde800

---------------------------------------------------------------------------------

 

 

域名

 
IP地址往往難以記憶,所以我們一般使用域名進行管理
 
www.google.com
 
域名分為三個部分,用“.”(點)分割。嚴格的域名最后還有一個".",但一般省略不寫。
     -類型     標識此域名的類型(com/net/org/edu/gov等)
     -域名     域名稱
     -主機名  該域中的某台主機名稱
 
 
www: 主機名
google:域名
com: 類型
 
 

 

DNS  

 
  • 每個域名代表一IP,而DNS就是用來在IP與域名之間進行轉換的服務
 
www.google.com   <--->  74.125.128.105
 
 
  • DNS(Domain Name System)服務由DNS服務器提供

 
 
 

DNS客戶端

 
  • 我們日常使用的支持網絡的計算機一般都是作為一個DNS客戶端使用,應用程序、服務、進程等等通過操作系統底層的功能發起對dns服務器的查詢,對特定域名進行解析
  • Linux中一般使用系統底層提供的gethostbyname()功能進行域名解析
  • 解析可以基於以下幾種方式進行:

            1) 文件(/etc/hosts、/etc/networks)

下面是/etc/hosts,可以看到這個文件把localhost解析為127.0.0.1以及其它的一些解析
 
在查DNS之前都會先查這個文件,所以黑客可能會通過修改這個文件,讓用戶進入一些釣魚網站。
 
下面是/etc/networks文件
 
 
 

            2)DNS  

  幾乎所有的域名都是通過DNS域名服務器來解析的。DNS配置文件是在 /etc/resolv.conf文件下,里面配置DNS服務器

            3) NIS

  這個用得比較少,基本被淘汰掉了

 

  • 可以通過配置文件 /etc/nsswitch.conf控制查詢順序

其中的host:files   dns .... 這一行是控制順序的

 

 


 

DNS專用查詢命令

 

  • 命令host可用於進行dns查詢:

      $ host  www.google.com

 

  • 命令dig也可進行dns查詢,輸出較為詳細的信息:

      $ dig  www.google.com

 
  • 命令host、dig都不會使用/etc/nsswitch.conf的配置,只有會通過/etc/resolv.conf進行dns查詢。即會繞過前面那個文件配置。
 
 
 

 

DNS查詢

 
DNS是一個樹狀結構,查詢的時候根據域名從右到左查詢,域名每一級有獨立的一個或多個服務器。
 
例如,www.linuxcast.net.

 
最上面的"."是根域名服務器(root DNS Server),用來保存下一級的com/net...的地址,全球共有13台根域名服務器。這13台根域名服務器中名字分別為“A”至“M”,其中10台設置在美國,另外各有一台設置於英國、瑞典和日本。
 
第二級是頂級域名服務器(Top Level Server),每個頂級域名服務器都是由一台或多台服務器控制的,每個一分別保存相應的以/com/net/org/....為后綴的域名的管理。
 
第三級是授權服務器(Authoritative Server),只負責linuxcast以下的信息。這里可以查找到www, mail, 和ftp主機。
 
  • $  dig  +trace  www.linuxcast.net  
      這個命令可以追蹤整個域名的查詢過程
 
可以發現查詢順序是: . ——》net. ——》linuxcast.net. ——》www.linuxcast.net.
 

 

DNS的查詢類型

 
1.  迭代查詢(Iterative Query)
 
例如客戶端用迭代查詢的方式訪問www.linuxcast.net:
 
 
1. 首先客戶端發送請求到本地DNS服務器(Local DNS Server,即客戶端配置的DNS服務器)
2. 如果本地DNS不知道這個域名的話,就會去查詢根域名服務器
3. 根服務器返回.net服務器的地址
4. 然后本地DNS在去查詢net服務器
5. net服務器返回linuxcast.net的地址
6. 本地DNS再向Linuxcast.net發送請求
7. linuxcast.net返回www主機給本地DNS
8. 本地DNS返回www.linuxcast.net的地址給客戶端。
 
 
2. 遞歸查詢(Recursive  Query)
例如客戶端用遞歸查詢的方式訪問www.linuxcast.net:
 
1. 首先客戶端發送請求到本地DNS
2. 如果本地DNS不知道這個地址的話,那么就會向根DNS服務器查詢。
3. 然后根DNS服務器不會像迭代查詢一樣返回net地址,而是它會代替本地dns向net服務器發送請求查詢
4. 然后net服務器也不會像迭代查詢一樣返回linuxcast.net的地址,而是代根DNS服務器向linuxcast.net查詢
5. 最后linuxcast.net服務器返回www主機的地址給net
6. net服務器返回www.linucast.net的地址給根DNS服務器
7. 根DNS服務器這時再返回www.linucast.net的地址給本地DNS
8. 最后本地DNS返回目標地址給客戶端
 
這種查詢方式的缺點:在每一級的服務器上,都會緩存大量的信息,因為它要等待查詢返回,可能會占用大量的內存。
 
所以實際應用中,會結合這兩種方式使用,即在客戶端向本地DNS服務器查詢是使用遞歸查詢,而本地DNS服務器和其他級服務器使用的是迭代查詢!
 
 

 

資源記錄

 
在DNS服務器上,DNS的信息通過一個叫做資源記錄(RR,Resource Record)的格式進行保存,RR不僅能夠保存域名到IP地址的對應信息,還能夠保存很多其它信息。
 
資源記錄(RR,Resource Record)常用的屬性:
      - NAME(名稱)
      - CLASS(類別)
      - TYPE(類型)
      - RDATA(數據)
 
如,
NAME CLASS TYPE RDATA
www IN(Internet) A   192.168.1.1
mail IN A 192.168.1.2
server1 IN CNAME   www
  IN MX  10 mail.linuxcast.net
 
 

資源記錄類型

 
DNS的資源記錄可以記錄很多類型資源,而不僅僅是IP地址,常見的資源記錄類型:
 
類型 表示內容
A IPv4地址
AAAA IPv6地址
MX     郵件記錄
CNAME 別名
PTR 指針(逆向解析)
SRV 服務資源
 
 
 

 

DNS服務器類型

 
  • 主DNS服務器(Primary DNS Server ,Master)
    一個域的主服務器保存該域的zone配置文件,該域所有的配置、更改都在該服務器上進行
 
  • 從服務器(Second DNS Server,Slave)
    從服務器一般作為冗余負載使用,一個域的從服務器從該域的主服務器上抓取zone配置文件,從服務器不進行信息修改,所有的修改與主服務器同步
 
  • 緩存服務器(Caching only Server)
    DNS緩存服務器不存在任何zone文件,僅僅依靠緩存作為客戶端提供服務,通常用於負載均衡及加速訪問使用
 
 

ZONE

 
在DNS服務器中,一般一個域通過一個ZONE文件保存該域的相關信息,zone文件的格式是標准化的,一個典型的zone配置文件內容如下:
有標准模板
STTL  ID
@ IN  SOA  @rname.invalid. (
                               0    : serial          (序列號,DNS服務器修改過一次序列號加1,從服務器發現序列號和自己不一樣就會自動更新)
                               1D  : refresh       (刷新時間,1D=1天)
                               1H  : retry           (重試, 1H=1小時)
                               1W : expire          
                               3H  ); minimum     
(上面一般直接使用默認的就可以)
           NS @
           MX 10   mail.linuxcast.net
www    IN  A     192.168.1.100
mail     IN  A     192.168.1.200
(上面是數據)
 
 

 

高級查詢

 
  • 默認dig命令只能查詢我們通過dig命令查詢其他類型的資源記錄:
      $ dig  -t  mx  linuxcast.net
      $ dig  -x  www.linuxcast.net    進行逆向解析
      $ dig  -t  soa  linuxcast.net


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM