Domain Name System
一个由分层的DNS服务器实现的分布式数据库
- 根DNS服务器
- 顶级DNS服务器(Top Level Domain)
- 权威DNS服务器
一个使得主机能够查询分布式数据库的应用层协议
运行在UDP之上,53号端口
交互过程
根、TLD和权威DNS服务器都处在DNS服务器的层次中,还有一类称为本地DNS服务器,严格来说不处于该层次结构中.当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理作用,并将请求发往DNS服务器层次结构中。
1.向本地DNS服务器发送查询报文,包含被转换的主机名gaia.cs.umass.edu
2.本地DNS服务器将该报文转发到根DNS服务器
3.根DNS服务器注意到edu前缀并向本地DNS服务器edu的TLD的IP列表地址
4.本地DNS服务器向TLD服务器之一发送查询报文,TLD服务器注意到umass.edu,并用其权威服务器地址dns.umass.edu进行响应
5.本地DNS服务器直接向权威服务器地址dns.umass.edu重发查询报文,权威服务器dns.umass.edu用gaia.cs.umass.edu进行响应
共4次查询4次响应
第1次查询是递归查询,该查询以dns.poly.edu名义进行
后面3个查询是迭代查询,所有的回答直接返回。
DNS缓存
DNS服务器收到回答时就将回答缓存在本地存储器上,有失效时间。一般发送请求时浏览器的DNS查找顺序是:浏览器缓存>系统缓存>路由器缓存>本地DNS服务器缓存>递归查询。
一般本地DNS服务器缓存可在ISP上,中间有路由器的话可能是路由器。
浏览器缓存
浏览器DNS缓存和DNS服务器的TTL(time to live)
无关,每种浏览器都有固定的DNS缓存时间,Chrome为1min
系统缓存
dns查询命令:
- ipconfig /displaydns
:查询所有DNS缓存
- nslookup -d www.baidu.com
或者 nslookup www.baidu.com
查询某URL的DNS信息。
ISP DNS缓存
有些ISP会忽略网站DNS提供的TTL,而自己设置1个较长的TTL,导致顶级DNS更新时,不能及时拿到新的IP地址。
DNS域名解析—负载均衡
在DNS系统中有1个重要的资源记录叫A记录,他将特定的域名映射到对应主机的IP地址上。将A记录填写到特定的DNS解析服务商的服务器上,过段时间别人就可以通过域名访问自己的网站了。这里若有多个服务器主机则DNS除了解析域名之外还需根据用户进行负载均衡:
可看出:上面的负载均衡节点是单点的,DNS服务器中配置了多条A记录,每次域名解析都会根据对应的负载均衡算法计算出对应的IP地址,但这是传统的做法,如果DNS服务器崩了那所有用户都不能访问网站了
下面是CDN的做法:
可看出所有请求被分配到不同的节点上,即使单点故障也可进行故障转移。
负载均衡算法
DNS服务器可能位于任意位置,DNS会将域名解析为距离用户地理最近的服务器地址,这样便可以加速访问。
具体如何解析?
DNS查询顺序为:PC>浏览器缓存>系统缓存>路由器缓存>本地DNS服务器缓存>递归查询>迭代查询>返回给PC,其中迭代查询中将进行智能DNS解析,可用方式:
1. 将不同区域的IP地址存储在一张IP地址及其地理信息的映射表中,当有用户请求时,将其解析到最近的线路中。
2. 根据不同线路的繁忙程度解析到空闲的线路中。