DNS是个啥

  • DNS(Domain Name System),顾名思义即域名系统,它被设计成一个联机分布式数据库系统,并采用客户服务器方式,主要职责是将互联网上的主机名字转为IP地址
  • 域可以划分子域,形成多级域名,每个域名由标号序列组成,标号之间用’.’隔开,标号由英文和数字组成,不区分大小写,但有长度限制

  • 需要注意的是,DNS服务器的管辖范围是以区为单位进行管辖的,区<=域,区是域的子集,一个区中的所有节点都是连通的,每个区都设置相应的权限域名服务器。
  • 域名服务器按层次排列分别为,根域名服务器->顶级域名服务器->权限域名服务器

  • 还有一个特殊的本地域名服务器,它不属于域名服务器层次结构,当一台主机发出DNS查询请求时,这个请求就会发给本地域名服务器。
  • 为了提高域名服务器的可靠性,通常会把数据复制到几个域名服务器中来保存,一个主域名服务器,其他为辅助域名服务器

解析URL哪部分?

怎么解析的

了解了DNS是个啥,也知道它对URL哪部分进行操作,那我们就正式开始看看它是怎么把一个域名解析成IP地址的

基本流程

  • 当应用进程需要把主机名解析成IP地址时,该应用进程就调用解析程序,并成为DNS的一个客户,把带解析的域名放在DNS请求报文中,为了减少开销会以UDP用户数据报方式发给本地域名服务器,采用递归查询。
  • 本地域名服务器在查找域名后,若找到,则把对应的IP地址放在响应报文中返回,应用进程拿到IP地址即可建立连接进行通信
  • 若本地域名服务器不能回答该请求,则本地域名服务器就暂时成为DNS中另一个客户,并向其他域名服务器发出查询请求,直到找到或者是报错为止。

本地域名服务器向根服务器的查询通常都是迭代查询,也可以是递归查询

迭代查询示意图

递归查询示意图

高速缓存

我们访问网址肯定是想响应越快越好,为了优化DNS查询效率,并减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存。

高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录,查询时发现若有记录便直接向最近的步骤进行,而不用一步一步发送请求了。

域名服务器为了提高域名转换的准确性,需要给每一项记录设置一个失效时间值。

主机中也有高速缓存,每次我们查询时先从浏览器缓存中找,然后在主机缓存中找,最后才使用域名服务器

扩展

我们上面所说的是DNS的正向查询过程,即根据域名查询IP地址,但DNS还有反向查询的功能

反向查询即根据IP查询域名,主要应用到邮件服务器中来阻拦垃圾邮件确,保适当的邮件交换记录是生效的。。

由于在域名系统中,一个IP地址可以对应多个域名,从IP出发区找域名理论上需要遍历整颗域名树才能有正确完整的结果。但这很不现实,所以DNS域名系统提供了一个逆向解析域in-addr.arpa

例如一个IP地址:222.211.233.244,其逆向域名表达方式为:244.233.221.222.in-addr.arpa

实质上逆向域名解析是将IP地址表达成一个域名,以地址做为索引的域名空间,这样逆向解析的很大部分可以纳入正向解析中。