域名系统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
posted @ 2017-05-09 17:06  -Finley-  阅读(6758)  评论(0编辑  收藏  举报