递归服务器怎么知道根权威服务器的地址?很简单,在递归服务器上都保存有一份根服务器的地址列表,如上面表格列出的根服务器的地址。
递归服务器每次查询域名都要向根那里找权威服务器吗?不是的,一旦成功一次,递归服务器就会把权威服务器列表缓存下来(如COM顶级服务器列表可以缓存48小时)。
转发DNS
负责接受用户查询,并返回结果给用户。但这个结果不是按标准的域名解析过程得到的,而是直接把递归DNS的结果转发给用户。它也具备缓存功能。他主要使用在没有直接的互联网连接,但可以连接到一个递归DNS那里,这时使用转发DNS就比较合适。其缺陷是:直接受递归DNS的影响,服务品质较差。比如我们用的路由器里面的DNS就是这一类,用路由器的朋友可以看下本地电脑的DNS一般都是192.168.1.1。
因此转发DNS可以看作是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台DNS服务器,由另外一台DNS服务器来完成查询请求。
DNS查询过程
DNS污染
指的是用户访问一个地址,国内的服务器(非DNS)监控到用户访问的已经被标记地址时,服务器伪装成DNS服务器向用户发回错误的地址的行为。 为了减免网络上的交通,一般的域名都会把外间的域名服务器数据暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关网域的局域域名服务器的缓存受到污染,就会把网域内的电脑导引往错误的服务器或服务器的网址。
某个国家出现过多次的DNS污染, 参看 知乎 。
DNS缓存
查询DNS的时候可能会有多个地方存在缓存:
浏览器 DNS缓存
Java DNS缓存
OS DNS缓存
Local DNS缓存
##eDNS
由于CDN主要根据用户LocalDNS的请求IP的运营商和地理属性返回相同或相近属性的节点,当用户使用了非当前网络运营商提供的DNS而使用知名的开发DNS如谷歌DNS(8.8.8.8或8.8.4.4)或OpenDNS(208.67.222.222或208.67.220.220)时,CDN往往不能正确选择最优节点,这也造成部分用户对CDN的效果产生了质疑。
针对这种状况,谷歌提出一个草案,并已由IETF牵头作为一个公开的标准建议,该草案叫 “edns-client-subnet” ,允许DNS resolver传递用户的ip地址给权威 DNS 服务器。其原理是当用户请求DNS的时候,递归DNS查询服务器将用户的IP或IP子网信息发给权威DNS服务器,权威服务器可以根据该信息返回相应的查询结果。