域名系統DNS簡介


域名系統(Domain Name System, DNS)是互聯網的核心應用層協議之一, 它用於查詢域名對應的IP地址.在使用域名訪問任何網絡資源時都需要先進行域名解析.

www.cnblogs.com是一個典型的域名, 在進行Http訪問之前它會先被DNS轉換為一個ip地址.

域名與目錄樹類似形成一個樹狀結構, 最右側為頂級域, 向左域名級別降低.

所有域名都屬於根域. 根域由13組根域名服務器管理, 從A.ROOT-SERVERS.NETM.ROOT-SERVERS.NET.

根域的下一級為頂級域(top level domain, TLD), 如通用頂級域名.com, .net, .gov和地區頂級域名.cn, .jp等. 下一級為次級域名, 如cnblogs, baidu, google.

最低級的為主機名, 如www, mail等.

根域下頂級域名的分配和使用由非營利性的互聯網名稱與數字地址分配機構(Internet Corporation for Assigned Names and Numbers, ICNN)管理.

頂級域下次級域名由各地區的域名管理機構管理, 主機名則由域名擁有者自己管理.

域名解析

域名系統是一個典型的分布式數據庫, 每個名稱服務器(nameserver)只存儲着部分數據. 當其無法解析某個域名時, 就向其它服務器請求解析直到成功解析或超時.

下面簡單介紹DNS解析過程:

  1. 查詢本地hosts文件, unix系操作系統一般在/etc/hosts

  2. 若hosts文件不存在相關記錄, 則檢查本地DNS緩存.

  3. 若本地DNS緩存不存在相關記錄則查詢首選名稱服務器.

若目標域名處在名稱服務器的管理之下, 則名稱服務器可以給出可靠的解析結果.

若目標域名不屬於名稱服務器管理但在它的緩存中, 名稱服務器可以根據它的緩存給出一個不可靠的解析結果.

若首選名稱服務器無法解析域名, 根據名稱服務器的配置有兩種策略:

  • 若本地DNS配置了轉發, 則請求轉發給上一級DNS解析. 上級DNS將解析結果返回給本地DNS, 由本地DNS返回給客戶端.

  • 若本地DNS未配置轉發, 則自頂向下查詢:

  1. 本地DNS請求根服務器(共13台), 根服務器將頂級域名主名稱服務器的IP地址返回給本地DNS.
  2. 本地DNS則請求頂級域名服務器. 若頂級域名服務器可以解析則將結果返回給本地DNS, 由本地DNS返回給客戶端.
  3. 若頂級域名服務器無法解析則返回下一級主名稱服務器地址, 直到某一級DNS成功解析.

DNS記錄

DNS是一個分布式的數據庫, 名稱服務器使用DNS記錄(dns record)保存域名和IP之間的關系.

名稱服務器使用區域文件(zone file)保存自己的記錄, 區域文件中除了DNS記錄外還定義了一些環境變量.

  • $ORIGIN表示本NS管理的域, 如$ORIGIN example.com.表示本NS管理 example.com域.

  • $TTL表示解析記錄在緩存中的默認過期時間.

這是一個區域文件的示例, 可以讓我們更好地理解區域文件:

$ORIGIN example.com.  
$TTL 1h               
example.com.  IN  SOA   ns.example.com. username.example.com. ( 2007120710 1d 2h 4w 1h )
example.com.  IN  NS    ns   
example.com.  IN  NS    ns.somewhere.example.
example.com.  IN  MX    10 mail.example.com.  
@             IN  MX    20 mail2.example.com. 
@             IN  MX    50 mail3              
example.com.  IN  A     192.0.2.1             
              IN  AAAA  2001:db8:10::1        
ns            IN  A     192.0.2.2             
              IN  AAAA  2001:db8:10::2        
www           IN  CNAME example.com.          
wwwtest       IN  CNAME www                   
mail          IN  A     192.0.2.3             
mail2         IN  A     192.0.2.4             
mail3         IN  A     192.0.2.5             

DNS記錄有以下幾種類型:

A記錄和AAAA記錄

A記錄是IPv4主機記錄, AAAA為IPv6主機記錄, 如下面這一條:

example.com.  IN  A     192.0.2.1
			  IN  AAAA  2001:db8:10::1

它表示主機example.com對應的IPv4地址為192.0.2.1, IPv6地址為2001:db8:10::1.

第二個字段IN表示Internet, 這一字段會出現在很多記錄中.

最后加.表示采用絕對路徑, 區域文件也可以用相對路徑來配置.

下面兩條記錄的作用是一樣的:

www.example.com. IN A 192.0.2.2

相對路徑表示:

www IN A 192.0.2.2

@$ORIGIN記錄了IP地址, 下面這條記錄配置了example.com主機的IP地址:

@ IN A 192.0.2.1

SOA記錄

授權開始(Start of Authority, SOA)記錄是區域文件的第一條記錄, 用於記錄為本服務器授權的上級名稱服務器.

example.com.  IN  SOA   ns.example.com. username.example.com. ( 		
	2007120710 ; serial number
	1d ; refresh interval 
	2h ; retry interval
	4w ; expiry period
	1h ; negative TTL
)

上述記錄表示域example.com的主名稱服務器為ns.example.com.

username.example.com.表示管理員郵箱為username@example.com, 注意@被替換為..

后面的字段表示:

  • serial number表示本服務器記錄的版本號, 每次修改版本號就會加1. 通過比較本服務器版本號和上級服務器版本號已進行同步.
  • refresh interval表示向SOA服務器請求更新記錄的間隔
  • retry interval表示向SOA服務器請求更新記錄失敗時的重試周期
  • expiry period表示SOA服務器若在此時間內不響應, 則不再將其作為SOA服務器
  • negative ttl表示當查詢結果為無此記錄時, 緩存該結果的時間

NS記錄

ns記錄用於表示某個域的名稱服務器:

example.com.  IN  NS    ns   
example.com.  IN  NS    ns2.example.com.

上述兩條記錄表示example.com域的名稱服務器為ns.example.com, 備用名稱服務器為ns2.example.com.

每個區域文件中至少定義兩個名稱服務器,以便在一個服務器出現問題時還能正確運行. 如果只有一個名稱服務器,大多數 DNS 服務器軟件都會認為區域文件無效.

在自頂向下查詢過程中, 父域的名稱服務器根據自己的ns記錄確定子域的名稱服務器.

MX記錄

MX記錄用於表示某個域的郵件服務器:

example.com.  IN  MX  10 mail.example.com.  

上述記錄表示mail.example.comexample.com域的郵件服務器.

也可以使用@表示根域, 使用相對路徑表示郵件服務器.

@             IN  MX    20 mail2.example.com. 
@             IN  MX    50 mail3           

記錄中第4個字段的數字表示優先級, 數字越小優先級越高.

CNAME記錄

CNAME記錄用於記錄域名別名:

www           IN  CNAME example.com.          
wwwtest       IN  CNAME www     

上述記錄表示www.example.comexample.com的一個別名, wwwtest.example.com又是www.example.com的一個別名.

DNS工具

配置本地nameserver

在我們可以使用域名訪問網絡前, 需要先配置本地的名稱服務器. 本地名稱服務器可以由DHCP協議動態分配, 也可以手動配置.

Unix系列操作系統, 在/etc/resolv.conf配置文件中設置nameserver:

nameserver 172.18.49.59

為自己的網站配置域名

首先, 自己網站的服務器需要擁有一個公網IP, 使得我們在互聯網上可以直接訪問該主機.

隨后可以在域名提供商處購買自己的域名, 比如finley.cn. 然后在域名提供商處添加A記錄將域名解析到自己主機的公網ip.

查詢所有者

whois指令可以查詢域名所有者的信息:

& whois cnblogs.com
Domain Name: cnblogs.com
Registry Domain ID: 866509_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.35.com
Registrar URL: http://www.35.com
Updated Date: 2016-10-23T22:59:39Z
Creation Date: 2003-11-11T04:00:00Z
Registrar Registration Expiration Date: 2021-11-11T04:00:00Z
Registrar: 35 Technology Co., Ltd.
...

DNS查詢

host命令可以查詢某個域名的ip:

$ host cnblogs.com
cnblogs.com has address 42.121.252.58

cnblogs.com mail is handled by 30 aspmx2.googlemail.com.
cnblogs.com mail is handled by 30 aspmx3.googlemail.com.
cnblogs.com mail is handled by 30 aspmx4.googlemail.com.
cnblogs.com mail is handled by 30 aspmx5.googlemail.com.
cnblogs.com mail is handled by 10 aspmx.l.google.com.
cnblogs.com mail is handled by 20 alt1.aspmx.l.google.com.
cnblogs.com mail is handled by 20 alt2.aspmx.l.google.com.

nslookup可以交互式查詢:

 $ nslookup
> cnblogs.com
Server:		172.18.49.59
Address:	172.18.49.59#53

Non-authoritative answer:
Name:	cnblogs.com
Address: 42.121.252.58

dig命令可以看到DNS解析過程:

dig cnblogs.cn

; <<>> DiG 9.8.3-P1 <<>> cnblogs.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54154
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 4, ADDITIONAL: 0

;; QUESTION SECTION:
;cnblogs.cn.			IN	A

;; ANSWER SECTION:
cnblogs.cn.		600	IN	CNAME	fw1.22.cn.
fw1.22.cn.		973	IN	CNAME	22url.lncdn.com.
22url.lncdn.com.	27	IN	A	103.13.73.87
22url.lncdn.com.	27	IN	A	162.251.94.12
22url.lncdn.com.	27	IN	A	162.251.94.101

;; AUTHORITY SECTION:
lncdn.com.		112713	IN	NS	ns2.360dns.net.
lncdn.com.		112713	IN	NS	ns1.360dns.org.
lncdn.com.		112713	IN	NS	ns2.360dns.org.
lncdn.com.		112713	IN	NS	ns1.360dns.net.

;; Query time: 69 msec
;; SERVER: 172.18.49.59#53(172.18.49.59)
;; WHEN: Tue May  9 17:03:53 2017
;; MSG SIZE  rcvd: 218


免責聲明!

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



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