来学一学DNS吧。

简介

域名解析系统采用 客户端/服务器(Client/Server)模型,是一种应用层协议,它的作用是把我们所熟知的域名(domain )翻译成 ip 地址。主要是人们通常乐意记住域名而不是记住ip,就好比学校里老师喜欢叫名字而不是叫你学号,但是学号又是唯一确定的一个学生,而名字是可以重复的。给出一个学生名称,查询对应学号的一个系统就叫学号解析系统,类似的,给出一个域名,查询一个对应的ip地址就叫域名解析系统。

DNS提供的服务

以最简单的 url 为例,https://www.baidu.com/

把url化成一般格式是 <协议名称>://<主机域名或者是ip地址>:<端口号>/<资源路径>

对应起来,上面的那个 url 解析之后就是:

  • 协议名称:https
  • 主机域名:www.baidu.com
  • 端口号:无(没有端口号会根据http还是https指定默认80或者443端口)
  • 资源路径:/(网站根目录)

在网络层,我们知道我们要与一个确定的主机发起通信需要知道对方的 ip 地址,而 www.baidu.com 这样的地址并不能被路由器识别,所以在请求之前,会先在应用层中,做一次域名解析(DNS服务)。

所以域名解析为我们提供域名到ip地址的映射,这个映射是多对多(即一个 ip 地址可以有多个域名,一个域名也可以解析出多个ip地址)的。

DNS详解

域名

因特网采用层次树状结构的命名方法。域可划分为:顶级域、二级域、三级域。对应的域名可以划分为:顶级域名、二级域名、三级域名,不同层级的域名用英文的 . 分隔。

再上面这个域名的例子当中,www 表示三级域,baidu 表示二级域,com 表示顶级域。

域名中的标号具有以下特点:

  1. 标号中的英文不区分大小写。
  2. 标号中除连字符-以外不能使用其他标点符号。
  3. 每个域名不超过63个字符,多标号的完整域名不超过255个字符。
  4. 级别最低的域名写左边,级别最高的顶级域名写在最右边。

一般来说,最低级的域名叫主机名,比如对于 www.baidu.com 来说,www 是它的主机名。

域名服务器

DNS使用大量的域名服务器,他们以层次方式组织。主要有4类域名服务器:

  1. 根域名服务器

    最高层次的域名服务器,所有的根域名服务器都知道所有顶级域名服务器的IP地址,也是最重要的域名服务器。碰到无法解析的域名,首先求助于根域名服务器。因特网上有13个根域名服务器。通常不直接告诉待查询的IP地址,而是告诉你去那个域名服务器查找。

  2. 顶级域名服务器

    负责管理该顶级域名所注册的所有二级域名。

  3. 授权域名服务器

    每台主机都必须在授权域名服务器处登记,授权域名服务器可以将主机名转换为该主机的IP地址。

  4. 本地域名服务器

    每个因特网服务提供者ISP,或学校等,都可以拥有一个本地域名服务器。DNS查询请求时,是发送给本地域名服务器的。

DNS查询方式

你在接入因特网的时候,因特网服务提供商会给你指定一个域名服务器,这个叫本地域名服务器

比如你接入了移动公司提供的网络,在你入网的时候,它会告诉你的设备,指定 114.114.114.114 这个服务器作为你的本地域名服务器。

比如在学校,学校可以作为一个小型的网络提供商,提供校园网服务,比如在ZJXU,它给我指定了 10.1.1.9 作为本地域名服务器。

你的所有请求都是发给你的本地域名服务器的,在ipv4的设置中,有一项设置就是指定dns,也就是你的本地域名服务器。一般来说,你只和它进行交互。查询有递归查询和迭代查询两种方式,

对于迭代查询,本地域名服务器要负责解析每一级的域名。

对于 www.baidu.com 的dns查询请求发送到了本地域名服务器之后,本地域名服务器就会问根域名服务器:请问 .com 是哪位,这个问题根域名服务器是可以回答的,于是告诉了本地域名服务器:.com 的 ip 是 xxx。.com是顶级域,告诉我们的这个对应的域名服务器是顶级域名服务器。本地域名服务器就知道了顶级域名服务器,于是它又问,请问 baidu.com 是哪位,这个问题 顶级域名服务器 当然是能够回答的,于是告诉了本地域名服务器,ip是多少。其实这个时候 baidu.com 已经是对应了一个独立的公司,同时公司在注册的时候,会把它的授权域名服务器告诉顶级域名服务器,所以其实这一步,我们在查 baidu.com 已经获得了一个 授权域名服务器 的 ip,最后,当然就是问 授权域名服务器www.baidu.com 的 ip 地址,于是它给出了正确的 ip 地址,完成了一次迭代域名查询。

递归查询用的不是很多,但是听名字也应该知道,是以下方式进行查询的:

但是很明显,这样子对于根域名服务器的压力是很大的,因此现在比较多的还是迭代查询。