DNS学习手记 摘录自微信公众号“无声黑白”(wushengheibai7)

DNS基础概念相关

DNS协议运行在UDP协议之上,使用端口号53。

DNS查询过程

♣以查询 www.qq.com 这个域名为例

DNS查询过程

  1. 在浏览器中输入 www.qq.com ,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

  2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性

  4. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性

  5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS(DNS服务器的根提示中配置),根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到 www.qq.com 主机。

  6. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

  7. 当其他客户端再次向本地DNS服务器查询 www.qq.com 时,在TTL时间内,本地DNS服务器不再向根域名服务器转发请求,而是直接从缓存中读取数据应答给客户端。 如果已经超过TTL时间,则本地DNS服务器会再次经历一次上述2-6的过程。

DNS域名结构

DNS命名系统采用层次的逻辑结构,如同一颗倒置的树,这个逻辑的树形结构称为域名空间,由于DNS划分了域名空间,所以各机构可以使用自己的域名空间创建DNS信息。

注:DNS域名空间中,树的最大深度不得超过127层,树中每个节点最长可以存储63个字符。DNS树的每个节点代表一个域。通过这些节点,对整个域名空间进行划分,成为一个层次结构。域名空间的每个域的名字,通过域名进行表示。

DNS域名结构

域名:通常由一个完全合格域名(FQDN)标识。FQDN能准确表示出其相对于DNS 域树根的位置,也就是节点到DNS 树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用“.”分隔,对于DNS 域google 来说,其完全正式域名(FQDN)为google.com。
例如,google为com域的子域,其表示方法为google.com,而www为google域中的子域,可以使用www.google.com表示。

DNS顶级域

共有3种类型的顶级域。

  • 组织域:也叫通用顶级域,采用3个字符的代号,表示DNS域中所包含的组织的主要功能或活动。比如com为商业机构组织,edu为教育机构组织,gov为政府机构组织,mil为军事机构组织,net为网络机构组织,org为非营利机构组织,int为国际机构组织等等。
  • 地址域:采用两个字符的国家或地区代号.如cn为中国,kr为韩国,us为美国。
  • 反向域:这是个特殊域,名字为in-addr.arpa,用于将IP地址映射到名字(反向查询)。

为什么只有13台DNS根服务器

UDP通常用于查询和响应,TCP用于主服务器和从服务器之间的区传送。遗憾的是,在所有UDP实现中能保证正常工作的最大包长是512字节,对于在每个包中必须含有数字签名的一些DNS新特性(例如,DNSSEC)来说实在是太小了。
512字节的限制还影响了根服务器的数量和名字。要让所有的根服务器数据能包含在一个512字节的UDP包中,根服务器只能限制在13个,而每个服务器要使用字母表中的单个字母命名(13台根服务器以字母a-m命名)。
通常常说的13台根服务器只是逻辑上的13台,是指13个根域名系统,大部分根域名服务器通过采用任播技术来共用一个IP,其实物理服务器在全球范围内已有602台,中国大陆有5台(北京4台,杭州1台),中国香港有5台,中国台湾有3台(数据统计截止2017年02月15日 官方网址:http://www.root-servers.org/

DNS配置中的常用记录类型

  • A记录:一般来说就是域名对应的IPV4地址,比如我们购买了腾讯云服务器,它会提供一个IP地址,这里就是将域名和IP地址进行绑定。
  • CNAME:别名记录,通俗来说就是给网站起一个见得人的学名。比如我想使用七牛云做图床,那么创建服务后七牛云会提供一个类似“7abcde.fgh.ij.klm.clouddn.com”的域名,但显然我不想把这个又长又难记而且没什么意义的域名给别人用,那么我就可以在DNS解析记录中添加一条CNAME记录,为该域名起一个简单易懂的名字(当然并不是随便取名,一定要是你能够使用的域名服务),如qiniu.elittle.me。
  • MX:邮箱服务。
  • 显性URL&隐性URL:即重定向,同样是绑定两个域名,当用户访问被重定向域名时,会自动重定向到指定域名。后者区别于前者之处在于不会改变浏览器地址栏中的域名,可以理解为用户注意不到重定向的过程。