iOS面试题iOS面试iOS面试题

2019 iOS面试题-----网络相关之DNS

2019-03-21  本文已影响81人  Theendisthebegi

一、DNS

因特网上的主机,可以使用多种方式标识,比如主机名或IP地址。

为了折衷这两种方式,我们需要一种能进行主机名到IP地址转换的目录服务。这就是域名系统(Domain Name System,DNS)的主要任务。

DNS是:
1、一个由分层的DNS服务器实现的分布式数据库
2、一个使得主机能够查询分布式数据库的应用层协议

而DNS服务器通常是运行BIND软件的UNIX机器,DNS协议运行在UDP上,使用53号端口
DNS通常是由其他应用层协议所使用的,包括HTTPSMTP等。其作用则是:将用户提供的主机名解析为IP地址

DNS的一种简单设计就是在因特网上只使用一个DNS服务器,该服务器包含所有的映射。很明显这种设计是有很大的问题的:

所以,DNS被设计成了一个分布式、层次数据库

二、DNS服务器

为了处理扩展性问题,DNS使用了大量的DNS服务器,它们以层次方式组织,并且分布在全世界范围内。

域名服务器是提供域名解析的服务器,在有基本的知识下,任何人都可以搭建域名服务器,甚至是根域名服务器,有名的软件有:BIND

目前的DNS服务器大致分为3种类型的DNS服务器:根DNS服务器、顶级域DNS服务器、权威DNS服务器

1、 根DNS服务器

因特网上有13个根DNS服务器(标号A到M),1个为主根服务器在美国。其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本。这里的并不是指物理意义上的单个服务器,它是一个逻辑概念,根DNS服务器可以由分布在全球的多个服务器组成,形成一个集群,对外统一为1台逻辑的根DNS服务器(即每个标号下的根DNS服务器的IP地址是一样的)。而实际物理意义上的根DNS服务器,已超过千台
https://root-servers.org/ 这里可以查到所有根DNS服务器的分布



如图,截止发这篇文章之前,中国有19台根DNS服务器,分别位于:
2、顶级域(TLD)DNS服务器

这些服务器负责顶级域名如com、org、net、edu和gov,以及所有国家的顶级域名如uk、fr、ca和cn

3、权威DNS服务器

在因特网上具有公共可访问主机的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。一个组织机构的权威DNS服务器收藏了这些DNS记录。

除此之外,还有一种很重要的DNS,成为本地DNS服务器,其严格来说不属于该服务器的层次结构,但它对DNS层次结构是重要的。每个ISP (互联网服务提供商),比如一个大学,一个公司或一个居民区的ISP,都有一台本地DNS服务器

三、DNS解析过程

1、迭代查询和递归查询

如图,很清晰地显示出了一条DNS查询链:本地DNS服务器-->根DNS服务器-->顶级域DNS服务器-->权威DNS服务器 ,所有查询都是递归的。
这是递归查询

这种利用了迭代查询递归查询,从Client与本地DNS之间是递归查询,其余则是迭代查询
所谓 递归查询过程 就是 “查询的递交者” 更替, 而 迭代查询过程 则是 “查询的递交者”不变。
从理论上讲,任何DNS查询既可以是迭代的也能是递归的。
而在实际过程中,更常用的是图上 从请求主机到本地DNS服务器的查询是递归,其余查询是迭代的这种方式。

2、DNS缓存

DNS缓存(DNS Caching):为了改善时延性能并减少在因特网上到处传输的DNS报文数量,DNS广泛使用了缓存技术。
在一个请求链中,当某DNS服务器接收一个DNS回答时,它能将该回答中的信息缓存在本地存储器中。那么另一个对相同主机名的查询到达该DNS服务器时,该DNS服务器就可以提供所要求的IP地址,即使它不是该主机名的权威服务器。
由于IP和主机名的映射并不是永久的,DNS服务器在一段时间后就会丢弃缓存的信息。
本地DNS服务器也能够缓存TLD服务器的IP地址,从而允许本地DNS绕过查询链中的根DNS服务器。

而事实上,有DNS的地方,就有缓存。浏览器、操作系统、本地 DNS服务器、根DNS服务器,它们都会对DNS结果做一定程度的缓存。
3、DNS解析过程

上图一目了然,大致分为8步:

  • 1、发起基于域名的请求后,首先检查本地缓存(浏览器缓存-->操作系统的hosts文件)
  • 2、如果本地缓存中有,直接返回目标IP地址,否则将域名解析请求发送给本地DNS服务器
  • 3、如果本地DNS服务器中有,直接返回目标IP地址,到这一步基本能解析80%的域名。如果没有,本地DNS服务器将解析请求发送给根DNS服务器
  • 4、根DNS服务器会返回给本地DNS服务器一个所查询的TLD服务器地址列表
  • 5、本地DNS服务器再向上一步返回的TLD服务器发送请求,TLD服务器查询并返回域名对应的权威域名服务器的地址
  • 6、本地DNS服务器再向上一步返回的权威域名服务器发送请求,权威域名服务器会查询存储的域名和IP的映射关系表,将IP连同一个TTL(过期时间)值返回给本地DNS服务器
  • 7、本地DNS服务器会将IP和主机名的映射保存起来,保存时间由TTL来控制
  • 8、本地DNS服务器把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束

四、DNS记录和报文

1、资源记录

所有DNS服务器都存储了资源记录(Resource Record,RR),其提供了主机名到IP的映射。
资源记录是一个包含以下字段的四元组:
(Name,Value,Type,TTL)
TTL是该记录的生存时间,决定了资源记录应当从缓存中删除的时间。
Name和Value的值取决于Type(以下涉及的foo,bar均为伪变量):

2、DNS报文

DNS只有查询和回答两种报文,这两种报文格式是一样的。

得知DNS的报文格式后,我们也就可以手动发送DNS查询包了。
一个在线DNS查询的工具:https://tool.lu/dns/index.html

五、DNS解析安全问题

1、DNS劫持

一种可能的域名劫持方式即黑客侵入了宽带路由器并对终端用户的本地DNS服务器进行篡改,指向黑客自己伪造的本地DNS服务器,进而通过控制本地DNS服务器的逻辑返回错误的IP信息进行域名劫持。

另一方面,由于DNS解析主要是基于UDP协议,除了上述攻击行为外,攻击者还可以监听终端用户的域名解析请求,并在本地DNS服务器返回正确结果之前将伪造的DNS解析响应传递给终端用户,进而控制终端用户的域名访问行为。

2、缓存污染(DNS污染)。

我们知道在接收到域名解析请求时,本地DNS服务器首先会查找缓存,如果缓存命中就会直接返回缓存结果,不再进行递归DNS查询。这时候如果本地DNS服务器针对部分域名的缓存进行更改,比如将缓存结果指向第三方的广告页,就会导致用户的访问请求被引导到这些广告页地址上。

3、如何解决DNS劫持?

DNS解析发生在HTTP协议之前,DNS解析和DNS劫持和HTTP没有关系,DNS协议使用的是UDP协议向服务器的53端口进行请求。
要想解决DNS劫持:

上一篇下一篇

猜你喜欢

热点阅读